gpt4 book ai didi

smtp 无法在生产环境中工作,即使有凭据也未经过身份验证

转载 作者:IT王子 更新时间:2023-10-29 02:00:17 27 4
gpt4 key购买 nike

我在这里玩得很开心。我的代码使用此配置在本地实例 (OSX) 上运行:

mail.host = smtp.gmail.com
mail.port = 25
mail.from = mysite.com
mail.username = email@gmail.com

但是说它在生产环境中未经验证(Ubuntu 12.0.1):

这是我的代码(您可以在 github.com/tanema/revel_mailer 找到所有代码)。在 c.Mail(username) 行抛出身份验证错误。

func (m *Mailer) Send(mail_args map[string]interface{}) error {
m.renderargs = mail_args
pc, _, _, _ := runtime.Caller(1)
names := strings.Split(runtime.FuncForPC(pc).Name(), ".")
m.template = names[len(names)-2] + "/" + names[len(names)-1]

host, host_ok := revel.Config.String("mail.host")
if !host_ok {
revel.ERROR.Println("mail host not set")
}
port, port_ok := revel.Config.Int("mail.port")
if !port_ok {
revel.ERROR.Println("mail port not set")
}

c, err := smtp.Dial(fmt.Sprintf("%s:%d", host, port))
if err != nil {
return err
}

if ok, _ := c.Extension("STARTTLS"); ok {
if err = c.StartTLS(nil); err != nil {
return err
}
}

from, from_ok := revel.Config.String("mail.from")
if !from_ok {
revel.ERROR.Println("mail.from not set")
}


username, username_ok := revel.Config.String("mail.username")
if !username_ok {
revel.ERROR.Println("mail.username not set")
}

if err = c.Auth(smtp.PlainAuth(from, username, getPassword(), host)); err != nil {
return err
}

if err = c.Mail(username); err != nil {
return err
}

if mail_args["to"] != nil {
m.to = makeSAFI(mail_args["to"]) //makeSAFI == make string array from interface
}
if mail_args["cc"] != nil {
m.cc = makeSAFI(mail_args["cc"])
}
if mail_args["bcc"] != nil {
m.bcc = makeSAFI(mail_args["bcc"])
}

if len(m.to) + len(m.cc) + len(m.bcc) == 0 {
return fmt.Errorf("Cannot send email without recipients")
}

recipients := append(m.to, append(m.cc, m.bcc...)...)
for _, addr := range recipients {
if err = c.Rcpt(addr); err != nil {
return err
}
}
w, err := c.Data()
if err != nil {
return err
}

mail, err := m.renderMail(w)
if err != nil {
return err
}

if revel.RunMode == "dev" {
fmt.Println(string(mail))
}

_, err = w.Write(mail)
if err != nil {
return err
}
err = w.Close()
if err != nil {
return err
}
return c.Quit()
}

我无法弄清楚问题是什么;请帮忙。

编辑:

所以我硬着头皮注册了谷歌应用程序,并使用域和电子邮件进行了设置。这让我相信我没有更改的实际上是 MX 记录。因此,既然设置了 MX 记录,我再次测试了使用我的个人电子邮件发送。没运气。知道我是否可以为个人 gmail 电子邮件设置 MX 记录,这样我就不必为谷歌应用程序付费了吗?

最佳答案

我开发了一个Gmail前端,遇到了类似的问题。尝试以下操作:

  1. 尝试使用 ssl://smtp.gmail.com 和端口 465。

  2. 登录您的 GMail 帐户,看看它是否显示类似“未经授权的第三方试图访问此帐户”的内容。如果您这样做,则授予您的应用登录权限。

关于smtp 无法在生产环境中工作,即使有凭据也未经过身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17711724/

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