Настройка Postfix на локальном компьютере для отправки писем

Вопрос или проблема

Я пытаюсь автоматизировать процедуру, и когда выполняется определенное условие, я хотел бы уведомить пользователя с помощью автоматического письма, используя команду mail.

Дело в том, что сообщения не отправляются, и, насколько я понял, сначала необходимо сделать некоторые настройки.

Дело в том, что когда я выполняю

sudo dpkg-reconfigure postfix

для его изменения, я не совсем уверен, что заполнять.

  • 1 – Первая страница запрашивает имя системной почты
  • 2 – Вторая страница запрашивает почтовые адреса для root и postmaster
  • 3 – Другие назначения для приема почты
  • 4 – Принудительная синхронная почтовая очередь Y/N
  • 5 – Локальные сети (это поле было заполнено заранее)
  • 6 – Размер почтового ящика
  • 7 – Символ расширения локального адреса
  • 8 – Протоколы (ipv6, ipv4) # Я выбрал оба

Но мне действительно нужна помощь с 1, 2, 3, 5, 7, потому что когда я пытаюсь отправить тестовое письмо, я ничего не получаю.

Спасибо заранее.

Обновление:

Информация о ОС

NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"

Версия Postfix

mail_version = 3.4.10

postconf

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 2
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 100
mydestination = aoos.homenet.telecomitalia.it, aoos, localhost.localdomain, , localhost
myhostname = aoos.homenet.telecomitalia.it
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter =
relayhost =
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level = may

mailq

-ID очереди-  --Размер-- ----Время прибытия---- -Отправитель/Получатель-------
DD866CE073F*    2566 Вс Май 10 18:17:10  MAILER-DAEMON
                                         broxigar@aoos

DA34ECE0693*    2493 Пт Май 15 19:08:58  MAILER-DAEMON
                                         broxigar@aoos

D474DCE0692*    2531 Пт Май 15 19:08:58  MAILER-DAEMON
                                         broxigar@aoos

CFCC4CE0690*    2491 Пт Май 15 19:08:58  MAILER-DAEMON
                                         broxigar@aoos

0DC1FCE0738*    2398 Вс Май 10 18:05:51  MAILER-DAEMON
                                         broxigar@aoos

D06F9CE0691*    2497 Пт Май 15 19:08:58  MAILER-DAEMON
                                         broxigar@aoos

3534ECE068E      417 Пт Май 15 17:01:06  broxigar@aoos
(хост mx.<domain_name>.it[130.192.182.65] сказал: 452 4.5.2 Не удалось разрешить домен отправителя. (в ответ на команду MAIL FROM))
                                         userXXX@<domain_name>.it

После редактирования (postconf -n)

# это /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# Добавление .domain - это задача MUA.
append_dot_mydomain = no

# Раскомментируйте следующую строку, чтобы сгенерировать предупреждения о "задержанной почте"
#delay_warning_time = 4h

readme_directory = no

# Смотрите http://www.postfix.org/COMPATIBILITY_README.html -- по умолчанию 2 на
# новых установках.
compatibility_level = 2

# Параметры TLS
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtp_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt

#smtp_tls_CApath=/etc/ssl/certs
#smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
#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

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = aoos.polito.it
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, aoos.polito.it, localhost.polito.it, localhost

#myorigin = $mydomain 
relayhost = [mail.polito.it]:465
#relay_domains = $mydestination
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

После редактирования (mailq)

-ID очереди-  --Размер-- ----Время прибытия---- -Отправитель/Получатель-------
64428CE10EA*    2334 Пт Июн 19 22:55:27  MAILER-DAEMON
                                         broxigar@aoos

После редактирования (journalctl -xe)

Июн 19 22:55:29 aoos postfix/smtp[1158006]: 64428CE10EA: to=<broxigar@aoos>, relay=server.domain.it[<ip_addr>]:465, delay=2, delays=0.01/0/0.03/2, dsn=5.0.0, status=bounced (host server.domain.it[<ip_addr>] сказал: 551 broxigar@aoos не удалось осуществить маршрут к адресу (в ответ на команду RCPT TO))

[Отказ от ответственности: Следующее было полностью протестировано для Postfix v3.5.1 на актуальной установке Arch linux. Устранение неполадок для Postfix v3.4.10 на Ubuntu 20.04 должно быть очень похоже, за исключением (возможно) нескольких путей к файлам, жестко прописанных в main.cf и/или master.cf.

Я вижу параметры, начинающиеся на smtpd_.... Это необходимо только в том случае, если вы хотите, чтобы локальная настройка postfix вашего хоста могла обрабатывать входящую почту. Если вы хотите только отправлять почту через SMTP релей, вы можете закомментировать их.

Ошибка 452: Не удалось разрешить домен отправителя. (в ответ на команду MAIL FROM) userXXX@\<domain_name>.it

Домен вашего локального хоста не разрешен корректно. Судя по редактированию вашего вопроса, он задан неверно. Добавьте следующее или измените свою существующую конфигурацию в /etc/postfix/main.cf:

append_at_myorigin = yes
append_dot_mydomain = ${{$compatibility_level} < {1} ? {yes} : {no}}
tls_append_default_CA = no
inet_interfaces = $myhostname, localhost
                                  # может ускорить ваш процесс отправки, если ваш хост
                                  # является частью подсети с другими хостами.
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = aoos                   # подтвердите, что это выбранное вами локальное имя домена
myhostname = localhost
mynetworks_style = subnet
myorigin = $mydomain
relay_domains = $mydestination
relayhost = [smtp.gmail.com]:465  # << только при использовании gmail в качестве SMTP-сервера.
                                  # Замените на ваш собственный SMTP-сервер. Всегда включайте
                                  # квадратные скобки как показано + опциональный порт.
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
                                  # или используйте 'smtp_tls_CApath = /etc/ssl/certs' как показано вами
smtp_tls_security_level = encrypt # Используйте или 'encrypt', или 'may'
smtp_tls_wrappermode = yes        # Слабо или не документировано, но необходимо при
                                  # использовании TLS с исходящими почтовыми шлюзами Google
smtp_use_tls = yes

В дополнение к вышеуказанному, вам необходимо защитить ваше имя пользователя и пароль для SMTP-шлюза, который вы используете, в /etc/postfix/sasl_passwd. Ниже я привожу пример для smtp.gmail.com:

$ cat /etc/postfix/sasl_passwd
[smtp.gmail.com]:465  <my_username>@gmail.com:<my_passwd>
$ sudo chmod 600 /etc/postfix/sasl_passwd
$ sudo postmap /etc/postfix/sasl_passwd  

РЕДАКЦИЯ #1: Также выполните: $ sudo chown root:postfix /etc/postfix/sasl_passwd*

Я предполагаю, что служба postfix уже включена и запущена. Если она не включена, выполните: sudo systemctl enable postfix.

Перезагрузите параметры конфигурации и перезапустите службу postfix:

$ sudo postfix reload
$ sudo systemctl restart postfix.service

Наконец, попробуйте отправить письмо:

$ touch foobar
$ mail -s "test #<my_test_nbr>" -a foobar <my_external_email> < <(echo "Hello world")
$ journalctl -xe    # сообщите о соответствующих предупреждениях и ошибках   (***EDIT***)
$ mailq             # сообщите о полном выводе

Сообщите, если будут возникать дополнительные проблемы. HTH.


РЕДАКЦИЯ #2:
Я вижу по вашим попыткам отправления почты с помощью postfix, что отправление осуществляется по IPv6. RFC-6724 указывает, что если машина поддерживает оба протокола (где IPv4 и IPv6 работают на одной и той же сетевой инфраструктуре), связь по IPv6 должна пытаться устанавливаться в первую очередь. У вас, вероятно, такая настройка. На сколько я знаю, Google принимает stmp-запросы по IPv6, но только если источник запроса предоставляет обратное имя домена для целей аутентификации. Вы не можете контролировать это со стороны MTA; это в руках вашего провайдера услуг Интернета. Поэтому, если бы я был на вашем месте, я бы сначала попытался наладить отправку по IPv4, а затем уже экспериментировать с IPv6. Для этого, по крайней мере для тестирования с gmail, измените /etc/postfix/main.cf на:

inet_protocols = ipv4

Это не означает, что вы привязаны к IPv4 для всей вашей IP-связи. Есть обходной путь в postfix с использованием transport карт, если вы все равно хотите использовать IPv6, за исключением gmail; это другой вопрос, на который, возможно, вам нужно будет спросить в другом посте.

Ответ или решение

Конфигурация Postfix на локальной машине для отправки писем может показаться сложной задачей, но с правильными шагами все можно настроить. Давайте подробно рассмотрим, какие параметры необходимо задать при запуске sudo dpkg-reconfigure postfix и как исправить возникшие проблемы с отправкой почты.

Шаги по настройке Postfix

  1. Название системной почты (System mail name):

    • Это доменное имя вашего сервера или имя хоста. Например, если ваш сервер называется aoos.homenet.telecomitalia.it, введіть его. Это значение будет использоваться в качестве домена для отправляемой почты.
  2. Получатели писем для root и postmaster:

    • Задайте адреса электронной почты, на которые можно направлять сообщения о системных ошибках и уведомлениях. Обычно это будет ваш собственный адрес электронной почты, например вашеимя@домен.com.
  3. Другие назначения для принятия почты (Other destinations to accept mail):

    • Введите ваше полное доменное имя, например aoos.homenet.telecomitalia.it, а также добавьте localhost. Это определит, какие адреса могут принимать почту на этом сервере.
  4. Принудительное синхронное использование очереди почты (Force synchronous mail queue):

    • Рекомендуется оставить "Нет" (No) для улучшения производительности. Если вы не совсем уверены, оставьте значение по умолчанию.
  5. Локальные сети (Local networks):

    • Обычно этот параметр предустановлен автоматически. Проверьте, чтобы он включал вашу локальную подсеть (например, 127.0.0.0/8). Если у вас есть другие устройства в сети, вы можете добавить их.
  6. Размер почтового ящика (Mailbox size):

    • Если вы не хотите ограничивать размер почтовых ящиков, укажите значение 0 для неограниченного размера.
  7. Символ расширения локального адреса (Local address extension character):

    • Обычно используется + (например, user+tag@example.com).
  8. Протоколы (Protocols):

    • Если ваш сервер поддерживает оба протокола, выберите оба IPv4 и IPv6.

Конфигурация файла /etc/postfix/main.cf

Необходимо убедиться, что файл /etc/postfix/main.cf настроен правильно. Вот несколько важных параметров:

myhostname = aoos.homenet.telecomitalia.it
mydomain = homenet.telecomitalia.it
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8
inet_interfaces = all
inet_protocols = ipv4
relayhost = 

Другие важные настройки

Если вы хотите использовать удаленный SMTP-сервер (например, Gmail), добавьте следующие строки:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes

Затем создайте файл /etc/postfix/sasl_passwd с вашими данными для аутентификации:

[smtp.gmail.com]:587    <ваш_логин>@gmail.com:<ваш_пароль>

После этого выполните следующие команды:

sudo postmap /etc/postfix/sasl_passwd
sudo chown root:postfix /etc/postfix/sasl_passwd*
sudo chmod 600 /etc/postfix/sasl_passwd

Перезапуск Postfix

После всех изменений перезапустите Postfix для применения новых настроек:

sudo systemctl restart postfix

и проверьте журнал ошибок:

journalctl -xe

Отправка тестового письма

Теперь вы можете попробовать отправить тестовое письмо:

echo "Тестовое сообщение" | mail -s "Тест" ваш_адрес@домен.com

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...