11

ASP.NET MVC 3 Razor Web アプリケーションからメールを送信します。

現在、ActionMailer.NET を使用しています。

私はMvcMailerを見てきました。

両方の問題は、実行するために Http コンテキストが必要なことです。

これに関する問題は、メールを非同期で送信したいということです。これで、実際の送信 (SMTP 呼び出しなど) を非同期で実行できることがわかりましたが、電子メールを送信するプロセス全体を非同期にしたいです。

public ActionResult DoSomething(Something something)
{
   _db.Save(something);

   Task.Factory.StartNew(() => {
      new MailController().DoSomething().Send(something);
   });

   return RedirectToAction("Index");
}

「DoSomething」メソッドでは、データベースに再度クエリを実行したり、他のことを実行したりします....これをすべて非同期にしたいので、単に実行するのではなく、呼び出し全体がタスクにラップされます.SendAsync()。それが理にかなっていることを願っています。

上記の例は ActionMailer であり、生成されたスレッドで HTTP コンテキストがなくなるため、壊れます。

これを機能させる方法、またはHTTPコンテキストの存在に依存しない別のパッケージを知っている人はいますか?

HTTP コンテキストが必要な理由はわかりません。ここではリクエスト ルーティングはなく、ファイル システム上のビューを HTML に解析するだけです。

4

3 に答える 3

1

ActionMailer.NET は、MVC の外部でスタンドアロンで使用できるようになりました。

詳細はこちら

http://geeksharp.com/2011/07/06/actionmailer-0-6-released/

于 2012-07-21T04:26:30.997 に答える
0

.NET 4.5 (または Async CTP が何であれ) を使用している場合は、async ActionMethodsを調べることができます。率直に言って、要件が何であるかは正確にはわかりません (MVC 3/4) が、その記事は役立つはずです。

また、データベースの検索にかかる時間を気にしている理由もわかりません。実際にそんなに多くのことをしているのですか?

SendAsync よりも優れた解決策: SendAsync を使用するのではなく、私が使用している IIS のものなど、通常の Send メソッドを使用して SMTP サーバー経由で送信することを好みます (注: IIS6 コンソールを使用する必要がありますIIS7 を使用してメインの IIS を管理しています)。これは、ローカル マシンが電子メールをキューに入れるとすぐに返され、送信されるのを待つ必要はありません。おそらくもっと重要なのは、送信中にエラーが発生した場合、再試行が繰り返されることです。信じられないかもしれませんが、smtp.gmail.com が応答しないことがあります。

于 2013-02-07T22:32:19.893 に答える