![](/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.