0

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のような別のメーラーを使用する必要がありますか?

電子メールを非同期で送信するべきではないと提案しないでください。サイトの応答を速くしたいのですが、サインアップ プロセス中に電子メール サーバーに接続して電子メールを送信すると、応答が少し遅くなります。

4

2 に答える 2

2

Postal MVC は、MVC4 の新しい Async メカニズムと互換性がないようです。Postal MVC の開発者が互換性を持たせるまでは、MVC3 にダウングレードするか、アプリケーションで古い MVC3 機能を強制するかの 2 つのオプションがあります。

MVC4 の古い機能に戻すには、web.config で次の設定を適用できます。

<add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" /> 

ただし、これを行うだけには注意してください。これを行うと、サイト内に影響が及ぶ可能性があります. その影響を研究することをお勧めします。

于 2012-12-21T17:02:08.983 に答える
0

最新バージョンの Postalを使用していることを確認してください。何が問題なのかを理解するのに役立つAsync を送信する単体テストが含まれています。これは、Postal の問題ではないことを示しています。

このテストでは、SpecifiedPickupDirectory

于 2012-12-21T12:08:27.687 に答える