我在ASP.NET C#中使用SmtpClient来异步发送电子邮件。我需要在SendCompleted回调中使用原始MailMessage,以便将主题记录到数据库中。但是e.UserState为空。
public class SendMessage
{
public async Task Send()
{
// rest of the code
SmtpClient client = new SmtpClient(host, port);
client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
await client.SendMailAsync(message);
}
private async void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
SmtpClient callbackClient = sender as SmtpClient;
MailMessage callbackMailMessage = e.UserState as MailMessage; // always null
// mailMessage subject is needed for logging purposes
LogClass NewLog = new LogClass();
await NewLog.AddAsync(LogTypes.SendMail, LogSubTypes.Other, $" email sent with subject: {callbackMailMessage.Subject }");
callbackClient.Dispose();
callbackMailMessage.Dispose(); //will throw a NullReferenceException
}
}
我做错了什么?