我正在尝试使用C#代码发送电子邮件,当我将其发送给单个人时发送了电子邮件,但是当我将其发送给多个人时却没有收到。并收到错误“操作已超时”。我没有理由背后的原因。请帮忙找出原因。
代码:
public string SendEmail(List<string> ToEmailAddresses,string body, string emailSubject)
{
var smtp = new SmtpClient { DeliveryMethod = SmtpDeliveryMethod.Network };
smtp.Host = "xyz-host-name";
smtp.Port = 25;
smtp.EnableSsl = false;
var fromAddress = new MailAddress(ConfigurationManager.AppSettings["MailUserName"], "Rewards and Recognition Team");
using (var message = new MailMessage() { Subject = emailSubject, Body = body })
{
message.From = fromAddress;
foreach (string email in ToEmailAddresses)
{
message.To.Add(email);
}
message.IsBodyHtml = true;
try
{
_logger.Log("EmailService-SendEmail-try");
smtp.Send(message);
return "Success";
}
catch (Exception ex)
{
_logger.Log("EmailService-SendEmail-" + ex.Message);
return "Error";
}
}
}
答案 0 :(得分:1)
每当您尝试执行可能需要一些时间的任何事情时,最好在单独的线程中运行它或使用异步方法。
我的建议是使用{ {1}}方法。为此,请更改:
SmtpClient.SendAsync
为:
public string SendEmail(List<string> ToEmailAddresses, string body, string emailSubject)
并包含public async string SendEmail(List<string> ToEmailAddresses, string body, string emailSubject)
而不是await smtp.SendAsync(...)
。这将允许在发送邮件时进一步执行UI线程,而不是使用“无响应”消息使应用程序变灰。
阅读更多关于{{1包含参数和备注,请查看有关方法的MSDN documentation。