C# 如何解决;操作已超时;?

C# 如何解决;操作已超时;?,c#,smtpclient,C#,Smtpclient,我正在尝试使用C代码发送电子邮件,电子邮件是在我发送给一个人时发送的,但在我发送给多个人时没有发送。并且得到一个错误“操作超时了。”我不明白背后的原因。请帮忙找出原因 代码: 公共字符串发送电子邮件(列出电子邮件地址、字符串正文、字符串电子邮件主题) { var smtp=new SmtpClient{DeliveryMethod=SmtpDeliveryMethod.Network}; smtp.Host=“xyz主机名”; smtp.Port=25; smtp.EnableSsl=fal

我正在尝试使用C代码发送电子邮件,电子邮件是在我发送给一个人时发送的,但在我发送给多个人时没有发送。并且得到一个错误“操作超时了。”我不明白背后的原因。请帮忙找出原因

代码:

公共字符串发送电子邮件(列出电子邮件地址、字符串正文、字符串电子邮件主题)
{  
var smtp=new SmtpClient{DeliveryMethod=SmtpDeliveryMethod.Network};
smtp.Host=“xyz主机名”;
smtp.Port=25;
smtp.EnableSsl=false;
var fromAddress=新邮件地址(ConfigurationManager.AppSettings[“MailUserName”],“奖励和认可团队”);
使用(var message=new MailMessage(){Subject=emailSubject,Body=Body})
{
message.From=fromAddress;
foreach(ToEmailAddresses中的字符串电子邮件)
{
message.To.Add(电子邮件);
}
message.IsBodyHtml=true;
尝试
{
_logger.Log(“EmailService sendmail try”);
smtp.Send(message);
返回“成功”;
}
捕获(例外情况除外)
{
_logger.Log(“EmailService sendmail-”+ex.Message);
返回“错误”;
}
}
}

每当您尝试执行任何可能需要一些时间的操作时,最好在单独的线程中运行它或使用异步方法。

我的建议是使用
SmtpClient.SendAsync
方法。为此,请更改:

public string SendEmail(List<string> ToEmailAddresses, string body, string emailSubject)
公共字符串发送电子邮件(列出电子邮件地址、字符串正文、字符串电子邮件主题)
致:

public async string sendmail(列出邮件地址、字符串正文、字符串emailSubject)

并包括
等待smtp.SendAsync(…)
而不是
smtp.Send(…)
。这将允许在发送邮件时进一步执行UI线程,并且不会使应用程序因“未响应”消息而变灰。

要了解有关smtp.SendAsync(…)的更多信息,包括参数和备注,查看有关方法的信息。

共享您的完整代码发布您的完整代码,只有我们才能找到错误。请注意,向多个收件人发送电子邮件并不容易。许多电子邮件可能会被拒绝为垃圾邮件。请尝试更高的超时时间(以毫秒为单位)
smtp.timeout=30000。你确定它是没有SSL的端口25吗?这是不寻常的。
public string SendEmail(List<string> ToEmailAddresses, string body, string emailSubject)
public async string SendEmail(List<string> ToEmailAddresses, string body, string emailSubject)