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

Простое письмо в Go

Отправка начинается с адреса SMTP-сервера и списка получателей в виде среза строк. Отдельно указывают адрес отправителя для протокола и готовое сообщение: заголовки, пустая строка и тело в одном срезе байтов.

На локальном приемнике авторизацию часто не передают: вместо нее можно передать nil. На настоящем сервере нужны логин и пароль через smtp.PlainAuth, иначе письмо не примут.

Соберем короткое письмо и отправим на "127.0.0.1:1025":

package main import ( "fmt" "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: hello\r\n" + "\r\n" + "plain text body", ) err := smtp.SendMail(addr, nil, from, to, msg) if err != nil { log.Fatal(err) } fmt.Println("sent") }

На экране "sent", если приемник слушает порт. Заголовок To в тексте сообщения должен совпадать с адресом в срезе получателей для одного адресата.

Тот же прием с телом из нескольких строк через склеивание фрагментов:

package main import ( "fmt" "log" "net/smtp" ) func main() { addr := "127.0.0.1:1025" from := "notice@example.com" to := []string{"user@example.com"} body := "line one\r\nline two" msg := []byte( "From: notice@example.com\r\n" + "To: user@example.com\r\n" + "Subject: report\r\n" + "\r\n" + body, ) err := smtp.SendMail(addr, nil, from, to, msg) if err != nil { log.Fatal(err) } fmt.Println("sent") }

Даны адреса:

from := "bot@example.com" to := []string{"client@example.com"} addr := "127.0.0.1:1025"

Соберите сообщение с темой "ping" и телом "ok", отправьте на addr без авторизации и выведите "done" при успехе.

Дан текст тела:

text := "reminder"

Допишите заголовки From, To и Subject с адресами "app@example.com" и "staff@example.com", темой "note", пустой строкой и text, затем отправьте на локальный порт 1025.

Скажите, зачем между блоком заголовков и телом письма в срезе байтов нужна отдельная строка "\r\n" без текста заголовка.

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