Ответ
Да, работал. В Go для отправки писем через SMTP используется стандартный пакет net/smtp. Основные функции - smtp.SendMail() для отправки и smtp.PlainAuth() для аутентификации.
Пример отправки простого текстового письма:
package main
import (
"fmt"
"log"
"net/smtp"
)
func main() {
from := "sender@example.com"
pass := "your_email_password"
to := "recipient@example.com"
smtpHost := "smtp.example.com"
smtpPort := "587" // Обычно 587 для TLS или 465 для SSL
// Формирование сообщения в формате RFC 822
msg := []byte(
"From: " + from + "rn" +
"To: " + to + "rn" +
"Subject: Тестовое письмо из Gorn" +
"MIME-version: 1.0;rn" +
"Content-Type: text/plain; charset="UTF-8";rn" +
"rn" +
"Привет, это тестовое письмо, отправленное из Go.rn",
)
// Аутентификация
auth := smtp.PlainAuth("", from, pass, smtpHost)
// Отправка письма
err := smtp.SendMail(
smtpHost+":"+smtpPort,
auth,
from,
[]string{to},
msg,
)
if err != nil {
log.Fatalf("Ошибка при отправке письма: %v", err)
}
fmt.Println("Письмо успешно отправлено!")
}Важные аспекты:
- Порты: Обычно используются порты
587(дляSTARTTLS) или465(дляSMTPS/SSL). Убедитесь, что ваш SMTP-сервер поддерживает выбранный порт и метод шифрования. - Шифрование:
net/smtpподдерживаетSTARTTLSпо умолчанию для порта 587. Для прямого SSL/TLS соединения (порт 465) может потребоваться использованиеcrypto/tlsдля установления соединения, а затем передача его вsmtp.NewClient. - Форматирование сообщений: Для сложных писем (HTML, вложения, несколько частей) рекомендуется использовать сторонние библиотеки, такие как
gomailилиgo-mail, которые значительно упрощают формирование MIME-сообщений и работу с вложениями.