I am using SmtpClient in ASP.NET C# for sending emails asynchronously. I need the original MailMessage in SendCompleted callback in order to log the subject to a database. But e.UserState is null.
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
}
}
What am I doing wrong?