- Вопрос или проблема
- Информация о ОС
- Версия Postfix
- postconf
- mailq
- После редактирования (postconf -n)
- После редактирования (mailq)
- После редактирования (journalctl -xe)
- Ответ или решение
- Шаги по настройке Postfix
- Конфигурация файла /etc/postfix/main.cf
- Другие важные настройки
- Перезапуск 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
-
Название системной почты (System mail name):
- Это доменное имя вашего сервера или имя хоста. Например, если ваш сервер называется
aoos.homenet.telecomitalia.it
, введіть его. Это значение будет использоваться в качестве домена для отправляемой почты.
- Это доменное имя вашего сервера или имя хоста. Например, если ваш сервер называется
-
Получатели писем для root и postmaster:
- Задайте адреса электронной почты, на которые можно направлять сообщения о системных ошибках и уведомлениях. Обычно это будет ваш собственный адрес электронной почты, например
вашеимя@домен.com
.
- Задайте адреса электронной почты, на которые можно направлять сообщения о системных ошибках и уведомлениях. Обычно это будет ваш собственный адрес электронной почты, например
-
Другие назначения для принятия почты (Other destinations to accept mail):
- Введите ваше полное доменное имя, например
aoos.homenet.telecomitalia.it
, а также добавьтеlocalhost
. Это определит, какие адреса могут принимать почту на этом сервере.
- Введите ваше полное доменное имя, например
-
Принудительное синхронное использование очереди почты (Force synchronous mail queue):
- Рекомендуется оставить "Нет" (No) для улучшения производительности. Если вы не совсем уверены, оставьте значение по умолчанию.
-
Локальные сети (Local networks):
- Обычно этот параметр предустановлен автоматически. Проверьте, чтобы он включал вашу локальную подсеть (например,
127.0.0.0/8
). Если у вас есть другие устройства в сети, вы можете добавить их.
- Обычно этот параметр предустановлен автоматически. Проверьте, чтобы он включал вашу локальную подсеть (например,
-
Размер почтового ящика (Mailbox size):
- Если вы не хотите ограничивать размер почтовых ящиков, укажите значение
0
для неограниченного размера.
- Если вы не хотите ограничивать размер почтовых ящиков, укажите значение
-
Символ расширения локального адреса (Local address extension character):
- Обычно используется
+
(например,user+tag@example.com
).
- Обычно используется
-
Протоколы (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-сервера.