2017-04-11 4 views
1

登録時に電子メールアドレスを確認するためにデフォルトのmvcコードを使用しますが、電子メールが送信されるとHTMLを表示しません。 enter image description here テンプレートMVCコード:デフォルトのasp.net mvcテンプレートを使用すると、HTMLが正しく電子メールに挿入されない

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>"); 

メール非同期を送信:

public Task SendAsync(IdentityMessage message) 
    { 

     // Plug in your email service here to send an email. 
     SmtpClient client = new SmtpClient(); 
     return client.SendMailAsync("email here", 
            message.Destination, 
            message.Subject, 
            message.Body); 
     return Task.FromResult(0); 
    } 

SO上の他の質問のいくつかを見たとき私は身体を設定することができるように、私は少し私の送信コードを変更HTMLを許可しますが、私はまだ同じ問題があります

public Task SendAsync(IdentityMessage message) 
    { 
     MailMessage msg = new MailMessage(); 
     msg.IsBodyHtml = true; 
     msg.Body = message.Body; 
     // Plug in your email service here to send an email. 
     SmtpClient client = new SmtpClient(); 
     return client.SendMailAsync("email here", 
            message.Destination, 
            message.Subject, 
            msg.Body); 
     return Task.FromResult(0); 
    } 

なぜこのようなことが起こっているのですか?

TIA

+0

あなたはアンカーリンクについてわからない場合、あなたはこのように体内にトークンURLを渡すことができます: 'UserManager.SendEmailAsync(ユーザーを待っています。 Id、 "あなたのアカウントを確認する"、 "ここをクリックしてあなたのアカウントを確認してください:" + callbackUrl)。最後のコードサンプルでは、​​古いパターンを使用するのではなく、 'return client.SendMailAsync(msg)'を使ってみてください。 –

答えて

2

問題は、現在使用しているメールサービス/ APIのコンテンツによって異なります。まだ代わりにHTMLのプレーンテキストとして確認メールを送信する場合SendEmailAsync方法では、身体のメッセージと一緒に確認URLを埋め込み、ユーザーのメールクライアントが自動的にこのようなリンクに変換させることができます:送信するために

await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking here: " + callbackUrl); 

別の方法下図のようにHTMLとして電子メールの本文はSendAsyncメソッド内trueIsBodyHtmlプロパティを設定されています

public class EmailService : IIdentityMessageService 
{ 
    // other stuff 

    public async Task SendAsync(IdentityMessage message) 
    { 
     var msg = new MailMessage(); 
     msg.Subject = message.Subject; 
     msg.Body = message.Body; 
     msg.IsBodyHtml = true; 

     msg.To.Add(message.Destination); 

     // Plug in your email service here to send an email. 
     using (var client = new SmtpClient()) 
     { 
      await client.SendMailAsync(msg); 
     } 

     // other stuff 
    } 

    // other stuff 
} 

NB:SendAsync方法を含むIdentityConfig.csファイルはApp_Start DIRECTOで使用可能であることを確認します(this full exampleを参照してください)。

関連問題:

ASP.NET Identity Confirmation Email Is Plain Text Instead of HTML

Email Confirmation with MVC 5 and Asp.net Identity

+0

アンカータグを削除しても問題はありませんが、まだ醜いリンクが残っています。また、2番目の例でわかるように、私はIsBodyHtmlを使用しようとしましたが、私はまだ同じ問題がありました。 – scottdavidwalker

+1

2番目のコードサンプルに 'SendMailAsync'メソッドの引数として渡される完全な' MailMessage'インスタンスが含まれていないと思われます。代わりに 'Body'プロパティを渡すだけです。上で与えられた完全な 'IdentityConfig.cs'に示されるように、' IsBodyHtml = true'を含む 'MailMessage'インスタンスは' SendMailAsync'に渡され、HTMLモードを本文として有効にします。 –

関連する問題