使用gomail.v2 Golang多个收件人

时间:2016-06-28 02:12:51

标签: go gomail

我用来通过gomail.v2发送电子邮件的唯一方法是在for循环中使用Send()函数发送每封电子邮件。但我需要向其他电子邮件地址显示已发送的电子邮件。

for _, recipient := range os.Args[3:] {
    mail.SetAddressHeader("From", "my@mail.com", "My Name")
    mail.SetHeader("To", recipient)
    mail.SetHeader("Subject", os.Args[2])
    mail.SetBody("text/html", os.Args[1])

    if err := dialer.DialAndSend(mail); err != nil {
        log.Printf("Could not send email to %q: %v", recipient, err)
        panic(err)
    }
}

我发现了类似的内容:

var emails bytes.Buffer

mail.SetAddressHeader("From", "my@mail.com.br", "My Name")
mail.SetHeader("Subject", os.Args[2])
mail.SetBody("text/html", os.Args[1])

for _, recipient := range os.Args[3:] {
    emails.WriteString(recipient + ",")
}

mail.SetHeader("To", emails.String())

if err := dialer.DialAndSend(mail); err != nil {
    log.Printf("Could not send email to %q: %v", buffer, err)
    panic(err)
}

它的工作原理是只将电子邮件发送给String中的第一个收件人。 在Gmail,Outlook或其他任何收件人地址等电子邮件管理器中都会显示,但不会发送。

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:6)

试一试?

recipients := os.Args[3:]
addresses := make([]string, len(recipients))
for i, recipient := range recipients {
    addresses[i] = mail.FormatAddress(recipient, "")
}

mail.SetHeader("To", addresses...)

if err := dialer.DialAndSend(mail); err != nil {
    log.Fatal(err)
}