VB.net sendmail smtp 错误

Posted

技术标签:

【中文标题】VB.net sendmail smtp 错误【英文标题】:VB.net sendmail smtp error 【发布时间】:2011-02-23 19:57:02 【问题描述】:

我正在使用以下代码从我的 vb.net Web 应用程序发送电子邮件。

Public Function SendMail(ByVal strTo As String, ByVal strFrom As String, _
                            ByVal strSubject As String, ByVal strBody As String) As String
        Try

            Dim SmtpServer As New SmtpClient()
            Dim mail As New MailMessage()
            SmtpServer.Credentials = New _
            Net.NetworkCredential("ns1.jasmine.arvixe.com", "<password>")
            SmtpServer.Port = 587
            SmtpServer.Host = "mail.<mydomain>.com"
            mail = New MailMessage()
            mail.From = New MailAddress(strFrom)
            mail.To.Add(strTo)
            mail.Subject = strSubject
            mail.IsBodyhtml = True
            mail.Body = strBody
            SmtpServer.Send(mail)
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

当我使用我的个人 live.co.uk 电子邮件地址作为 strFrom 值时,它工作正常,甚至是一个虚构的电子邮件地址。但是,当我使用另一个完全有效且正常工作的 (contact@mydomain.com) 时,我收到以下错误:

“SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:需要 SMTP 身份验证。”

为什么会这样?

【问题讨论】:

如果设置 mail.From ="test@.com" 会发生什么? 旁注:捕获和忽略异常被认为是非常糟糕的设计。抛出异常是有原因的。一般来说,一个人应该至少记录它们。 【参考方案1】:

查看规范 RFC 2554 (http://www.faqs.org/rfcs/rfc2554.html) 后,我的猜测是接收/中继服务器正在使用某种身份验证方案,以确保电子邮件实际上来自 strFrom 指示的任何位置(@ 后面指示的服务器上的有效帐户)。

该规范的第 5 项“MAIL FROM 命令的 AUTH 参数”特别令人感兴趣。

由于此“MAIL FROM 命令的 AUTH 参数”并未在任何地方使用,它可以解释为什么某些电子邮件地址适用,而其他电子邮件地址无效。

【讨论】:

以上是关于VB.net sendmail smtp 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VB.NET 中自动获取 SMTP 详细信息,如在 Thunderbird 中

Laravel 邮件参数(sendmail/smtp)

在 SMTP 电子邮件 VB.NET 的正文中添加多行

为啥 python3 中的 smtp.sendmail 不发送主题?

html中随机添加xp_smtp_sendmail空格

我可以使用sendmail从Jenkins发送电子邮件,还是需要安装某种SMTP网关?