gpt4 book ai didi

smtp - 调试 SMTP 连接

转载 作者:IT王子 更新时间:2023-10-29 00:44:21 28 4
gpt4 key购买 nike

我使用 go 的 net/smtp 发送电子邮件,它对某些电子邮件工作正常但对其他电子邮件无效。我收到 554 5.5.1 Error: no valid recipients 但我很确定我提供了正确的邮件地址。

(最终目标是让 net/smtp 适用于所有邮件收件人。因此也欢迎回答)

如何调试后台发生的事情?向 SMTP 服务器发送什么命令以及从 SMTP 服务器发送什么命令?我想从命令行 (telnet) 重播命令以了解有关错误的更多信息。

这是我使用的代码(from the 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)
}
}

我知道这是一个非常模糊的问题,但非常感谢任何帮助。

最佳答案

看起来(经过一些调试),拒绝有效电子邮件地址的服务器需要一个带有正确主机名的 EHLO 命令,而不仅仅是默认的 localhost作为documented

所以当我像这样在开头插入一行时

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

一切正常。 但是:( self 提醒):永远不要在没有正确检查错误的情况下运行代码。它帮助我检查了所有命令的错误,例如

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

关于smtp - 调试 SMTP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19317408/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com