我有一个小网站,有一个联系表单,使用gmail的smtp发送电子邮件。 这是代码:
Dim MyMailMessage As New System.Net.Mail.MailMessage()
'From requires an instance of the MailAddress type
MyMailMessage.From = New MailAddress("office@mydomain.com")
MyMailMessage.To.Add("test@mydomain.com")
MyMailMessage.Subject = "MSG"
MyMailMessage.IsBodyHtml = True
MyMailMessage.Body = "TEXT"
'Create the SMTPClient object and specify the SMTP GMail server
Dim SMTPServer As New SmtpClient("smtp.gmail.com")
SMTPServer.Port = 587
SMTPServer.Credentials = New System.Net.NetworkCredential("user", "pass")
SMTPServer.EnableSsl = True
Try
SMTPServer.Send(MyMailMessage)
Return True
Catch exx As SmtpException
Throw exx
End Try
我得到的错误是:
5.5.4 HELO / EHLO参数无效,关闭连接。 ks5sm2862700wjb.13 - gsmtp
答案 0 :(得分:2)
Google刚刚开始阻止尝试使用不正确参数的HELO / EHLO的任何连接。根据RFC 5321,EHLO / HELO应该有一个参数,它应该是发送邮件的机器的名称。
最常见的破坏配置不会发送任何参数,这正是您正在做的事情。错误消息并不是很重要,因为您必须注意到两个空格中有"空的"中间的争论。
对于常规邮件发送,提供与您发送的IP地址匹配的主机名(即DNS PTR查找)是最正确的名称。
对于smtp-msa(即基于用户/密码的提交到smtp.gmail.com),这不太重要,但它应该仍然是服务器的完全限定域名,如果它'可用。
Google并未针对此字段强制执行RFC 5321的全部要求,但如果您要修复此问题,则最好这样做。
我没有在SmtpClient对象上看到任何内容来设置要发送的内容,因此它已完全中断,或者正在进行一些内部调用以获取返回空字符串的主机名。 / p>
答案 1 :(得分:1)
从今天早上开始,我遇到了同样的问题。
我们将发件人的电子邮件地址设置为EHLO的参数,并且正在为此而烦恼。我相信@导致了这个问题。这必须是一项新要求,因为这可以使用多年。
我将EHLO命令更改为" EHLO google"它再次有效。