私は非同期で電子メールメッセージを送信しようとしていますが、スレッドプールまたは単純なスレッド内からSendMailMesage()メソッドを呼び出すとメールは送信されません。スレッドプールから呼び出されたときにGmailメールが送信されない
これを達成する方法はありますか? sendindを定期的に電子メールで送信すると、アプリケーションが大幅に遅くなります。
PS:重要な場合は、参照プロジェクトからSendMailMesage()を送信していますが、MVCプロジェクト自体からは送信していません。
ありがとうございました。
編集:マイコード。
namespace App.Core.Utils.Mailer
{
public static class Sender
{
/// <summary>
/// Sends a MailMessage object using the SMTP settings.
/// </summary>
public static void SendMailMessage(MailMessage message)
{
if (!Settings.Instance.SendEmails)
{
return;
}
if (message == null)
throw new ArgumentNullException("message");
try
{
message.IsBodyHtml = true;
message.BodyEncoding = Encoding.UTF8;
var smtp = new SmtpClient(Settings.Instance.SmtpServer);
// don't send credentials if a server doesn't require it,
// linux smtp servers don't like that
if (!string.IsNullOrEmpty(Settings.Instance.SmtpUserName))
{
smtp.Credentials = new System.Net.NetworkCredential(Settings.Instance.SmtpUserName, Settings.Instance.SmtpPassword);
}
smtp.Port = Settings.Instance.SmtpServerPort;
smtp.EnableSsl = Settings.Instance.EnableSsl;
smtp.Send(message);
}
catch (SmtpException)
{
//OnEmailFailed(message);
}
finally
{
// Remove the pointer to the message object so the GC can close the thread.
message.Dispose();
}
}
public static void SendMailMessageAsync(MailMessage message)
{
ThreadPool.QueueUserWorkItem(state => SendMailMessage(message));
}
}
}
注記:これはWebフォームで機能します。コードをMVCプロジェクトにコピーしましたが、SendMailMessageAsync
メソッドを呼び出すと何も送信されません。エラーもありません。
スレッドプールで呼び出されていないときに機能しますか? – casperOne