Я работаю над проектом, который (к сожалению) требует максимального рамочных разрешенного быть .NET 4.SmtpClient.SendAsync не отправки электронной почты по сравнению с SmtpClient.Send
В этом проекте я пытающийся отправить по электронной почте в асинхронном режиме с использованием SendAsync()
, но по какой-то причине он не может отправить (точнее, он просто не отправляет). Проще говоря, ничего не происходит. Нет ошибки или что-то еще, странно, что когда я устанавливаю точку останова в коде обработчика событий и прохожу через программу, он не попадает в обработчик событий в любой момент.
Если я использую синхронный метод Send();
, он работает безупречно.
Единственным отличием в моем коде является использование обработчика события для метода SendAsync();
. (SendCompleteEventHandler
)
Ниже приведен код, который я пробовал до сих пор, чтобы отправить электронное письмо.
private static void SendMailAsync()
{
const string FROM = "[email protected]";
const string TO = "[email protected]";
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' не является ожидаемым, поэтому не делайте этого, даже если он похож на шаблон async/await. – Crowcoder
@Crowcoder - спасибо за разъяснение. Очень странно, что это не так. Я предполагаю, что этот код является модификацией [образец здесь, в MSDN] (https://msdn.microsoft.com/en-us/library/x5x13z6h%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396) –
@KraangPrime, просто догадка, но я думаю, что это было до .net 4.5, и это просто совпадение, что оно было названо 'async'. – Crowcoder