2016-03-30 26 views
1

私は小さなウェブサイトを持っていますが、電子メールを送信するためにGmailのsmtpを使用する連絡フォームがあります。Gmailのsmtpを使用してVB.NETでメールを送信する際にエラーが発生しました

Dim MyMailMessage As New System.Net.Mail.MailMessage() 

     'From requires an instance of the MailAddress type 
     MyMailMessage.From = New MailAddress("[email protected]") 
     MyMailMessage.To.Add("[email protected]") 
     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

は実際に使用しているメールアドレスの上に表示されているメールアドレスですか?使用している電子メールアドレスに無効な構文がある場合、5.5.4エラーが発生する可能性があります。 – Dustin

+0

いいえ、通常の正当なEメールアドレスを使用しています。 – user1578139

+0

HELO/EHLOシステムはスパムを検出してブロックしようとします。メッセージのks5sm2862700wjb.13 - gsmtp部分は、Gmailが迷惑メールだと思っている(または疑わしい)ので、Gmailがそれをブロックしていることを示しているようです。 .IsBodyHtml = Falseのテストメッセージを送信しようとしましたか? – Dustin

答えて

1

私は今朝から同じ問題を抱えていました。

私たちはEHLOの引数として送信者の電子メールアドレスを設定していました。私は@が問題を引き起こしていたと信じています。これは何年も働いていたので、これは新しい要件でなければなりません。

EHLOコマンドを「EHLO google」に変更してもう一度動作します。

+0

EHLOの後の値は、接続先のサーバーではなく、ホスト名とドメイン名にする必要があります。 EHLOは "こんにちは、私の名前はxxxxです"と言います。あなたがEHLOに沿って言うと、あなたは名前のない "こんにちは、...."と言っています。 – bvstone

2

Googleは、不正な引数でHELO/EHLOを試みる接続をブロックし始めました。 RFC5321によれば、EHLO/HELOには1つの引数があり、それはメールを送信するマシンの名前でなければなりません。

最も一般的な壊れた設定は、何もしていない引数を送信していません。エラーメッセージは、真ん中に "空の"引数を持つ2つのスペースに気づかなければならないという点で素晴らしいものではありません。

通常のメール送信では、送信元のIPアドレス(つまり、DNS PTRルックアップ)と一致するホスト名を使用するのが最も正しい名前です。

smtp-msa(つまり、smtp.gmail.comへのユーザー/パスワードベースの送信)ではそれほど重要ではありませんが、サーバーの完全修飾ドメイン名(使用可能な場合)は引き続き必要です。

GoogleはこのフィールドではRFC 5321の完全な要件を強制していませんが、修正する場合は正しく行うことをおすすめします。

送信対象を設定するためにSmtpClientオブジェクトに何も表示されないため、完全に壊れているか、空の文字列を返すホスト名を取得するために内部呼び出しを行っています。

関連する問題