У меня есть конкретная потребность, которая, казалось, может быть реализована с помощью Postfix.
В моем распоряжении 2 почтовых сервера.
Например, у меня есть user.a@domain.com на локальном сервере, и user.b@domain.com управляемый gmail. Если я посылаю письмо на user.a@domain.com, его принимает локальный сервер. Но если я отправляю письмо на user.b@domain.com, я бы хотел, чтобы это письмо было перенаправлено на gmail.
В настоящее время локальная часть работает отлично, однако когда я пытаюсь отправить письмо на user.b@domain.com (пользователь, управляемый gmail), письмо отклоняется: "Адрес получателя отклонен: Пользователь неизвестен в таблице виртуальных почтовых ящиков".
Есть идеи? Вот моя конфигурация main.cf (Postfix)
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/letsencrypt/live/domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/domain.com/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,reject_unknown_helo_hostname
disable_vrfy_command = yes
smtpd_delay_reject = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,reject_invalid_hostname,reject_non_fqdn_hostname,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_sender_domain,reject_rbl_client sbl.spamhaus.org,reject_rbl_client cbl.abuseat.org
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
relay_recipient_maps = hash:/etc/postfix/relay_recipients
transport_maps = hash:/etc/postfix/transport
myhostname = domain.com
alias_maps = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.ovh.net, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_milters = inet:localhost:12301 inet:localhost:54321
non_smtpd_milters = inet:localhost:12301 inet:localhost:54321
Содержание файла relay_recipients :
user.b@domain.com
Содержание транспортного файла
user.b@domain.com relay:[smtp.google.com]:587
* local
Возможно ли это?
Моя новая конфигурация:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/letsencrypt/live/maws.fr/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/maws.fr/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_auth_enable = yes
smtp_sender_dependent_authentication = yes
smtp_use_tls = yes
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_sasl_security_options = noanonymous
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,reject_unknown_helo_hostname
disable_vrfy_command = yes
smtpd_delay_reject = yes
transport_maps = hash:/etc/postfix/transport
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
myhostname = vps42.ovh.net
alias_maps = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname localhost.$mydomain localhost $mydomain
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
relayhost = [smtp.gmail.com]:587
inet_protocols = ipv4
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = hash:/etc/postfix/transport mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_milters = inet:localhost:12301 inet:localhost:54321
non_smtpd_milters = inet:localhost:12301 inet:localhost:54321
Содержание транспортного файла:
user.b@domain.com relay:[smtp.gmail.com]:587
Теперь, когда я отправляю письмо на user.a@domain.com (мой локальный пользователь), оно управляется в local. Если я отправляю письмо на user.b@domain.com (управляемый gmail), я получаю свое письмо (победа!), но оно отправляется в цикле (печально...) :
postfix/smtp[6097]: A601C44494: to=<user.b@domain.com>, relay=smtp.gmail.com[142.251.4.108]:587, delay=2.3, delays=0.38/0.03/1.3/0.51, dsn=2.0.0, status=sent (250 2.0.0 OK 1622552412 j10sm9603207ilk.87 - gsmtp)
postfix/smtp[6097]: 2CC4844494: to=<user.b@domain.com>, relay=smtp.gmail.com[173.194.76.108]:587, delay=1.1, delays=0.42/0/0.3/0.34, dsn=2.0.0, status=sent (250 2.0.0 OK 1622552415 o3sm3206340wrm.78 - gsmtp)
(небольшая часть логов, это результат отправки, полный лог: https://mclo.gs/wOo6BFB)
Я отправил письмо с user-test@orange.com на user.b@domain.com, и после цикла появляется отправка с user.b@domain.com на user.b@domain.com
Есть идеи?
Где ваши relay_domains
? Все, что у вас есть в $ mydestination
, - это имя вашего локального сервера.
Согласно базовой конфигурации README :
ВАЖНО: Если ваш компьютер является почтовым сервером для всего домена, вы также должны указать $ mydomain.
Example 2: domain-wide mail server.
/etc/postfix/main.cf:
mydestination = $myhostname localhost.$mydomain localhost $mydomain
Если вы не собираетесь указывать $ myhostname
в качестве полного доменного имени (по умолчанию Postfix извлекает $ mydomain
, удаляя первую часть), вам лучше не указывая $ myhostname
, а вместо этого укажите $ mydomain
, поскольку Postfix будет извлекать для вас имя хоста из этого (более подробная информация в README базовой конфигурации).
Затем для транспортного файла необходимо убедиться, что, если вы используете relay
на своей транспортной карте, вы установили $ relayhost
с адресатом Gmail и имели действительные учетные данные в sasl_passwd
для него.
В этом руководстве есть полезная информация по настройке $ relayhost
и sasl_passwd
: https://www.linuxbabe.com/mail-server/postfix-transport- map-relay-map-flexible-email-delivery
Кроме того, я достаточно старомоден, я бы также хотел явно указать свой домен в transport_maps
, если я разделяю получателей:
user.b@domain.com smtp:[smtp.google.com]:587
domain.com local