Перейти к основному содержимому

Отправка почты через PowerShell и Bash

·213 слов·1 минута
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps/Network/Infra Engineer, CyberSecurity Expert

Короткая шпаргалка по отправке писем через внутренний 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 или подсети.

Related

Выпуск TLS-сертификатов от Let's Encrypt
·435 слов·3 минут
Как посмотреть путь IP-пакета: traceroute и tracert
·2979 слов·14 минут
Полезные функции Far Manager
·277 слов·2 минут