Как отправить почту со своего домена

  • Купил домен, условно example.com.
  • Арендовал VDS на Ubuntu.
  • Написал сайт
  • Хочу, чтобы пользователи сайта могли получать письма от отправителя [email protected]

Занимаюсь вопросом не первую неделю, чёткости нет абсолютно никакой. Где-то написано, что нужно поднять почтовый сервер на VDS (например, postfix). Где-то написано, что нужно использовать сторониие почтовые серверы (например, яндекс). Сколько ни старался, с postfix ничего не отправляется даже встроенной утилитой sendmail, не говоря уже об отправке почты средствами языка программирования. Подключение к яндексу - тоже окутано тайной. Добавил миллион DNS записей, зарегистрировался в яндекс.коннекте, добавил туда домен, все проверки прошёл.

В общем - как отправить почту на любой почтовый адрес любым протоколом (smtp, imap, pop) со своего домена из языка программирования Golang?


Ответы (1 шт):

Автор решения: KoVadim

Если хочется отправлять через sendmail с консоли, то нужно sendmail'у подсказать, какой у Вас адрес отправителя. Есть классическая инструкция - https://tldp.org/HOWTO/Sendmail-Address-Rewrite-3.html. Если супер кратко - нужно настроить файл /etc/mail/genericsdomain (где вписать Ваш домен) и /etc/mail/genericstable, что бы sendmail знал, от какого имени слать письмо.

Теперь в го. Попробуйте такой код

package main

import (
  "fmt"
  "net/smtp"
)

func main() {

  // Ваша почта и пароль
  from := "[email protected]" 
  password := "<Email Password>"

  // кому шлем письмо.
  to := []string{
    "[email protected]",
  }

  // настройки smtp сервера.
  smtpHost := "smtp.gmail.com"
  smtpPort := "587"

  // Собственно само сообщение
  message := []byte("This is a test email message.")
  
  // логинимся на севере
  auth := smtp.PlainAuth("", from, password, smtpHost)
  
  // шлем письмо
  err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, message)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println("Письмо ушло!")
}
→ Ссылка