Поиск по сайту:

Как отправить почту в 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.

Статьи по данной тематике: