![](/img/trans.png)
[英]SmtpClient.SendAsync() not sending email if wrapped in using()
[英]SmtpClient.SendAsync not sending email versus SmtpClient.Send
我正在開發一個項目(不幸的是)需要允許最大框架為.NET 4。
在這個項目中,我試圖使用SendAsync()
異步發送電子郵件但由於某種原因,它無法發送(或者更確切地說,它不發送)。 簡單地說,沒有任何反應。 沒有錯誤或任何事情,有些奇怪的是,當我在事件處理程序代碼中設置斷點並逐步執行程序時,它不會在任何時候進入事件處理程序。
如果我使用同步方法Send();
它完美無瑕。
我的代碼唯一的區別是使用SendAsync();
的事件處理程序SendAsync();
方法。 ( SendCompleteEventHandler
)
下面是我到目前為止發送電子郵件的代碼。
private static void SendMailAsync()
{
const string FROM = "testmail@testmail.com";
const string TO = "recipient@testmail.com";
string SUBJECT = "THIS IS A TEST";
string BODY = "THIS IS A TEST";
const string SMTP_USERNAME = "UserName"; //SMTP username.
const string SMTP_PASSWORD = "Password"; // SMTP password.
const string HOST = "host.testsmtp.com";
const int PORT = 2587;
// Create an SMTP client
SmtpClient client = new SmtpClient(HOST, PORT);
client.SendCompleted += new SendCompletedEventHandler(Client_SendComplete);
// Create a network credential
client.Credentials = new System.Net.NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD);
client.EnableSsl = true;
string userToken = "testmsg1";
// Send the email.
client.SendAsync(FROM, TO, SUBJECT, BODY, userToken);
client.Dispose();
}
private static void Client_SendComplete(object sender, AsyncCompletedEventArgs e)
{
string token = (string) e.UserState;
if (e.Error != null)
{
MessageBox.Show(e.Error.ToString());
}
else
{
MessageBox.Show("Message sent.");
}
}
private void button2_Click(object sender, EventArgs e)
{
SendMailAsync();
}
有什么東西我只是缺了嗎? 謝謝。
如果它在后台asynchronously
運行,則該操作稱為asynchronous
。 因此,您應該將SendAsync
方法視為操作的開始 。 在此之后,你正在處理實際運行操作的客戶端,而不是等待它完成,所以你就像說:嘿,請為我開始,請...哦,沒關系。
因此,您可能應該在發送后立即從代碼中刪除Dispose
方法。 你可以在Client_SendComplete
處理你的客戶端( sender
對象可能是客戶端),或者你可以在你的類中創建一個靜態字段,並在你的程序關閉后處理它(據我所見,它是一個WinForms項目,所以你可以處理一些Windows事件)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.