4

go's を使用net/smtpしてメールを送信していますが、一部のメールでは正常に機能しますが、他のメールでは機能しません。を受け取りました554 5.5.1 Error: no valid recipientsが、正しいメールアドレスを提供したと確信しています。

(最終的な目標はnet/smtp、すべてのメール受信者のために機能するようにすることです。したがって、それに関する回答も大歓迎です)

バックグラウンドで何が起こっているかをデバッグするにはどうすればよいですか? SMTP サーバーとの間で送受信されるコマンドは何ですか? コマンド ライン (telnet) からコマンドを再生して、エラーの詳細を確認したいと思います。

これは私が使用するコードです(go-wiki から):

package main

import (
        "bytes"
        "log"
        "net/smtp"
)

func main() {
        // Connect to the remote SMTP server.
        c, err := smtp.Dial("mail.example.com:25")
        if err != nil {
                log.Fatal(err)
        }
        // Set the sender and recipient.
        c.Mail("sender@example.org")
        c.Rcpt("recipient@example.net")
        // Send the email body.
        wc, err := c.Data()
        if err != nil {
                log.Fatal(err)
        }
        defer wc.Close()
        buf := bytes.NewBufferString("This is the email body.")
        if _, err = buf.WriteTo(wc); err != nil {
                log.Fatal(err)
        }
}

これは非常に漠然とした質問であることは承知していますが、どんな助けでも大歓迎です。

4

1 に答える 1

4

有効な電子メールアドレスを拒否したサーバーは、文書化されているデフォルトであるEHLOだけでなく、適切なホスト名を持つコマンドを必要とするように見えます (いくつかのデバッグの後)。localhost

だから、このように最初に行を挿入すると

c.Hello("example.com") // use real server name here

すべて正常に動作します。BUT: (自分へのメモ): 適切なエラー チェックなしでコードを実行しないでください。次のようなすべてのコマンドでエラーを確認するのに役立ちました

err = c.Hello("example.com")
...
err = c.Mail("sender@example.org")
...
err = c.Rcpt("recipient@example.net")
...

適切なホスト名を使用するためのヒントがどのエラー メッセージから得られたかはわかりませんが、次のようなものでした。

550 5.7.1 <localhost>: Helo command rejected: Don't use hostname localhost
于 2013-10-11T13:17:02.497 に答える