中继需要验证

时间:2014-05-12 19:52:05

标签: asp.net vb.net email smtp

我是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;
  3. 但是当我在Outlook中使用相同的SMTP设置时,我遇到了相同的错误服务器错误:' 550中继需要验证在我自己的域外发送邮件时。比如在hotmail,gmail上。

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

    我无法弄清楚这一点,任何人都可以指导我吗?

2 个答案:

答案 0 :(得分:1)

确保web.config中网络元素的defaultCredentials属性未设置为" true"。有关如何配置与System.Net.Mail一起使用的邮件设置的详细信息,请See here

答案 1 :(得分:0)

我想出了某种方式,但仍然无法解释为什么这是

我没有在代码隐藏中声明凭据,而是在webconfig中声明 mailsettings

<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中声明的凭据我想,我不确定,但是没有为我工作