メールを送信するシンプルな機能がありますが、スレッドを使用してメール配信を高速化するにはどうすればよいですか?
サンプルコードが理想的です。
SendAsyncisnteadを使用します。
sendAsync メソッドのデモについては、次のリンクを参照してください。[MSDN]
http://msdn.microsoft.com/en-ca/library/x5x13z6h(VS.80).aspx
関数を別のスレッドで実行できます。SendMail をメール送信機能として使用すると、次のことができます。
ThreadPool.QueueUserWorkItem(delegate { SendMail(message); });
IN 4.0では、次を使用できます。
new Thread(x => SendMail(message)).Start();
と
public static void SendEmail(MailMessage message)
{
using (SmtpClient client = new SmtpClient("smtp.XXXXXX.com"))
{
client.Send(message);
}
}
次のようなものを使用して、別のスレッドでやりたいことをクラスに開始させる静的な void メソッドを使用してクラスを作成します。
using System;
using System.Threading;
class Test
{
static void Main()
{
Thread newThread = new Thread(new ThreadStart(Work.DoWork));
newThread.Start();
}
}
class Work
{
Work() {}
public static void DoWork() {}
}
スレッドを自分で管理したくない場合は、別の方法として ThreadPool クラスを使用することもできます。
スレッドの詳細 - http://msdn.microsoft.com/en-us/library/xx3ezzs2.aspx
ThreadPool の詳細 - http://msdn.microsoft.com/en-us/library/3dasc8as(VS.80).aspx
ただし、別のスレッドを使用しても、電子メールの配信は高速化されません。呼び出し元のメソッドに制御をより速く戻すだけです。あなたがそれをする必要がない限り、私はそれを気にしません。
複数のスレッドを使用して電子メールを送信する場合は、ISP によってスパムとして識別されないように注意してください。各バッチ間に多少の遅延がある小さなバッチを選択することをお勧めします。
アプリケーションのバックエンドを作成し、30 分ごとにメールを送信する方が、より便利で簡単なことはご存知でしょう。データベースとの間で送受信する必要がある情報をデータベースに投入し、30 分ごとに起動するアプリケーション プールを作成します。起動したら、メールを送信できます。イベント ハンドラがメールを送信するのを待つ必要はありません...
それは私たちのために働きます。それがあなたに役立つと思っただけです。