2015-12-11 71 views
1

我有一個新的MVC項目,並按照這篇文章發送郵件註冊sendgrid。 http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset沒有sendgrid的電子郵件,也沒有錯誤消息

在項目的根目錄中創建了一個新文件夾「manager」。在該文件夾中創建了一個新文件EmailService.cs並帶有以下代碼。

public class EmailService : IIdentityMessageService 
{ 
    public async Task SendAsync(IdentityMessage message) 
    { 
     await configSendGridasync(message); 
    } 

    // Use NuGet to install SendGrid (Basic C# client lib) 
    private async Task configSendGridasync(IdentityMessage message) 
    { 
     var myMessage = new SendGridMessage(); 
     myMessage.AddTo(message.Destination); 
     myMessage.From = new System.Net.Mail.MailAddress(
          "[email protected]", "Joe S."); 
     myMessage.Subject = message.Subject; 
     myMessage.Text = message.Body; 
     myMessage.Html = message.Body; 

     var credentials = new NetworkCredential(
       ConfigurationManager.AppSettings["mailAccount"], 
       ConfigurationManager.AppSettings["mailPassword"] 
       ); 

     // Create a Web transport for sending email. 
     var transportWeb = new Web(credentials); 

     // Send the email. 
     if (transportWeb != null) 
     { 
     await transportWeb.DeliverAsync(myMessage); 
     } 
     else 
     { 
     Trace.TraceError("Failed to create Web transport."); 
     await Task.FromResult(0); 
     } 
    } 
} 

將此添加到web.config用正確的價值觀

<add key="mailAccount" value="xyz" /> 
    <add key="mailPassword" value="password" /> 

而且修改了登記控制器與此

 string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
     var callbackUrl = Url.Action("ConfirmEmail", "Account", 
      new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); 
     await UserManager.SendEmailAsync(user.Id, 
      "Confirm your account", "Please confirm your account by clicking <a href=\"" 
      + callbackUrl + "\">here</a>"); 

我已經做別的什麼。我可以註冊。獲取沒有錯誤,沒有電子郵件。爲什麼我需要在項目啓動時將EmailService添加到項目中?

+1

就這樣,你知道你並不孤單,我與SendGrid有同樣的問題:沒有收到郵件,SendGrid發送計數沒有在儀表板中遞增,也沒有拋出異常。如果/當我找到一個,我會發佈一個答案:) –

回答

0

我以前沒用過Sendgrid但它看起來像你錯過了他們上線14列here一個API KEY:

var credentials = new NetworkCredential(api_user, api_key);

1

增加了我的代碼identityconfig,而現在它的工作原理。

0

對於其他人在那裏誰可能會拉自己的頭髮,試圖讓他們的第一個SendGrid電子郵件傳送,這裏有一個簡單介紹我的經驗:

我能夠通過.NET SmtpClient發送電子郵件沒有收到任何錯誤消息。但是,這些電子郵件似乎在SendGrid內部永久丟失,因爲它們既未交付,也未出現在SendGrid儀表板的「今日發送的電子郵件」計數器中。我看不到有任何跡象表明我的帳戶正在配置中。但是,當我第二天再次嘗試時,我收到了我的電子郵件。

相關問題