【问题标题】:Authentication is required for relay中继需要认证
【发布时间】:2014-06-30 07:47:39
【问题描述】:

我是 asp.net 的新手,我正在尝试通过这个短代码发送电子邮件。

 Public Class sMail
        Public emailBody As String
        Public emailSubject As String
        'Public sendTo As String

        Public Function sendMail() As Boolean
            Dim eMail As New System.Net.Mail.MailMessage
            Dim smtpClient As New System.Net.Mail.SmtpClient("mydomain", 25)
            Dim credentials As New System.Net.NetworkCredential("info@mydomain.com", "password")
            smtpClient.Credentials = credentials
            smtpClient.UseDefaultCredentials = True
            smtpClient.DeliveryMethod = Net.Mail.SmtpDeliveryMethod.Network
            eMail.From = New System.Net.Mail.MailAddress("info@mydomain.com", "Info")
            eMail.To.Add(New Net.Mail.MailAddress("example@outsidedomain.com"))
            eMail.Subject = emailSubject
            eMail.Body = emailBody
            eMail.BodyEncoding = System.Text.Encoding.UTF8
            eMail.IsBodyHtml = False


            Try
                smtpClient.Send(eMail)
                Return True
            Catch ex As Exception

               Return False

            End Try
        End Function
    End Class

在我的域之外发送邮件(gMail、Hotmail 等)我得到: 邮箱不可用。服务器响应为:中继需要身份验证

但是,我在自己的域上发送电子邮件没有问题。

我尝试了几个更改,但同样的错误。以下不起作用

  1. 更改 UseDefaultCredentials;
  2. 启用/禁用 ssl ;

但是,当我在 Outlook 中使用相同的 SMTP 设置时,我得到了相同的错误 服务器错误:“中继需要 550 身份验证” 在我自己的域之外发送邮件时。例如在 hotmail、gmail 上。

但是当我在 Outlook 中更改帐户设置并勾选:我的发送 (SMTP) 服务器需要身份验证 -> 使用与接收邮件服务器相同的设置,我可以向任何域发送电子邮件。

我想不通,谁能指导我?

【问题讨论】:

    标签: asp.net vb.net email smtp


    【解决方案1】:

    确保 web.config 中网络元素的 defaultCredentials 属性未设置为“true”。 See here 了解有关如何配置 mailSettings 以与 System.Net.Mail 一起使用的更多详细信息。

    【讨论】:

      【解决方案2】:

      我想通了,但仍然无法解释为什么会这样

      我没有在代码隐藏中声明凭据,而是在 webconfig 中声明了 ma​​ilsettings

      <system.net>
          <mailSettings>
            <smtp from="info@mydomain.com">
              <network host="info@mydomain.com" port="25" userName="info@mydomain.com" password="secret" defaultCredentials="false" enableSsl="false" clientDomain="mydomain.com"/>
            </smtp>
          </mailSettings> 
        </system.net>
      

      然后在代码后面使用 smtp 客户端没有设置凭据

      Public Class sMail
          Public emailBody As String
          Public emailSubject As String
          Public sendTo As String
      
        Public Function sendMail() As Boolean
              Dim eMail As New System.Net.Mail.MailMessage
              eMail.Sender = New System.Net.Mail.MailAddress("info@mydomain.com")
              eMail.Priority = Net.Mail.MailPriority.High
              eMail.From = New System.Net.Mail.MailAddress("info@mydomain.com")
              eMail.To.Add(sendTo)
              eMail.Subject = emailSubject
              eMail.Body = emailBody
              eMail.IsBodyHtml = True
              eMail.BodyEncoding = Encoding.Default
              Dim smtpClient As New System.Net.Mail.SmtpClient()     
              Try
                  smtpClient.Send(eMail)
                  Return True
              Catch ex As Exception
                 Return False
              End Try
        End Function
      End Class
      

      这个方法对我有用,它也应该使用在代码后面而不是在 web.config 中声明的凭据我猜,我不确定,但对我不起作用

      【讨论】:

        猜你喜欢
        • 2014-05-31
        • 2018-09-28
        • 2011-04-12
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-22
        相关资源
        最近更新 更多