Короткая шпаргалка по отправке писем через внутренний SMTP-сервер без логина и пароля.
Такой способ работает только в том случае, если SMTP-сервер разрешает relay с IP-адреса вашего хоста без аутентификации.
PowerShell: Send-MailMessage #
Send-MailMessage `
-From "monitoring@asterisker.com" `
-To "asterisker@gmail.com" `
-Subject "Hello from PowerShell" `
-Body "Hello from PowerShell" `
-SmtpServer "bergamot.asterisker.com" `
-Port 25
Параметр -Credential не указывается, поэтому отправка выполняется без SMTP-аутентификации.
Командлет
Send-MailMessageпомечен как устаревший (deprecated) в новых версиях PowerShell, но продолжает работать. Для продакшена Microsoft рекомендуетMailKitилиMicrosoft Graph(с OAuth).
Bash: curl через stdin #
Через curl письмо можно передать в SMTP из стандартного ввода:
printf 'From: monitoring@asterisker.com\nTo: asterisker@gmail.com\nSubject: Hello from Bash\n\nHello from Bash\n' \
| curl smtp://bergamot.asterisker.com:25 \
--mail-from "monitoring@asterisker.com" \
--mail-rcpt "asterisker@gmail.com" \
--upload-file -
Bash: heredoc #
Если тело письма большое (многострочное), printf становится неудобным. Используйте heredoc:
curl smtp://bergamot.asterisker.com:25 \
--mail-from "monitoring@asterisker.com" \
--mail-rcpt "asterisker@gmail.com" \
--upload-file - <<'EOF'
From: monitoring@asterisker.com
To: asterisker@gmail.com
Subject: Hello from Bash
Hello from Bash
EOF
Что проверить при ошибке #
Если письмо не отправляется:
- убедитесь, что SMTP-сервер разрешает relay с вашего IP;
- проверьте доступность TCP-порта
25; - посмотрите ответ
curl, например550 Relay access denied; - проверьте логи SMTP-сервера, например
/var/log/mail.logдля Postfix.
Главное условие такой схемы: анонимная отправка должна быть явно разрешена SMTP-сервером для вашего IP или подсети.