Ошибка отправки письма в Go
Отправка на сервер может завершиться сбоем:
порт закрыт, хост недоступен, сервер отклонил
данные. Команда из пакета net/smtp
возвращает ошибку вторым результатом, ее
нельзя игнорировать.
Проверку делают сразу после вызова, до
сообщения об успехе. Так программа не
напечатает "sent", если письмо
фактически не приняли.
Обработаем отказ при недоступном порте:
package main
import (
"fmt"
"log"
"net/smtp"
)
func main() {
addr := "127.0.0.1:59999"
from := "sender@example.com"
to := []string{"receiver@example.com"}
msg := []byte(
"From: sender@example.com\r\n" +
"To: receiver@example.com\r\n" +
"Subject: test\r\n" +
"\r\n" +
"body",
)
err := smtp.SendMail(addr, nil, from, to, msg)
if err != nil {
fmt.Println("send error")
return
}
fmt.Println("sent")
}
На экране "send error". Номер порта
здесь заведомо без слушателя, поэтому
соединение не устанавливается.
Тот же прием с записью ошибки через
log.Fatal, если программа должна
остановиться:
package main
import (
"log"
"net/smtp"
)
func main() {
addr := "127.0.0.1:1025"
from := "sender@example.com"
to := []string{"receiver@example.com"}
msg := []byte(
"From: sender@example.com\r\n" +
"To: receiver@example.com\r\n" +
"Subject: test\r\n" +
"\r\n" +
"body",
)
err := smtp.SendMail(addr, nil, from, to, msg)
if err != nil {
log.Fatal(err)
}
}
Дан фрагмент:
err := smtp.SendMail(addr, nil, from, to, msg)
fmt.Println("ok")
Скажите, что нужно вставить между
вызовом и печатью "ok".
Приемник на "127.0.0.1:1025"
выключен. Скажите, какое сообщение
разумно вывести пользователю вместо
"sent".
Ошибка равна nil после отправки.
Скажите, можно ли считать, что письмо
принято локальным сервером, если дальше
нет других проверок.