我想使用Outlook服务器发送电子邮件,但出现错误504 5.7.4 Unrecognized authentication type
这是代码段。
func sendEmail() {
server := "smtp-mail.outlook.com
port := 587
user := "foo@outlook.com"
from := user
pass := "foobar"
dest := "bar@gmail.com"
auth := smtp.PlainAuth("", user, pass, server)
to := []string{dest}
msg := []byte("From: " + from + "\n" +
"To: " + dest + "\n" +
"Subject: Test outlook\n" +
"OK")
endpoint := server + ":" + port
err := smtp.SendMail(endpoint, auth, from, to, msg)
if err != nil {
log.Fatal(err)
}
}
如果我不是使用Outlook发送电子邮件,而是使用gmail,则可以正常工作。
在Python中,我可以使用Outlook并通过以下代码发送电子邮件:
server = smtplib.SMTP(server, port)
server.starttls()
server.login(user, password)
server.sendmail(from, to, msg)
server.quit()
所以我想我的Go代码中缺少某些内容。根据{{3}},SendMail
切换到TLS
,所以这不应该成为问题。
答案 0 :(得分:0)
auth := smtp.PlainAuth("", user, pass, server)
这使用身份验证方法PLAIN。不幸的是smtp-mail.outlook.com不支持此身份验证方法:
> EHLO example.com
< 250-AM0PR10CA0007.outlook.office365.com Hello ...
< 250- ...
< 250-AUTH LOGIN XOAUTH2
因此,仅支持LOGIN和XOAUTH2作为身份验证方法。
server.login(user, password)
Python支持LOGIN,因此它将成功。
Golang smtp不支持LOGIN。但是this gist似乎可以通过添加此缺少的身份验证方法来提供有效的解决方案。