Рассмотрим стандартную ситуацию настройки Postfix MTA для отправки почты из приложений и скриптов которые не поддерживают авторизацию на удаленном сервере и мы должны использовать стандартную команду mail.
Проверяем отправку электронной почты с использованием авторизации на удаленном сервере
$ echo "Test" | swaks --to chernousov@interlan.xyz --from events@domain.ru --server smtp.timeweb.ru:465 --tls-on-connect --auth PLAIN --auth-user events@domain.ru --auth-password xxxxPassworDxxxx
Небольшая шпаргалка по использованию утилиты Swaks
Swaks — мощный инструмент командной строки для тестирования и отладки SMTP‑серверов. Позволяет детально контролировать отправку писем, включая заголовки, вложения и аутентификацию.
Базовая установка
- Linux (Debian/Ubuntu):
sudo apt install swaks - Linux (RHEL/CentOS/Fedora):
sudo dnf install swaks # или sudo yum install swaks - macOS (через Homebrew):
brew install swaks - Из исходников (Perl):
Требуется Perl и модульIO::Socket::SSL(для TLS).
Синтаксис и основные опции
Общий вид команды:
swaks [опции] --to <получатель> --from <отправитель>
Ключевые опции:
--to <email>— адрес получателя.--from <email>— адрес отправителя.--server <host>— SMTP‑сервер (по умолчанию:localhost:25).--port <num>— порт SMTP (25, 465, 587 и др.).--auth— включить аутентификацию.--auth-user <user>— логин для SMTP‑аутентификации.--auth-password <pass>— пароль для SMTP‑аутентификации.--tls— включить TLS/SSL (STARTTLS).--ssl— использовать SSL (порт 465).--header "Name: Value"— добавить пользовательский заголовок.--body <текст>— тело письма.--attach <файл>— прикрепить файл.--suppress-data— не отправлять тело письма (только заголовки).--quit— завершить сеанс после отправки.--verbose— подробный вывод (отладка).--dump-headers— показать полученные SMTP‑заголовки.
Примеры использования
- Простая отправка письма
swaks --to user@example.com --from me@example.com --server mail.example.com - С TLS и аутентификацией
swaks --to user@example.com --from me@example.com \ --server mail.example.com --port 587 \ --tls --auth --auth-user myuser --auth-password mypass - С SSL (порт 465)
swaks --to user@example.com --from me@example.com \ --server mail.example.com --port 465 --ssl \ --auth --auth-user myuser --auth-password mypass - С пользовательскими заголовками
swaks --to user@example.com --from me@example.com \ --header "X-Custom-Header: Test" \ --header "Subject: Test Email" - С телом письма
swaks --to user@example.com --from me@example.com \ --body "Это тестовое письмо." - С вложением
swaks --to user@example.com --from me@example.com \ --attach /path/to/file.txt - Подробный вывод (отладка)
swaks --to user@example.com --from me@example.com --verbose
Настройка Postfix MTA для отправки сообщений через внешний адрес
Минимальный файл /etc/postfix/main.cf подходящий для наших нужд:
relayhost = [smtp.timeweb.ru]:465
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
smtp_use_tls = yes
smtp_generic_maps = hash:/etc/postfix/generic
myhostname = domain.domain.ru
mydomain = domain.ru
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination = localhost.$mydomain, localhost
compatibility_level = 3.9
inet_protocols = all
mynetworks_style = host
mynetworks = 127.0.0.0/8
mailbox_size_limit = 51200000
mailbox_command =
alias_maps = $alias_database, nis:mail.aliases
alias_database = hash:/etc/aliases
biff = no
recipient_delimiter =
cyrus_sasl_config_path = /etc/postfix/sasl
Файл /etc/postfix/generic:
root events@marop.ru
Файл /etc/postfix/sasl_passwd:
[smtp.timeweb.ru]:465 events@domain.ru:Ev2cODzn6ZcXWl4M
Файлы с hash данными должны быть преобразованы в db формат:
# chmod 600 /etc/postfix/sasl_passwd
# postmap /etc/postfix/sasl_passwd
Проверка работы:
Отправьте тестовое письмо:
echo "Test email body" | mail -s "Test Subject" recipient@example.com
Проверьте логи:
sudo tail -f /var/log/mail.log
Отправьте тестовое письмо:
echo "Test email body" | mail -s "Test Subject" recipient@example.com
Проверьте логи:
sudo tail -f /var/log/mail.log
Примеры для популярных сервисов
Gmail:
relayhost = [smtp.gmail.com]:587
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
В sasl_passwd:
[smtp.gmail.com]:587 your-gmail@gmail.com:your-app-password
Yandex:
relayhost = [smtp.yandex.ru]:587
В sasl_passwd:
[smtp.yandex.ru]:587 your-login@yandex.ru:your-password
Mail.ru:
relayhost = [smtp.mail.ru]:587
В sasl_passwd:
[smtp.mail.ru]:587 your-login@mail.ru:your-password
Краткое описание параметров получившегося конфигурационного файла
Краткое описание параметров конфигурационного файла Postfix
relayhost = [smtp.timeweb.ru]:465
Указывает SMTP‑сервер (smtp.timeweb.ru), через который Postfix будет пересылать исходящую почту. Порт465обычно используется для SMTP с SSL/TLS (SMTPS).smtp_sasl_auth_enable = yes
Включает аутентификацию по протоколу SASL (Simple Authentication and Security Layer) при отправке почты через relay‑хост.smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
Задаёт путь к файлу (/etc/postfix/sasl_passwd), где хранятся учётные данные (логин/пароль) для аутентификации на relay‑хосте. Форматhash:означает, что файл должен быть преобразован в хеш‑таблицу командойpostmap.smtp_sasl_security_options = noanonymous
Запрещает анонимную аутентификацию через SASL — требуются явные учётные данные.smtp_tls_security_level = encrypt
Обязательное использование шифрования (TLS) для всех SMTP‑соединений. Без TLS отправка почты будет заблокирована.smtp_tls_wrappermode = yes
Включает «обёрточный» режим TLS (SMTPS), когда шифрование устанавливается сразу при подключении (на порту 465), а не через командуSTARTTLS.smtp_use_tls = yes
Разрешает использование TLS для SMTP‑соединений (актуально для портов сSTARTTLS, например, 587).smtp_generic_maps = hash:/etc/postfix/generic
Указывает на файл (/etc/postfix/generic), где заданы правила перезаписи адресов отправителя (например, замена локальных адресов на публичные). Форматhash:требует предварительной обработки черезpostmap.myhostname = domain.domain.ru
Имя хоста сервера Postfix, которое будет использоваться в SMTP‑диалогах (например, в командеHELO/EHLO).mydomain = domain.ru
Доменное имя, связанное с сервером. Используется в автоматических подстановках (например, вmyorigin).myorigin = $mydomain
Домен, который добавляется к локальным адресам отправителя (например,user→user@domain.ru).inet_interfaces = loopback-only
Postfix будет слушать SMTP‑соединения только на loopback‑интерфейсе (127.0.0.1), исключая внешние интерфейсы.mydestination = localhost.$mydomain, localhost
Список доменов, для которых Postfix считает себя конечным пунктом доставки почты. Письма на эти домены будут приниматься локально.compatibility_level = 3.9
Указывает уровень совместимости с определённой версией Postfix (в данном случае 3.9). Влияет на поведение некоторых параметров.inet_protocols = all
Postfix будет использовать как IPv4, так и IPv6 для сетевых соединений.mynetworks_style = host
Определяет, какие сети считаются «доверенными» (например, для ретрансляции почты). Значениеhostозначает только локальный хост (127.0.0.1).mynetworks = 127.0.0.0/8
Явный список доверенных сетей (в данном случае — только локальные адреса127.x.x.x).mailbox_size_limit = 51200000
Максимальный размер почтового ящика в байтах (51.2 МБ). Превышение лимита блокирует доставку писем.mailbox_command =
Команда для доставки почты в почтовый ящик. Пустое значение означает использование встроенной доставки Postfix.alias_maps = $alias_database, nis:mail.aliases
Источники для разрешения алиасов (псевдонимов почтовых адресов). Включает локальную базу ($alias_database) и NIS‑сервис (nis:mail.aliases).alias_database = hash:/etc/aliases
Путь к файлу алиасов (/etc/aliases), который должен быть преобразован в хеш‑таблицу черезpostmap.biff = no
Отключает уведомление пользователей о новой почте через протокол Biff (устаревшая функция).recipient_delimiter =
Символ‑разделитель для расширенных адресов (например,user+tag@domain.ru). Пустое значение отключает эту функцию.cyrus_sasl_config_path = /etc/postfix/sasl
Указывает путь к конфигурации SASL (/etc/postfix/sasl), если используется библиотека Cyrus SASL.
Тестирование настроек DKIM/DMAP/SPF
Для тестирования параметров можно использовать сервис https://www.mail-tester.com






