У меня странная ситуация, которую я не мог найти в другом месте. Когда я отправляю почту на rcook на моем локальном компьютере, я вижу это в системном журнале:
Feb 16 20:27:14 linode postfix/pickup[1305]: 326CC4463F: uid=0 from=<root>
Feb 16 20:27:14 linode postfix/cleanup[1524]: 326CC4463F: message-id=<20150217042714.326CC4463F@linode.example.net>
Feb 16 20:27:14 linode postfix/qmgr[1306]: 326CC4463F: from=<root@example.net>, size=302, nrcpt=1 (queue active)
Feb 16 20:27:14 linode postfix/lmtp[1531]: 326CC4463F: to=<rcook@example.net>, orig_to=<rcook>, relay=linode.example.net[private/dovecot-lmtp], delay=0.06, delays=0.04/0.01/0.01/0.01, dsn=5.1.1, status=bounced (host linode.example.net[private/dovecot-lmtp] said: 550 5.1.1 <rcook@example.net> User doesn't exist: rcook@example.net (in reply to RCPT TO command))
Feb 16 20:27:14 linode postfix/bounce[1533]: 326CC4463F: sender non-delivery notification: 3C71844643
Feb 16 20:27:14 linode postfix/qmgr[1306]: 326CC4463F: removed
Похоже, "rcook" превращается в "rcook@example.net" постфиксом. Я использую поисковые запросы mysql для постфикса в моем файле main.cf:
#Virtual domains, users, and aliases
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
Мне нужно добавить пользователя rcook@example.net в мой файл /etc/postfix/mysql-virtual-mailbox-maps.cf. Затем rcook получает почту в / var / mail / rcook, предназначенную для rcook. Другими словами, отправка почты на «rcook» превращается в «rcook@example.net», который затем доставляется обратно на «rcook». Я надеюсь, что кто-нибудь здесь сможет прояснить, что происходит.
Похоже, что rcook - настоящий почтовый ящик:
root@linode (~ ): postmap -q rcook mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
1
и
root@linode (~ ): ls /var/mail/rcook
[Airmail] dovecot-uidvalidity
* amazon and ebay sales dovecot-uidvalidity.54e27e23
Apple Mail To Do Drafts
etc etc etc lots of mailboxes...
rcook@example.net сопоставляется с rcook:
root@linode (~ ): postmap -q rcook@example.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf
rcook
Но это не удастся, если я не добавлю запись virtual_users для rcook@example.net:
date | mail -s 'testing' rcook
У меня вопрос, почему rcook отображается на rcook@example.net? Я думаю, это как-то связано со значением $ mydomain в мире постфиксов, но я не знаю, как это устанавливается.
root@linode (~ ): postconf | grep mydomain
append_dot_mydomain = no
mydomain = example.net
Вот мои нестандартные значения постфикса:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = localhost
myhostname = linode.example.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/dovecot/dovecot.pem
smtpd_tls_key_file = /etc/dovecot/private/dovecot.pem
smtpd_use_tls = yes
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
В / etc / dovecot / нигде нет упоминания example.net. Что тут происходит? Я должен упомянуть, что если я добавлю пользователя rcook@example.net к своим virtual_users, все будет хорошо. Я просто озадачен тем, что происходит как бы под капотом, и зачем нужен этот пользователь, поскольку это просто псевдоним.
Вот что происходит в журнале, когда я добавляю rcook@example.net в свое сопоставление virtual_users:
Feb 17 10:35:55 linode postfix/pickup[8804]: 3D785901CA: uid=0 from=<root>
Feb 17 10:35:55 linode postfix/cleanup[9231]: 3D785901CA: message-id=<20150217183555.3D785901CA@linode.example.net>
Feb 17 10:35:55 linode postfix/qmgr[1619]: 3D785901CA: from=<root@example.net>, size=326, nrcpt=1 (queue active)
Feb 17 10:35:55 linode dovecot: lmtp(9262, rcook@example.net): IX33DwuK41QuJAAAmhsNrQ: msgid=<20150217183555.3D785901CA@linode.example.net>: saved mail to INBOX
Feb 17 10:35:55 linode postfix/lmtp[9233]: 3D785901CA: to=<rcook@example.net>, orig_to=<rcook>, relay=linode.example.net[private/dovecot-lmtp], delay=0.03, delays=0.01/0/0.01/0.01, dsn=2.0.0, status=sent (250 2.0.0 <rcook@example.net> IX33DwuK41QuJAAAmhsNrQ Saved)
Feb 17 10:35:55 linode postfix/qmgr[1619]: 3D785901CA: removed
Позвольте познакомиться с секретом процесса доставки электронной почты в Linux с использованием бинарных файлов sendmail и postfix.
Когда ты бежишь
date | mail -s 'testing' rcook
вы говорите sendmail отправить электронное письмо to rcook, адрес получателя без доменных частей постфиксить. Потому что у вас есть параметр append_at_myorigin = yes
(значение по умолчанию), тогда postfix добавит доменные части к адресу получателя. Добавленным доменом можно было управлять с помощью параметра myorigin
. В вашем случае похоже на содержимое /etc/mailname
был example.net.
Это объясняет, почему postfix изменил ваш адрес получателя на rcook@example.net. Продолжим рассказ ...
Теперь postfix должен решить, куда должно идти электронное письмо. Сначала postfix будет искать virtual_alias_maps
чтобы узнать, должно ли это письмо быть псевдонимом или нет. Поскольку вы определили rcook@example.net с псевдонимом rcook, postfix будет преобразовывать вашу электронную почту в rcook.
Но подождите, у цели-псевдонима нет частей домена, так куда же она денется? Ответ был лгал эта страница руководства и этот ответ. Краткое объяснение: добавленный к постфиксу псевдоним target rcook с myorigin
(очередной раз). Итак, наш псевдоним target был преобразован в rcokk@example.net
.
Но это создаст зацикливание, верно? Электронное письмо было присвоено ему самому?
К счастью, postfix был достаточно умен, чтобы этого избежать. Так как rcokk@example.net
выполнил эти условия
тогда постфикс будет искать rcokk@example.net в virtual_mailbox_maps
.
К сожалению, в вашем первом случае он не найдет его, поэтому postfix его отбросит. Когда вы добавляете запись на virtual_mailbox_maps
postfix с радостью сохранит его через сервисы dovecot LMTP.
Ссылки:
И еще один момент, который я должен упомянуть на случай, если кто-то запутается, как я, о том, почему почта в конечном итоге помещается в / var / mail / rcook /, когда постфикс меняет «rcook» на «rcook@example.net». Это происходит потому, что в /etc/dovecot/conf.d/10-mail.conf у меня есть следующее:
mail_location = maildir:/var/mail/%n:LAYOUT=fs
который удаляет доменное имя. Как только @masegaloeh дал свой превосходный ответ, я смог понять этот последний кусок.