Гид по технологиям

Postfix: отправка почты из командной строки

7 min read Системное администрирование Обновлено 20 Dec 2025
Postfix: отправка почты из командной строки
Postfix: отправка почты из командной строки

Быстрые ссылки

  • Как работает почта из командной строки?

  • Как установить и настроить Postfix

Наличие на сервере возможности отправлять почту — простой и надёжный способ получать уведомления из bash-скриптов, приложений и cron. Почта из командной строки работает почти так же, как обычная электронная почта, и её относительно легко настроить и использовать.

Как работает почта из командной строки?

Когда письмо уходит по сети, оно обычно передаётся по протоколу SMTP (Simple Mail Transfer Protocol). Сервер, который занимается отправкой писем, называется SMTP-сервером. Многие бесплатные почтовые провайдеры (Gmail, Yahoo и другие) предоставляют SMTP-доступ бесплатно — это удобно, потому что обычно достаточно настроить локальный почтовый агент для пересылки писем через такой внешний SMTP.

Локальное приложение, отвечающее за отправку почты, называется Mail Transfer Agent (MTA). MTA общается с внешним SMTP-сервером и доставляет почту. Чтобы MTA мог отправлять письма от вашего имени через сторонний SMTP, его обычно аутентифицируют: достаточно указать логин и пароль (или специальный ключ/пароль приложения). После аутентификации MTA способен отправлять письма от заданной учётной записи.

Важно: если вы планируете рассылать письма конечным пользователям (маркетинг, нотификации большого объёма), большинство бесплатных SMTP-решений не подходит из-за лимитов и репутации отправителя. В этом случае выбирайте сервисы уровня бизнеса (Amazon SES, SendGrid, Mailgun и т.д.) и настраивайте SPF/DKIM/DMARC для домена.

Установка и базовая настройка Postfix

Самое простое решение для отправки почты из командной строки — использовать Postfix как локальный MTA и настроить пересылку через внешний SMTP (например, Gmail). Gmail ограничивает отправку бесплатными лимитами (в описанном примере упоминалось 100 писем в сутки), чего чаще всего достаточно для системных уведомлений. Для больших объёмов используйте Amazon SES, SendGrid или другой SMTP-провайдер.

Postfix может также работать как полноценный SMTP-сервер, принимая входящую почту, но это сложнее настраивать и требует дополнительных шагов для работы с внешними получателями (верификация домена и DNS-записи).

На Debian/Ubuntu устанавливаем Postfix и модуль для SASL-аутентификации:

sudo apt-get install postfix libsasl2-modules

Во время установки Postfix предложит вариант конфигурации. На первом экране выберите “Internet Site” — это настроит Postfix для работы через SMTP.

![/files/3feba0a4-80e5-4bb4-bb18-484f942a724c.png]

Диалог установки Postfix на Debian/Ubuntu.

Далее установщик спросит доменное имя. Домен не обязателен для отправки почты через внешний SMTP: если домен не указан, письма будут исходить от настроенной учётной записи Gmail. Если же вы хотите, чтобы письма приходили от вашего домена (например, alerts@example.com), укажите домен и закончите настройку DNS (SPF/DKIM).

Настройка учётных данных SASL

Postfix хранит данные для аутентификации в файле /etc/postfix/sasl/sasl_passwd. Файл может отсутствовать по умолчанию — создайте его при необходимости:

sudo touch /etc/postfix/sasl/sasl_passwd
sudo chmod 600 /etc/postfix/sasl/sasl_passwd
sudo chown root:root /etc/postfix/sasl/sasl_passwd

Добавьте строку с данными для Gmail:

[smtp.gmail.com]:587 username@gmail.com:password

Примечание: вместо основного пароля Gmail рекомендуется использовать App Password (пароль приложения) — он создаётся в настройках аккаунта Google и требует включённой двухфакторной аутентификации. Пароли приложений можно отозвать в любой момент.

Затем сгенерируйте хеш-таблицу для Postfix:

sudo postmap /etc/postfix/sasl_passwd

Эта команда создаст /etc/postfix/sasl_passwd.db. Ограничьте доступ к обоим файлам:

sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

Конфигурация main.cf

Откройте /etc/postfix/main.cf и найдите параметр relayhost. Укажите SMTP сервера Google:

relayhost = [smtp.gmail.com]:587

В конец файла добавьте настройки SASL и TLS:

# enable SASL authentication
smtp_sasl_auth_enable = yes

# disallow methods that allow anonymous authentication
smtp_sasl_security_options = noanonymous

# where to find sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

# Enable STARTTLS encryption
smtp_use_tls = yes

# where to find CA certificates
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Сохраните файл и перезапустите Postfix:

sudo systemctl restart postfix

Postfix теперь должен быть настроен в качестве системного обработчика почты. Проверить отправку можно командой sendmail:

sendmail recipient@gmail.com

Введите в stdout:

FROM: youremail@gmail.com

SUBJECT: Hello from your server!

This is a test email sent from your server by Postfix.

.

Проверьте входящие (или папку “Отправленные” в вашем почтовом клиенте) и логи:

sudo tail -f /var/log/mail.log

Если вы предпочитаете другой почтовый клиент, можно установить mutt. Он по умолчанию использует Postfix и поддерживает вложения:

echo "email content" | mutt -s "email subject" recipient@gmail.com

Для вложений используйте двойной дефис перед адресатом:

echo "email content" | mutt -s "email subject" -a /path/to/file -- recipient@gmail.com

![/files/1d93e352-c39a-4ed5-8c3b-629838e39f58.png]

Письмо с вложением, отправленное через mutt и Postfix.

Любой выбранный почтовый клиент можно вызывать из скриптов, cron и других автоматических задач.

Безопасность и надёжность: рекомендации

Важно:

Никогда не храните пароли в открытом доступе. Используйте права доступа 600 и владелец root. По возможности применяйте пароли приложений и двухфакторную аутентификацию.

Рекомендации по безопасности и устойчивости:

  • Используйте App Passwords (пароли приложений) вместо основного пароля почты.
  • Включите двухфакторную аутентификацию в аккаунте провайдера почты.
  • Ограничьте права /etc/postfix/sasl_passwd* до 600 и владелец root:root.
  • Включите шифрование STARTTLS (smtp_use_tls = yes).
  • Для отправки большого объёма почты используйте специализированные сервисы с контролем репутации (SES, SendGrid) и настраивайте SPF/DKIM/DMARC для домена.
  • Логи: настройте ротацию логов и мониторинг mail.log для оповещений о сбоях или отскоке почты.

Когда это не работает — распространённые проблемы и решения

  1. Письма не уходят, в логах connection timed out

    • Проверьте, открыт ли исходящий порт 587 на вашем хосте и сетевом экране (firewall). Откройте порт или используйте альтернативный (например, 465 для SMTPS), если провайдер требует.
  2. Ошибка аутентификации

    • Проверьте формат строки в /etc/postfix/sasl_passwd.
    • Убедитесь, что вы выполнили postmap и перезагрузили postfix.
    • Если используете Gmail, создайте App Password и проверьте, включена ли двухфакторная аутентификация.
  3. Письма доставляются в спам

    • Настройте SPF записи для домена, подпишите письма DKIM и добавьте DMARC-политику.
    • Проверьте содержимое письма (агрессивные ключевые слова, отсутствие отписки для рассылок).
  4. Лимиты отправки

    • Бесплатные провайдеры часто ограничивают количество писем в день. Для массовых рассылок используйте специализированные сервисы.
  5. Приложения не используют Postfix

    • Убедитесь, что приложение настроено использовать локальную sendmail или SMTP на localhost. В PHP, например, можно указать sendmail_path или SMTP-параметры.

Альтернативные подходы

  • msmtp или ssmtp — лёгкие SMTP-клиенты для отправки писем через внешний SMTP. Проще в настройке, но менее богаты функциями по сравнению с Postfix.
  • Прямой вызов SMTP из приложения (SMTP-библиотеки в Python, PHP, Go) — полезно, если хотите гибкость и встроенную обработку ошибок.
  • Использовать API провайдера (SendGrid/Mailgun/SES) через HTTPS вместо SMTP — часто надёжнее, быстрее и даёт отчётность.

Краткое сравнение (высокоуровневое):

  • Postfix: гибкий, интегрируется в систему, удобен для многих приложений.
  • msmtp/ssmtp: лёгкие, простые, подходят для одноразовой пересылки.
  • API сервисов: лучший выбор для массовых и мониторируемых отправок.

Контроль качества: тесты и приёмка

Критерии приёмки:

  • Тестовое письмо отправляется и приходит в почтовый ящик получателя.
  • При отправке ошибки отображаются в /var/log/mail.log, и есть понятный способ их отладить.
  • Файлы с паролями ограничены правами root:600.
  • Для рабочих рассылок настроены SPF/DKIM/DMARC или используется доверенный провайдер.

Минимальные тест-кейсы:

  • Отправить простое текстовое письмо через sendmail.
  • Отправить письмо с вложением через mutt.
  • Проверить лог на отсутствие ошибок при отправке.
  • Симулировать отказ сети и убедиться, что ошибки логируются.

Шпаргалка — команды и конфигурация (cheat sheet)

  • Установка: sudo apt-get install postfix libsasl2-modules
  • Создание файла паролей:
sudo touch /etc/postfix/sasl_passwd
echo "[smtp.gmail.com]:587 username@gmail.com:password" | sudo tee /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
  • Перезапуск Postfix: sudo systemctl restart postfix
  • Проверка логов: sudo tail -f /var/log/mail.log
  • Отправка теста: sendmail recipient@gmail.com (затем ввести тело сообщения и точку на отдельной строке)
  • Отправка через mutt: echo “hi” | mutt -s “subj” recipient@gmail.com

План развёртывания для production (мини-методология)

  1. Настройте Postfix в тестовой среде и проверьте отправку на несколько внешних ящиков (разные провайдеры).
  2. Настройте мониторинг логов и алерты (ошибки аутентификации, отказы соединения, очередь почты).
  3. Разверните в staging; протестируйте нагрузку и лимиты.
  4. Перенесите в production; убедитесь, что ключи/пароли находятся в защищённом хранилище и регулярно ротируются.
  5. Для массовой рассылки переходите на специализированный SMTP-провайдер и настраивайте SPF/DKIM.

Роли и контрольный список

Для системного администратора:

  • Установить Postfix и libsasl2-modules.
  • Создать /etc/postfix/sasl_passwd и выполнить postmap.
  • Настроить права и перезагрузить Postfix.
  • Настроить мониторинг mail.log.

Для разработчика:

  • Убедиться, что приложение использует sendmail или localhost:25/587.
  • Проверить отправку тестовых писем из кода.
  • Подготовить обработку ошибок и повторных попыток.

Факты и ключевые значения

  • Порт для STARTTLS: 587.
  • Файлы конфигурации Postfix: /etc/postfix/main.cf, /etc/postfix/master.cf.
  • Файл учётных данных SASL: /etc/postfix/sasl_passwd (+ .db после postmap).
  • Разрешения на файлы паролей: 600, владелец root:root.
  • Ограничение Gmail (в примере): ~100 сообщений в сутки для бесплатных аккаунтов (упомянуто в исходной документации).

Краткий глоссарий (1‑строчные определения)

  • MTA: Mail Transfer Agent — агент, отправляющий почту между серверами.
  • SMTP: протокол транспорта почты (Simple Mail Transfer Protocol).
  • SASL: механизм аутентификации для SMTP.
  • TLS/STARTTLS: методы шифрования каналов связи для почты.
  • DKIM/SPF/DMARC: DNS-записи и политики для подтверждения подлинности отправителя.

Итог

Postfix — надёжный и гибкий способ отправлять системные уведомления и почту из серверных скриптов. Для простых уведомлений достаточно настроить Postfix с пересылкой через Gmail и защитить пароли. Для массовой рассылки и профессионального использования лучше выбирать специализированные сервисы и настраивать DNS‑аутентификацию домена.

Важно:

  • Всегда защищайте файлы с паролями (root:600).
  • Используйте пароли приложений и двухфакторную аутентификацию.
  • Тестируйте и мониторьте отправку писем в логах.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Абстрактный портрет в Photoshop
Дизайн

Абстрактный портрет в Photoshop

Увеличить курсор мыши — инструкции для всех ОС
How-to

Увеличить курсор мыши — инструкции для всех ОС

Как открыть и редактировать файлы Word бесплатно
Офисные приложения

Как открыть и редактировать файлы Word бесплатно

Определить: физический сервер или виртуалка в Linux
Linux

Определить: физический сервер или виртуалка в Linux

Как настроить Alexa News Flash Briefings
Гайды

Как настроить Alexa News Flash Briefings

Удалённые SMS‑команды для Windows через Dropbox и IFTTT
Автоматизация

Удалённые SMS‑команды для Windows через Dropbox и IFTTT