11

SmtpClient の SendAsync を使用して電子メールを送信する場合、smtpclientインスタンスを正しく破棄するにはどうすればよいですか?

まあ言ってみれば:


MailMessage mail = new System.Net.Mail.MailMessage()
{
   Body = MailBody.ToString(),
   IsBodyHtml = true,
   From = new MailAddress(FromEmail, FromEmailTitle),
   Subject = MailSubject
};
mail.To.Add(new MailAddress(i.Email, ""));
SmtpClient sc = new SmtpClient(SmtpServerAddress);
//Add SendAsyncCallback to SendCompleted
sc.SendCompleted += new SendCompletedEventHandler(SendAsyncCallback);
//using SmtpClient to make async send (Should I pass sc or mail into SendAsyncCallback?)
sc.SendAsync(mail, sc);

SendAsyncCallbackメソッドでsc.Dispose()、またはを呼び出す必要がありますかmail.Dispose()?

MSDN ドキュメントを確認しました。1 つの例は MailMessage.Dispose() を呼び出しますが、この破棄メソッドはSmtpClientインスタンスも破棄しますか?

4

2 に答える 2

6

MailMessageと の両方を で破棄する必要がSmtpClientありSendAsyncCallbackます。

MailMessage を破棄しても、SmtpClient は自動的に破棄されません (同じ SmtpClient で 2 つのメッセージを送信したい場合があり、最初のメッセージを破棄した直後にクライアントを破棄したくないため)。

于 2011-05-19T14:39:46.500 に答える
1

この例:MSDNライブラリのドキュメントからメッセージを閉じるだけなので、実装ではそれを使用します: SmtpClient.SendAsyncメソッド

message.Dispose();

この質問で言及されているこの問題が発生し、送信が常にキャンセルされていたため、using{}ステートメントを削除しています 。SmtpClient.SendAsync呼び出しは自動的にキャンセルされます

さて、私はmessage.Dispose()を発行しようとしましたが、それでも、メッセージが破棄されたために電子メールを送信できなかったというエラーがスローされていました。おそらく、私のものはasp.net mvcアプリであり、例はコンソールアプリであるためです。いずれにせよ、すべてが範囲外になったら、ガベージコレクターはこれらのオプションを選択する必要があります...

于 2013-01-28T17:55:44.813 に答える