MVC コントローラーでPostal MVCを使用してメールを送信しようとしています。電子メールを非同期で送信したいのですが、ビューを返す前に電子メールが送信されるのを待ちたくありません。
これが私が使用しようとしているコードです。
try
{
dynamic email = new Email("TestEmail"); //I have an Email View by this name
email.To = "myemailaddress@domain.com";
email.From = "recipientsaddress@domain.com";
email.SendAsync(); //email.Send() works fine
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
しかし、「メールの送信に失敗しました」というエラーが表示されます。
内部例外 System.InvalidOperationException: 現時点では非同期操作を開始できません。非同期操作は、非同期ハンドラーまたはモジュール内で、またはページ ライフサイクルの特定のイベント中にのみ開始できます。ページの実行中にこの例外が発生した場合は、ページが<%@ Page Async="true" %> とマークされています。System.Web.AspNetSynchronizationContext.OperationStarted() で System.ComponentModel.AsyncOperation.CreateOperation (オブジェクト userSuppliedState,SynchronizationContext syncContext) で System.Net.Mail.SmtpClient.SendAsync (MailMessage メッセージ、オブジェクト userToken) で
SendAsync() を Send() に置き換えると、正常に動作します。
完全を期すために、これは私のmailSettingsが私のWeb.Configでどのように見えるかです
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="smtp.myisp.com" port="25" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
メールの非同期送信に問題があるようです。他の誰かがこの問題を思いつき、解決策を持っていますか?
または、 MvcMailerのような別のメーラーを使用する必要がありますか?
電子メールを非同期で送信するべきではないと提案しないでください。サイトの応答を速くしたいのですが、サインアップ プロセス中に電子メール サーバーに接続して電子メールを送信すると、応答が少し遅くなります。