Go语言开发SMTP应用遇smtp: server doesn't support AUTH问题求助
问题描述
我尝试用Go语言开发一个简单的SMTP应用,但我的SMTP服务器不支持AUTH认证,无需用户名和密码。然而使用smtp.PlainAuth()会触发认证流程,导致报错:smtp: server doesn't support AUTH。以下是我当前的代码:
package main import ( "log" "net/smtp" ) func main() { // Configuration from := "samplemail@gmail.com" password := "12345samplemail" to := []string{"recipient@email.com"} smtpHost := "smtp.gmail.com" smtpPort := "587" message := []byte("Hello! I'm trying out smtp to send emails to recipients.") // Create authentication auth := smtp.PlainAuth("", from, password, smtpHost) // Send actual message err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, message) if err != nil { log.Fatal(err) } }
解决方案
smtp.SendMail()函数的auth参数允许传入nil,当该参数为nil时,客户端不会尝试执行任何认证流程,刚好适配不支持AUTH的SMTP服务器。
修改后的代码如下:
package main import ( "log" "net/smtp" ) func main() { // Configuration from := "samplemail@gmail.com" to := []string{"recipient@email.com"} smtpHost := "smtp.gmail.com" smtpPort := "587" message := []byte("Hello! I'm trying out smtp to send emails to recipients.") // 无需认证,传入nil作为auth参数 err := smtp.SendMail(smtpHost+":"+smtpPort, nil, from, to, message) if err != nil { log.Fatal(err) } }
说明:
- 移除了不需要的
password变量和smtp.PlainAuth()创建逻辑 - 调用
smtp.SendMail()时将第二个参数改为nil,跳过认证步骤
内容的提问来源于stack exchange,提问作者Buvnesh Venkatesan
相关产品推荐
相关产品推荐

