Ответ
Да, работал. В 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-сообщений и работу с вложениями.