Ответ
Да, работал. В 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-сообщений и работу с вложениями.
Ответ 18+ 🔞
А, работал, говоришь? Ну да, в Go для этой ебушки-воробушки с почтой есть стандартный пакет 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). Смотри, что твой почтовый сервер поддерживает, а то отправишь письмо в никуда, в рот меня чих-пых. - Шифрование: С портом
587net/smtpсам по себеSTARTTLSподтянет. А вот если тебе прям SSL/TLS (порт 465) нужен, то тут уже придётся повозиться сcrypto/tls, чтобы соединение установить, и потом это дело вsmtp.NewClientпихать. Геморрой, короче. - Форматирование: Ну, если тебе просто «привет, как дела» отправить — то и этого хватит. А если тебе, сука, письмо с HTML, картинками и вложениями нужно — это пиздец. Тут уже лучше не мучаться, а взять готовую библиотеку, типа
gomailилиgo-mail. Они всю эту ебучую MIME-магию за тебя сделают, а ты будешь только доволен.