如何解决“操作已经超时”。

时间:2017-03-21 09:42:06

标签: c# smtpclient

我正在尝试使用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";
            }
        }
    }

1 个答案:

答案 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