如何在ASP.Net IIdentityMessageService 中使用SMTP 或Office 365 帐户?

How to use SMTP or Office 365 account in ASP.Net IIdentityMessageService?

我曾经使用 web.config 配置我的 SMTP 帐户以便能够使用发送电子邮件功能,但 ASP.Net 身份要求电子邮件服务。如何在以下区域使用 SMTP 或 Office 365 电子邮件:

Register.aspx.cs

IdentityResult result = manager.Create(user, Password.Text );

            if (result.Succeeded)
            {
                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                string code = manager.GenerateEmailConfirmationToken(user.Id);
                string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
                manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");

                signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
                IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
            }
            else 
            {
                ErrorMessage.Text = result.Errors.FirstOrDefault();
            }

IdentityConfig.cs

public Task SendAsync(IdentityMessage message)
    {


        // Credentials:
        var credentialUserName = "test@test.com";
        var sentFrom = "test@test.com";
        var pwd = "testpassword";

        // Configure the client:
        System.Net.Mail.SmtpClient client =
            new System.Net.Mail.SmtpClient("smtp-mail.outlook.com");

        client.Port = 587;
        client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;

        // Create the credentials:
        System.Net.NetworkCredential credentials =
            new System.Net.NetworkCredential(credentialUserName, pwd);

        client.EnableSsl = true;
        client.Credentials = credentials;

        // Create the message:
        var mail =
            new System.Net.Mail.MailMessage(sentFrom, message.Destination);

        mail.Subject = message.Subject;
        mail.Body = message.Body;

        // Send:
        return client.SendMailAsync(mail);


        // Plug in your email service here to send an email.
        //return Task.FromResult(0);
    }

Web.Config

 <system.net>
    <mailSettings>
      <smtp>
        <network defaultCredentials="true" enableSsl="true" host="smtp.office365.com" port="587" password="password" userName="username" />
      </smtp>
    </mailSettings>
  </system.net>

感谢您为解决我的问题所做的努力。

EmailService.SendTaskAsync 内有一条注释告诉您在哪里插入您的电子邮件代码。这就是您放置 SMTP 代码、调用 Office 365 API 或 SendGrid 之类的 Web 服务的地方。这是使用 SMTP 的示例。

public class EmailService : IIdentityMessageService
{
    public Task SendAsync(IdentityMessage message)
    {
        //create a client, it should pick up the settings from web.config
        var client = new SmtpClient();

        //now construct a MailMessage object from the message
        var email = new MailMessage("donotreply@mysite.com", message.Destination, message.Subject, message.Body);

        //send the email asynchronously
        await client.SendMailAsync(email);

        return Task.FromResult(0);
    }
}

显然,您可能希望将实际的电子邮件代码移至另一个 class,以便您可以将其重新用于其他与电子邮件相关的任务。