parent
9d27291713
commit
4fcb155d12
|
@ -30,9 +30,9 @@ func TestMessage(t *testing.T) {
|
||||||
msg.SetBody("text/plain", "¡Hola, señor!")
|
msg.SetBody("text/plain", "¡Hola, señor!")
|
||||||
|
|
||||||
want := message{
|
want := message{
|
||||||
from: "=?UTF-8?Q?Se=C3=B1or_From?= <from@example.com>",
|
from: "from@example.com",
|
||||||
to: []string{
|
to: []string{
|
||||||
"=?UTF-8?Q?Se=C3=B1or_To?= <to@example.com>",
|
"to@example.com",
|
||||||
"tobis@example.com",
|
"tobis@example.com",
|
||||||
},
|
},
|
||||||
content: "From: =?UTF-8?Q?Se=C3=B1or_From?= <from@example.com>\r\n" +
|
content: "From: =?UTF-8?Q?Se=C3=B1or_From?= <from@example.com>\r\n" +
|
||||||
|
|
37
mailer.go
37
mailer.go
|
@ -97,7 +97,10 @@ func (m *Mailer) Send(msg *Message) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
recipients, bcc := getRecipients(message)
|
recipients, bcc, err := getRecipients(message)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
h := flattenHeader(message, "")
|
h := flattenHeader(message, "")
|
||||||
body, err := ioutil.ReadAll(message.Body)
|
body, err := ioutil.ReadAll(message.Body)
|
||||||
|
@ -148,32 +151,48 @@ func getFrom(msg *mail.Message) (string, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return from, nil
|
return parseAddress(from)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRecipients(msg *mail.Message) (recipients, bcc []string) {
|
func getRecipients(msg *mail.Message) (recipients, bcc []string, err error) {
|
||||||
for _, field := range []string{"Bcc", "To", "Cc"} {
|
for _, field := range []string{"Bcc", "To", "Cc"} {
|
||||||
if addresses, ok := msg.Header[field]; ok {
|
if addresses, ok := msg.Header[field]; ok {
|
||||||
for _, addr := range addresses {
|
for _, addr := range addresses {
|
||||||
switch field {
|
switch field {
|
||||||
case "Bcc":
|
case "Bcc":
|
||||||
bcc = addAdress(bcc, addr)
|
bcc, err = addAdress(bcc, addr)
|
||||||
default:
|
default:
|
||||||
recipients = addAdress(recipients, addr)
|
recipients, err = addAdress(recipients, addr)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return recipients, bcc, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return recipients, bcc
|
return recipients, bcc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func addAdress(list []string, addr string) []string {
|
func addAdress(list []string, addr string) ([]string, error) {
|
||||||
|
addr, err := parseAddress(addr)
|
||||||
|
if err != nil {
|
||||||
|
return list, err
|
||||||
|
}
|
||||||
for _, a := range list {
|
for _, a := range list {
|
||||||
if addr == a {
|
if addr == a {
|
||||||
return list
|
return list, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return append(list, addr)
|
return append(list, addr), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseAddress(field string) (string, error) {
|
||||||
|
a, err := mail.ParseAddress(field)
|
||||||
|
if a == nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.Address, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue