Вам часто может понадобиться отправить электронные письма многим учетным записям, используя программы для аутентификации и многих других целей.
Протокол SMTP определяет стандарты, которые позволяют обмениваться электронной почтой между почтовыми серверами и агентами пересылки почты, а протокол IMAP предназначен для получения электронной почты.
Go предоставляет функциональные возможности для действий, связанных с электронной почтой, определенных RFC в пакете net/smtp, который также содержит расширения 8BITMIME, AUTH и STARTTLS.
Код, используемый в этом проекте, доступен в Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.
Как отправлять электронные письма в Go с помощью пакета Net/SMTP
Пакет net/smtp является частью стандартной библиотеки Go, поэтому вам не нужно устанавливать какой-либо внешний пакет. Вам нужно только импортировать пакет перед его использованием.
импорт (
"сеть/SMTP"
"журнал"
"крипто/TLS"
"ФМТ"
)
Вам также потребуется импортировать журнал package для регистрации ошибок в консоли и крипто/TLS пакет для настройки безопасного соединения.
После того, как вы импортировали пакет net/smtp, вы должны написать Отправить почту() для отправки почты, а затем вызвать функцию в основной функции.
функцияглавный() {
ФМТ Печать (Отправить почту())
}
функцияОтправить почту()нить {
// Добавляем сюда код
}
В Отправить почту() функция будет содержать код, который отправляет почту получателям.
Как работает отправка электронных писем
Протокол SMTP определяет параметры, которые должны быть у каждой почты. Этими параметрами являются почтовые адреса отправителя и получателя, порт, на который отправляется почта, хост-сервер и сообщение.
Указанные выше параметры важны для отправки писем.
В этом уроке вы научитесь отправлять электронные письма Yahoo. Однако этот процесс одинаков для любого поставщика почтовых серверов (MSP), который вы используете.
Поскольку вы используете Yahoo Mail, войдите в Почта Яху счет, перейти к Информация об аккаунте, и нажмите на Безопасность учетной записи вкладка Затем сгенерируйте пароль приложения. Вам нужно будет назвать приложение, а затем Yahoo Mail создаст пароль для приложения, и вы сможете использовать пароль в своем коде вместе со своим почтовым адресом.
в Отправить почту() function вы объявите три переменные; переменная, содержащая строку вашего адреса электронной почты, переменную, содержащую ваш пароль электронной почты, и строку, содержащую адрес электронной почты, на который вы отправляете сообщения.
от := "[email protected]"
пароль := "aSecurePasswordHere"
на := "[email protected]"
Вы можете использовать срез и цикл по элементам если вы собираетесь отправить их нескольким получателям.
Получение и настройка хоста и порта электронной почты
Протокол SMTP использует номера хоста и порта для идентификации источника электронной почты. Вот тут-то и пригодится ваш MSP. Вам необходимо знать номер хоста и порта, который позволяет использовать ваш MSP.
Проверьте этот ресурс для получения списка хостов MSP и номера портов если вы используете общедоступные электронные письма, такие как Gmail, Yahoo или Outlook. Google отключил «менее безопасные приложения» для Gmail; вы можете захотеть защитить свое приложение, если вы используете Gmail.
Получив номер порта и адрес хоста, назначьте их переменным следующим образом:
хост := "smtp.mail.yahoo.com"
порт := "465"
Приведенные выше номера хоста и порта взяты из Yahoo Mail для использования в обычных учетных записях. Сервер размещен по адресу smtp.mail.yahoo.com, и вам разрешено использовать порт 465 для отправки электронных писем.
Объявление содержимого электронной почты
Следующий шаг — объявить содержимое почты как переменные. Тема и тело составляют сообщение.
subject := "Эй, я просто проверяю тебя."
body := "Надеюсь, у тебя все хорошо! Как у тебя сегодня дела. "
В предмет переменная — тема письма; в тело переменная — это тело письма, которое вы отправляете.
Настройка заголовков электронной почты
Вам нужно будет составить карту строк для обозначения заголовков электронной почты.
заголовки := делать(карта[нить]нить)
заголовки["От"] = от
заголовки["Кому"] = кому
заголовки["Тема"] = тема
сообщение := ""
за к, в := диапазон заголовки {
сообщение += fmt. Sprintf("%s: %s\r", k, v)
}
сообщение += "\r" + тело
Сначала вы создаете карту строковых ключей и значений и устанавливаете заголовки вашего адреса, адреса получателя и темы, как показано выше. Использование диапазона for-loop на заголовки карта, а сообщение объявлена переменная, содержащая заголовки и сообщение с использованием строкового форматирования.
Аутентификация электронной почты
Электронная почта требует аутентификации для проверки источника. Пакет smtp предоставляет функциональные возможности для проверки подлинности электронной почты с использованием PlainAuth. В PlainAuth Метод принимает идентификатор, адрес электронной почты отправителя, пароль и хост в качестве параметров и возвращает Авторизация объект, который вы будете использовать для отправки электронной почты.
аутентифицировать := smtp. PlainAuth("", от, пароль, хост)
Личность — это ваше имя пользователя, которое можно оставить пустым, как в данном случае.
Создание подключения для электронной почты
Некоторые поставщики почтовых услуг требуют, чтобы вы отправляли электронную почту через соединение. В этой статье мы будем делать TCP-соединение на сервер с конфигурациями TLS.
tlsConfig := &tls. Конфигурация{
Небезопасно пропустить проверку: истинный,
Имя сервера: хост,
}
В приведенном выше коде вы создали конфигурацию TLS, сославшись на Конфигурация структура где InsecureSkipVerify был установлен на истинный, а имя сервера было присвоено хозяин переменная.
Вы должны создать TCP-соединение, используя Набирать номер метод tls упаковка. В набирать номер метод принимает тип соединения (TCP), в данном случае адрес сервера и конфигурацию соединения TLS.
соединение, ошибка := tls. Dial("tcp", serverAddress, tlsConfig) ошибка != ноль {
журнал. Паника (ошибка)
}
В приведенном выше коде вы установили TCP-соединение и обработали ошибки; вы создадите новый пакет smtp, используя НовыйКлиент метод сеть/SMTP упаковка. В НовыйКлиент Метод принимает соединение и хост соответственно.
smtpClient, ошибка := smtp. NewClient (подключение, хост)
если ошибся != ноль {
журнал. Паника (ошибка)
}
Теперь, когда вы создали смтп клиентский экземпляр, вы должны установить параметры smtpClient и обрабатывать ошибки.
если ошибка = smtpClient. Auth (аутентифицировать); ошибся != ноль {
журнал. Паника (ошибка)
}
если ошибка = smtpClient. Почта (от); ошибся != ноль {
журнал. Паника (ошибка)
}
если ошибка = smtpClient. Rcpt (заголовки["Кому"]); ошибся != ноль {
журнал. Паника (ошибка)
}
В приведенном выше примере вы передали параметры аутентификации, адреса отправителя и адреса получателя соответствующим методам и обработали ошибки.
Наконец, вам нужно записать в экземпляр подключения, и вы можете сделать это, создав модуль записи с помощью Данные метод вашего smtp-клиент пример.
писатель, ошибка := smtpClient. Данные()
если ошибся != ноль {
журнал. Паника (ошибка)
}
_, ошибка = писатель. Напишите([]байт(сообщение))
если ошибся != ноль {
журнал. Паника (ошибка)
}
После создания модуля записи вы записываете байтовый фрагмент сообщения, используя Напишите метод, как в примере выше.
ошибся = писатель. Закрывать()
если ошибся != ноль {
журнал. Паника (ошибка)
}
ошибка = smtpClient. Покидать()
если ошибся != ноль {
возвращаться
}
возвращаться "Успешно, письмо отправлено!"
Закройте средство записи и выйдите из экземпляра подключения клиента smtp, используя приведенный выше код. В Отправить почту() Функция возвращает сообщение об успехе, как показано выше.
При вызове Отправить почту() функция в главный функция, вы должны получить сообщение об успешном выполнении, зарегистрированное на вашей консоли, и электронное письмо, отправленное вашему получателю.
В сетевом пакете есть еще
Пакет net содержит множество пакетов для сетевых функций, и пакет smtp — лишь один из них. Вы также можете использовать пакеты TCP и HTTP для разработки, связанной с сетью.
Пакет net/smtp может показаться вам слишком сложным, если вы не являетесь бэкэнд-разработчиком. Есть много других альтернатив для быстрой отправки электронных писем с меньшим количеством строк кода. Вы можете проверить компании по маркетингу электронной почты, такие как SendGrid, Twilio и MailChimp, и службы рассылки новостей, такие как Substack и Revue, которые позволяют без стресса отправлять электронные письма многим пользователям.