gpt4 book ai didi

c# - SmtpClient.SendAsync 不发送电子邮件与 SmtpClient.Send

转载 作者:行者123 更新时间:2023-11-30 16:45:47 25 4
gpt4 key购买 nike

我正在从事一个项目(不幸的是)需要允许的最大框架是 .NET 4。

在这个项目中,我尝试使用 SendAsync() 异步发送电子邮件,但由于某种原因,它发送失败(或者更确切地说,它只是不发送)。简单地说,什么也没有发生。没有错误或任何错误,奇怪的是,当我在事件处理程序代码处设置断点并单步执行程序时,它在任何时候都不会进入事件处理程序。

如果我使用同步方法 Send(); 它会完美运行。

我的代码中唯一的区别是为 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();
}

有什么我完全想念的吗?谢谢。

最佳答案

如果正在后台异步运行,则该操作称为异步。因此,您应该将 SendAsync 方法视为操作的开始。在此之后,您将处理实际运行该操作的客户端,而不是等待它完成,所以您就像在说:嘿,请为我启动这个,请...哦,没关系。

因此,您可能应该在发送后立即从代码中删除 Dispose 方法。你可以在Client_SendComplete中释放你的客户端(sender对象可能是一个客户端),或者你可以在你的类中创建一个静态字段,并在你的程序关闭后释放它(据我所知,这是一个 WinForms 项目,因此您可以处理一些 Windows 事件)

关于c# - SmtpClient.SendAsync 不发送电子邮件与 SmtpClient.Send,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41495339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com