Несколько получателей в Go
Одно письмо можно адресовать сразу нескольким ящикам. В вызов отправки вторым списком идет срез строк с полными адресами, и сервер передаст копию каждому из них.
В тексте сообщения заголовок с получателями должен перечислять те же адреса через запятую. Расхождение между срезом в коде и строкой в заголовке путает приемник и отчеты о доставке.
Отправим одно письмо двум адресатам:
package main
import (
"fmt"
"log"
"net/smtp"
)
func main() {
addr := "127.0.0.1:1025"
from := "team@example.com"
to := []string{
"alice@example.com",
"bob@example.com",
}
msg := []byte(
"From: team@example.com\r\n" +
"To: alice@example.com, bob@example.com\r\n" +
"Subject: sync\r\n" +
"\r\n" +
"meeting at noon",
)
err := smtp.SendMail(addr, nil, from, to, msg)
if err != nil {
log.Fatal(err)
}
fmt.Println("sent")
}
Порядок адресов в заголовке может совпадать
с порядком в срезе, так проще сверять код
и текст письма. Для трех получателей правило
то же: три элемента среза и три адреса
через запятую в одной строке To.
Список можно собрать в переменную и подставить в заголовок через склеивание:
package main
import (
"fmt"
"log"
"net/smtp"
"strings"
)
func main() {
addr := "127.0.0.1:1025"
from := "list@example.com"
to := []string{
"one@example.com",
"two@example.com",
"three@example.com",
}
headerTo := strings.Join(to, ", ")
msg := []byte(
"From: list@example.com\r\n" +
"To: " + headerTo + "\r\n" +
"Subject: bulk\r\n" +
"\r\n" +
"shared update",
)
err := smtp.SendMail(addr, nil, from, to, msg)
if err != nil {
log.Fatal(err)
}
fmt.Println("sent")
}
Даны адреса:
recipients := []string{
"east@example.com",
"west@example.com",
}
Сформируйте заголовок To из
recipients, отправьте письмо
с темой "route" и телом
"go" от "hub@example.com"
на "127.0.0.1:1025".
В срезе два адреса, а в заголовке
To указан только первый.
Скажите, чем рискован такой вариант
для второго получателя.
Даны адреса:
to := []string{"a@example.com", "b@example.com", "c@example.com"}
Запишите, как должна выглядеть одна
строка заголовка To для этого
среза.