如何在C#中显示来自内联异步事件处理程序的MailKit响应



我正在C#中实现MailKit来发送电子邮件。

我需要能够看到服务器的响应。

MessageSent事件处理程序作为内联异步方法连接。

我确信这就是为什么SmtpClient的响应总是空的。但是,我不知道如何正确提取响应消息。

var messageToSend = new MimeMessage
{
Subject = subject,
Body = new TextPart(MimeKit.Text.TextFormat.Text) {Text = message_body } 
};
foreach (var recipient in recipients)
messageToSend.To.Add(new MailboxAddress(recipient.Name, recipient.Address));
var message = "";
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
smtp.MessageSent += async (sender, args) =>
{  // args.Response };
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
await smtp.ConnectAsync(Properties.Settings.Default.Email_Host, 587, SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync(Properties.Settings.Default.Test_Email_UserName, 
Properties.Settings.Default.Test_Email_Password);
await smtp.SendAsync(messageToSend);
await smtp.DisconnectAsync(true);

MessageBox.Show(args.Response);// <== doesn't display
message =args.Response;// <== this is my second attempt at getting at the response
};

}
MessageBox.Show(message);// <== always display empty string

您需要做的是:

var message = "";
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
smtp.MessageSent += async (sender, args) =>
{
message = args.Response
};
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
await smtp.ConnectAsync(Properties.Settings.Default.Email_Host, 587, SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync(Properties.Settings.Default.Test_Email_UserName, 
Properties.Settings.Default.Test_Email_Password);
await smtp.SendAsync(messageToSend);
await smtp.DisconnectAsync(true);
}
MessageBox.Show(message);

问题是,您的Connect/Authenticate/Send逻辑都在事件回调内部,因此没有留下任何导致事件发出的内容。

最新更新