无法从SendMailAsync回调中获取原始MailMessage

时间:2018-03-07 04:55:20

标签: c# asp.net smtpclient asynccallback mailmessage

我在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
    }
}

我做错了什么?

0 个答案:

没有答案