【问题标题】:SMTP email message with SSL not working with GoDaddy email address in ASP.NET带有 SSL 的 SMTP 电子邮件无法在 ASP.NET 中使用 GoDaddy 电子邮件地址
【发布时间】:2017-08-31 15:47:57
【问题描述】:

当我尝试在我的新 GoDaddy 电子邮件地址上使用 SSL 在 ASP.NET 中发送 STMP 电子邮件时,它不起作用。我收到一条错误消息说Unable to read data from the transport connection: net_io_connectionclosed.

以下是服务器的电子邮件设置:

这是我的 web.config 中的 sn-p 以及电子邮件服务器信息:

<system.net>
  <mailSettings>
    <smtp from="no-reply@mysite.com" >
      <network host="smtpout.secureserver.net" port="465" userName="no-reply@mysite.com" password="password123" enableSsl="true" />
    </smtp>
  </mailSettings>
</system.net>

这是发送电子邮件的 C# 代码。

MailMessage message = new MailMessage();
message.To.Add(new MailAddress(to));
message.Subject = "Message from " + inputModel.Name;
message.Body = body;
message.IsBodyHtml = true;

using (var smtp = new SmtpClient())
{
    smtp.Send(message);
}

端口 80、3535 和 25 在没有 SSL 的情况下可以正常工作,但是这四个端口都不能在 SSL 的情况下工作。我什至用 SSL 尝试了 587 端口,但在很长一段时间后它就超时了。

如何让这些电子邮件使用 SSL 发送?

【问题讨论】:

    标签: c# asp.net email ssl


    【解决方案1】:

    this older question 中有很多关于此的内容,包括对问题的描述 - SmtpClient 仅支持“显式 SSL”,您需要执行“隐式 SSL”才能直接在端口 465 上进行 SSL。

    比那里讨论的那些选项更好和更现代的方法是使用具有隐式 SSL 支持的维护良好的库。 MailKit 是个不错的选择。

    或者,考虑使用第三方电子邮件中继服务,例如 SendGrid、Mandrill、Mailgun 等。这样做将大大提高用户实际在收件箱而不是垃圾邮件/垃圾文件夹中收到您的邮件的几率。

    【讨论】:

      【解决方案2】:

      从您的屏幕截图中,我假设您的网站托管在 godaddy 之外,因此您可以使用“smtpout.secureserver.net”。

      如果您的网站托管在 godaddy 上,那么您需要按如下方式更改配置:

       <system.net>
            <mailSettings>
             <smtp from="no-reply@mysite.com">
              <network host="relay-hosting.secureserver.net"/>
             </smtp>
            </mailSettings>
          </system.net>
      

      如果你想使用 Explicit ssl 尝试将端口从 465 更改为 587

      对于隐式 SSL,我们使用了netimplicitssl

      这是取自this答案的样本

      var mailMessage = new MimeMailMessage();
      mailMessage.Subject = "test mail";
      mailMessage.Body = "hi dude!";
      mailMessage.Sender = new MimeMailAddress("you@gmail.com", "your name");
      mailMessage.IsBodyHtml = true;
      mailMessage.To.Add(new MimeMailAddress("yourfriend@gmail.com", "your friendd's name")); 
      mailMessage.Attachments.Add(new MimeAttachment("your file address"));
      var emailer = new SmtpSocketClient();
      emailer.Host = "your mail server address";
      emailer.Port = 465;
      emailer.EnableSsl = true;
      emailer.User = "mail sever user name";
      emailer.Password = "mail sever password" ;
      emailer.AuthenticationMode = AuthenticationType.PlainText;
      emailer.MailMessage = mailMessage;
      emailer.OnMailSent += new SendCompletedEventHandler(OnMailSent);
      //Send email
      emailer.SendMessageAsync();
      
      // A simple call back function:
      private void OnMailSent(object sender, AsyncCompletedEventArgs asynccompletedeventargs)
      {
          Console.Out.WriteLine(asynccompletedeventargs.UserState.ToString());
      }
      

      【讨论】:

        猜你喜欢
        • 2020-07-31
        • 2017-12-04
        • 2012-04-08
        • 2011-03-11
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 2021-03-26
        相关资源
        最近更新 更多