Golang 多个收件人与 gomail.v2

标签 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)
}

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

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

最佳答案

试试这个?

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)
}

关于Golang 多个收件人与 gomail.v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38066003/

相关文章:

golang中数字类型之间的转换

arrays - 如何使用for循环遍历2D数组

google-app-engine - 用于 SPA 和客户端路由的 AppEngine dispatch.yaml

gomail noauth 示例崩溃

Gomail.v2 - 来自 Slice 的多个收件人

go - 通过 Exim(没有 smtp)发送电子邮件?

Go 版本 1.17.6 对于该版本的 Delve 来说太旧了(最低支持版本 1.18,使用 --check-go-version=false 抑制此错误)

go - 如何从 Go 模块导入特定的包?