Как отправить почту в Go с помощью пакета электронной почты
Используйте эту альтернативу встроенному пакету электронной почты Go для более удобного использования.
При создании приложений вам потребуется отправлять электронные письма для разных целей: от уведомлений до аутентификации и многих других. Go предоставляет пакеты smtp и mail в своей стандартной библиотеке для отправки электронной почты. В экосистеме Go также есть множество сторонних почтовых пакетов.
Встроенные почтовые пакеты делают отправку электронной почты сложной задачей. Если вы не являетесь разработчиком серверных приложений, пакеты smtp и mail могут показаться вам сложными в использовании и настройке.
Одной из популярных альтернатив является пакет email Джордана Райта, который абстрагирует сложность отправки почты. Он также добавляет функции, которых нет в пакетах smtp и mail.
Начало работы с пакетом электронной почты
Пакет email — это легкая, надежная и гибкая библиотека, популярная благодаря своей простоте. Всего с помощью нескольких строк кода вы можете создать и отправить электронное письмо с вложениями, содержимым HTML и многим другим. Пакет также поддерживает расширенные функции, такие как защищенные SMTP-соединения и несколько получателей, что делает его универсальным инструментом для ваших нужд электронной почты.
Пакет электронной почты также поддерживает поля CC и BCC, адреса электронной почты в нескольких форматах, уведомления о прочтении и настраиваемые заголовки.
Поскольку пакет не встроен в стандартную библиотеку Go, вам необходимо установить его с помощью команды go get. Пакет электронной почты поддерживает версии Go 1.15 и выше.
Запустите эту команду, чтобы установить пакет в зависимости вашего проекта после инициализации нового проекта.
go get github.com/jordan-wright/email
После установки пакета электронной почты вы можете импортировать его, указав местоположение относительно пути установки:
import (
"fmt"
"github.com/jordan-wright/email"
"net/smtp"
)
Вы будете использовать пакет fmt для вывода вывода на консоль и пакет smtp для целей аутентификации.
Отправка почты с помощью пакета электронной почты
Вам нужно будет объявить переменные для хранения данных вашей почты. Объявите переменные для вашего адреса электронной почты и пароля.
mail := "your email"
password := "your app password"
Вы можете жестко запрограммировать пароль или использовать файл переменных среды для повышения безопасности.
Переменные mail и password должны содержать ваш адрес электронной почты и пароль соответственно.
Вам нужно будет объявить переменные для адреса хоста и номера порта для почты. Вот адрес хоста и номер порта для почты Yahoo:
hostAddress := "smtp.mail.yahoo.com"
hostPort := "465"
Вам также потребуется создать новый экземпляр электронной почты для отправки электронных писем с помощью пакета email. Вы можете использовать метод NewEmail пакета email, чтобы инициализировать экземпляр электронной почты для вашей почты:
newEmail := email.NewEmail()
Метод NewEmail возвращает экземпляр структуры, которую вы можете изменить для элементов вашего электронного письма.
Вы можете использовать поля От и Кому структуры, чтобы добавить электронные письма отправителя и получателя в экземпляр электронной почты.
newEmail.From = mail
newEmail.To = []string{"list of recipients"}
Поле Кому представляет собой фрагмент строк неограниченной емкости, который вы можете использовать для объявления всех адресов получателей.
Вы можете добавить поля Копия и СК в свой адрес электронной почты, используя поля СК и Копия экземпляра структуры:
newEmail.Bcc = []string{"list of bcc"}
newEmail.Cc = []string{"list of cc"}
Что касается содержимого письма, вы можете добавить тему и текстовое содержимое вашего электронного письма, используя поля Тема и Текст структуры. Тема представляет собой строковое поле, а текстовое содержимое — байтовый срез.
newEmail.Subject = "The Email subject"
newEmail.Text = []byte("Body of your email")
После добавления всех обязательных полей вы можете отправить электронное письмо, используя метод Отправить вашего экземпляра электронной почты. Метод Send принимает адрес хоста, номер порта хоста и экземпляр PlainAuth пакета smtp.
err := newEmail.Send(
fmt.Sprintf("%s:%s", hostAddress, hostPort),
smtp.PlainAuth("", mail, password, hostAddress)
)
if err != nil {
fmt.Println("There was an error sending the mail")
} else {
fmt.Println("The mail was sent successfully")
}
Метод Send возвращает ошибку, которую вы можете обработать, или nil, если ошибок нет.
Вы успешно отправили письмо с пакетом email, содержащее меньше строк, чем нужно было бы написать для отправки письма с пакетом smtp.
Вы можете отправлять почту с помощью встроенного пакета SMTP
Go — это хорошо спланированный язык, поскольку его стандартная библиотека включает в себя большинство функций, необходимых для создания полноценных веб-приложений без внешних зависимостей или сторонних пакетов.
Пакет smtp удобен для отправки электронных писем через различные службы с функциями, аналогичными пакету email.