Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpMlSE 273 of 280 menu
◀ ▶

Ошибка отправки письма в 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 после отправки. Скажите, можно ли считать, что письмо принято локальным сервером, если дальше нет других проверок.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить