tas*_*dew 5 c# asynchronous .net-4.0 smtpclient
我正在从事一个项目(不幸的是)需要允许的最大框架为 .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();
}
Run Code Online (Sandbox Code Playgroud)
有什么我完全失踪的东西吗?谢谢。
asynchronous如果该操作正在asynchronously后台运行,则会调用该操作。因此,您应该将该SendAsync方法视为start for the operation. After this, you're disposing the client which actually run the operation, without waiting for it to complete, so you're, like, saying: hey, start this for me, please... Oh, nevermind.
因此,您可能应该Dispose在发送后立即从代码中删除该方法。您可以在Client_SendComplete(sender对象可能是客户端)中处置您的客户端,或者您可以在您的类中创建一个静态字段,并在程序关闭后处置它(据我所知,这是一个 WinForms 项目,因此您可以处理一些 Windows 事件)
| 归档时间: |
|
| 查看次数: |
3755 次 |
| 最近记录: |