【问题标题】:System.Net.Mail timing out on sendSystem.Net.Mail 发送超时
【发布时间】:2013-07-21 12:21:39
【问题描述】:

我有一些旧代码可以正常发送电子邮件,但 Visual Studio 告诉我该代码已过时,我应该将其从 Web.Mail 更改为 Net.Mail。我已经重写了大部分内容,但我有几个问题。

这是原始的工作代码:

public void Send(string from, string to, string subject, string body, bool isHtml, string[] attachments)
{

    var mailMessage = new MailMessage

    {
        From = from,
        To = to,
        Subject = subject,
        Body = body,
        BodyFormat = isHtml ? MailFormat.Html : MailFormat.Text
    };


    // Add attachments
    if (attachments != null)
    {
        foreach (var t in attachments)
        {
            mailMessage.Attachments.Add(new Attachment(t));
        }
    }
    mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1);
    mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", _accountName);
    mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", _password);
    mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", _port.ToString(CultureInfo.InvariantCulture)); 
    mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", true);

    SmtpMail.SmtpServer = _smtp;
    SmtpMail.Send(mailMessage);
}

这是重写的部分(嗯,有点):

public void Send2(string from, string to, string subject, string body, bool isHtml, string[] attachments)
{
var fromObj = new MailAddress(from);
var toObj = new MailAddress(to);


var mailMessage = new System.Net.Mail.MailMessage
                      {
                          From = fromObj,
                          Subject = subject,
                          Body = body,
                          IsBodyHtml = isHtml,
                      };

mailMessage.To.Add(toObj);

if (attachments != null)
{
    foreach(var t in attachments)
    {
        mailMessage.Attachments.Add(new Attachment(t));
    }
}

var smtp = new SmtpClient(_smtp) {Credentials = new NetworkCredential(_accountName, _password), Port = _port, EnableSsl = true};
smtp.Send(mailMessage);
}

如果您想知道,我在代码中设置了更高的 _port_smtp,分别为 465 和 smtp.gmail.com。

所以它似乎有效,但随后进入发送部分并吐出其中之一:

System.Net.Mail.SmtpException: The operation has timed out.

我是否缺少某些东西,例如原始代码中的 Fields,导致它超时?

谢谢!

解决方案

感谢DavidH指出正确的方向,需要将端口从465更改为587(或25;我正在使用前者没问题)。

【问题讨论】:

    标签: c# asp.net-mvc-4 system.net.mail system.web.mail


    【解决方案1】:

    一点点的谷歌可以走很长的路。检查此答案以解决您的问题-您使用了错误的端口:

    https://stackoverflow.com/a/11244548/2420979

    【讨论】:

    • 一定没有使用正确的搜索词...我保证我在发帖前确实看过!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2018-04-13
    • 2013-04-02
    • 2012-07-09
    • 2012-08-20
    相关资源
    最近更新 更多