【发布时间】:2019-02-12 10:37:03
【问题描述】:
我正在使用 mailkit 在 asp.net core 2.0 中实现电子邮件服务器。关于我的场景,我必须发送电子邮件并且需要返回带有电子邮件发送状态的反馈。我已经实现了电子邮件发送部分并且工作正常。
我知道 try catch 是一种选择。但我的情况还不够。因为只有在网络错误或认证失败时才会发生异常。但是,如果某些接收方电子邮件无效,则不会发生异常。
我必须返回列表中每封电子邮件的电子邮件发送状态。但是如果有无效的电子邮件或其他错误,我无法捕捉到它。
我看到了一个名为 MessageSent 的事件。但我不知道要实现那个事件,也不知道它是否符合我的条件。
这是我的完整代码。
public void SendEmail(List<EmailMessage> emailMessages)
{
List<MimeMessage> emailQueue = new List<MimeMessage>();
foreach (EmailMessage emailMessage in emailMessages)
{
var message = new MimeMessage();
message.MessageId = emailMessage.MessageId;
message.To.AddRange(emailMessage.ToAddresses.Select(x => new MailboxAddress(x.Name, x.Address)));
message.From.AddRange(emailMessage.FromAddresses.Select(x => new MailboxAddress(x.Name, x.Address)));
message.Subject = emailMessage.Subject;
message.Body = new TextPart(TextFormat.Html)
{
Text = emailMessage.Content
};
emailQueue.Add(message);
}
using (var emailClient = new SmtpClient())
{
emailClient.Connect(_emailConfiguration.SmtpServer, _emailConfiguration.SmtpPort, _emailConfiguration.EnableSSL);
emailClient.AuthenticationMechanisms.Remove("XOAUTH2");
emailClient.Authenticate(_emailConfiguration.SmtpUsername, _emailConfiguration.SmtpPassword);
foreach (MimeMessage email in emailQueue)
{
try
{
emailClient.Send(email);
}
catch (Exception ex)
{
}
}
emailClient.Disconnect(true);
}
}
【问题讨论】:
-
我认为 foreach 循环内的 try-catch 块只会增加不必要的开销。 “找不到地址”错误很可能是因为您发送到了错误的地址,而不是没有发送
-
@JohanHerstad 有什么方法可以获取电子邮件接收状态..?因为我必须返回每封电子邮件的状态。
标签: asp.net-core smtpclient mailkit