簡體   English   中英

SmtpClient.SendAsync不發送電子郵件而不是SmtpClient.Send

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM