1

System.Net.Mail を使用しています。この分野に関するトピックがいくつかありますが、それらは ASP.NET であり、多くの場合 VB 関連です。私はコードをデスクトップ スケルトン コードに分離しています。私は .NET 3.5 と C# を使用しています。したがって、Send は、私が試したすべてのシナリオ ( EnableSslfalse/true、UseDefaultCredentialsfalse/true) で機能します。ただし、 true に設定されていないSendAsync場合にのみ機能UseDefaultCredentialsします (明示的に false に設定しても問題になることがわかります。デフォルトでEnableSslは false です)、true (サーバー設定でもかまいません) であり、資格情報をハードコーディングします。 . SendAsync使えるようになりたいですUseDefaultCredentials。コード:

void sendmail() {
  MailMessage email = new MailMessage();
  email.From = new MailAddress("tcs@software.com");
  email.To.Add("tcs@software.com");
  email.Subject = "Simple test email subject";
  email.Body = "Simple test email body";
  string mHost = "mail.software.com";
  string mUsername = @"DOMAIN\tcs";
  string mPassword = "myfreakinpassword?Really???";
  SmtpClient smtpCli = new SmtpClient(mHost);
  //smtpCli.UseDefaultCredentials = true;
  smtpCli.Credentials = new NetworkCredential(mUsername, mPassword);
  smtpCli.EnableSsl = true;
  smtpCli.SendCompleted += smtpCli_SendCompleted;
  try {
    //smtpCli.Send(email);
    smtpCli.SendAsync(email, null); // This mofo only works in this combination
  }
  catch (Exception ex) {
    Console.WriteLine(ex);
  }
}
void smtpCli_SendCompleted(object sender, AsyncCompletedEventArgs e) {
  if (e.Error != null)
    Console.WriteLine(e.Error);
}
4

1 に答える 1

1

PrismのEventAggregator(指定ThreadOption.BackgroundThread)のようなメッセージングパターンを使用します。このようにして、発信者はメッセージを送信し(メッセージにはFrom、To、Subject、Bodyが含まれます)、送信者の観点からは非同期です。System.Net.Mail次に、メッセージのコンシューマー/ハンドラーでの同期送信機能を使用します。これはおそらく、実行中のバックグラウンドスレッドが、を生成するよりも適切な特権を持っているために機能しSendAsyncます。

于 2013-03-06T16:31:20.033 に答える