【问题标题】:send smtp email to multiple receivers向多个收件人发送 smtp 电子邮件
【发布时间】:2017-10-24 22:41:03
【问题描述】:

我正在使用this 发送smtp。它适用于一个接收器,但我想要多个接收器。我尝试了以下方法:

func sendemail(body string) {  
    from := "smtpemail" 
    pass := "pass"
    to := "a@gmail.com,b@gmail.com"
    ....
}

我也试过了:

to := "\"a@gmail.com\",\"b@gmail.com\""

和:

to := []string{"a@gmail.com","b@gmail.com"}

它们都不起作用。抱歉这么简单,我才开始用golang

【问题讨论】:

  • 最新形式(使用切片)应该可以工作。 smtp.SendMail返回的错误信息是什么?
  • 第 15 行:无效操作:("From: " + from + string("\nTo: ")) + to (mismatched types string and []string) and for line 17: cannot use to (type []string) 作为数组或切片文字中的类型字符串
  • 您不能简单地通过+ 运算符将string[]string 连接起来。快速解决方案是将... + to 替换为strings.Join(to, ",")。不要忘记导入strings 包。

标签: go


【解决方案1】:

来自net/smtp 文档:

msg 参数应该是一个 RFC 822 样式的电子邮件,标题在前, 一个空行,然后是邮件正文。 msg 的行应该是 CRLF 终止。 msg 标头通常应包含以下字段 “发件人”、“收件人”、“主题”和“抄送”。

RFC 822 要求 To: 标头值是逗号分隔的列表。因此,虽然to 变量应保持为[]string 并作为smtp.SendMail 参数传递给to,但邮件标头(在消息中)应将其作为逗号分隔列表。试试下面看看它是否有效:

func send(body string) {
    // ...
    to := []string{"foo@mailinator.com", "bar@mailinator.com"}
    toHeader := strings.Join(to, ",")

    msg := "From: " + from + "\n" +
        "To: " + toHeader + "\n" + // use toHeader
        "Subject: Hello there\n\n" +
        body

    err := smtp.SendMail("smtp.gmail.com:587",
        smtp.PlainAuth("", from, pass, "smtp.gmail.com"),
        from, to, []byte(msg))

    // ...
}

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 2017-12-05
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多