免责声明:我在这个帖子中看到过类似的问题:
Golang multiple recipients with gomail.v2但是无法让这个工作,并且还没有在那里寻求帮助的评论。该问题中的操作是使用os.Args[]
,而我想使用存储在配置文件中的切片。
我尝试使用awesome gomail.v2包发送到结构实例ToMail
中的切片e
中包含的多个收件人列表Email
通过我的方法Mail
。
编译器在第37行抱怨:
./mailer.go:37: not enough arguments in call to m.SetAddressHeader
have (string, []string...)
want (string, string, string)
如何正确地将切片中的每个收件人传递到SetAddressHeader("To"
...方法,以便发送给切片ToMail
中的所有收件人?
我尝试过的事情:
package main
import (
"fmt"
"gopkg.in/gomail.v2"
)
type Email struct {
FromMail, FromFirstLast, Password, Subject, Body, Server string
ToMail []string
Port int
}
func main() {
e := Email{FromMail: "fromuser@foo.com",
FromFirstLast: "From User",
ToMail: []string{"user1@foo.com", "user2@foo.com"},
Password: "passpasspass",
Subject: "Test",
Body:"TEST BODY",
Server: "foo.foomail.com",
Port: 587,}
err := e.Mail()
if err != nil {
fmt.Println(err)
}
}
func (e Email)Mail() (error) {
m := gomail.NewMessage()
m.SetAddressHeader("From", e.FromMail, e.FromFirstLast)
addresses := make([]string, len(e.ToMail))
for i, _ := range addresses{
addresses[i] = m.FormatAddress(e.ToMail[i], "")
}
m.SetAddressHeader("To", addresses...)
m.SetHeader("Subject", e.Subject)
m.SetBody("text/plain", e.Body)
d := gomail.NewPlainDialer(e.Server, e.Port, e.FromMail, e.Password)
if err := d.DialAndSend(m); err != nil {
return err
}
return nil
}
答案 0 :(得分:1)
import "gopkg.in/gomail.v2"
func (*Message) SetAddressHeader
func (m *Message) SetAddressHeader(field, address, name string)
SetAddressHeader设置给定标题字段的地址。
func (m *Message) SetHeader(field string, value ...string)
SetHeader将值设置为给定的标题字段。
您引用的示例和文档包含多个地址:
addresses := make([]string, len(e.ToMail))
for i := range addresses {
addresses[i] = m.FormatAddress(e.ToMail[i], "")
}
m.SetHeader("To", addresses...)
但您使用单一地址(隐式FormatAddress
)形式编写:
m.SetAddressHeader("To", addresses...)
错误:
not enough arguments in call to m.SetAddressHeader
have (string, []string...)
want (string, string, string)