Я пытаюсь настроить почтовый сервер с помощью этого статья. В основном с использованием postfix и dovecot.
У меня есть тестовая установка, которая работает, но я не понимаю некоторых (многих) вещей и пытаюсь исправить это перед переносом.
Из многих вещей это наиболее сбивает с толку: я не понимаю, как работает вторая часть параметров $ virtual_mailbox_maps.
У меня в main.cf есть следующее:
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox-users
Мой / etc / postfix / virtual-mailbox-users выглядит так
user@domain1.com user@domain1.com
user@domain2.com user@domain2.com
etc, etc.
Во-первых, где я могу найти документацию по второму параметру формата user@domain1.com, большинство форматов имеют форму файла или каталога (как в / a / b / c).
Если я заменю второй параметр чем-то другим, например,
user@domain1.com /tmp/foo
тогда я могу отправить письмо на user@domain1.com, но не с адреса, что приведет к:
Мой второй вопрос: SMTP использует $ virtual_mailbox_maps? (И почему, если адрес электронной почты уже указан в качестве ключевого параметра?). Dovecot использует $ virtual_mailbox_maps?
(У меня есть еще много вопросов, но это может помочь мне разобраться в некоторых. Например, могу ли я доставить всю почту на адрес user@domain*.com на один из почтовых ящиков, скажем, на user@domain1.com?)
(Извините за декларативный характер названия, мой оригинал начинался с «Как сделать», но был отклонен.)
Я провел эксперимент, в котором заменил запись $ virtual_mailbox_maps, например, на user@domain1.com OK
, и доставка работала, но отправить письмо не удалось (с Адрес отправителя отклонен: не принадлежит пользователю). Итак, правая часть (значение) имеет значение. Это был мой первый вопрос. (Я читал различные документы, описывающие формат и т. Д., Но не могу найти ничего, что конкретно говорило бы о взаимодействии с SMTP.
Дополнение: Спасибо @masegaloeh за отслеживание этого. Соответствующая конфигурация выглядит следующим образом, и "поиск в Google" smtpd_sender_login_maps
объясняет остальное.
root@generic:/etc/postfix# postconf -n| grep smtpd_sender
smtpd_sender_login_maps = $virtual_mailbox_maps
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch
Когда postfix получает входящую почту, в основном это можно разделить на три процесса:
На основе двух описанных выше процессов параметр virtual_mailbox_maps имеет (как минимум) две функции:
reject_unauth_destination
называется.$virtual_mailbox_base
безоговорочно добавляется к этому пути, поэтому абсолютный путь к хранилищу maildir $virtual_mailbox_base$virtual_mailbox_maps
.Вторая функция используется только в том случае, если вы настроили postfix для отправки электронной почты на адрес virtual
Агент доставки. Основываясь на учебнике, который вы опубликовали выше, postfix будет использовать dovecot
агент доставки вместо virtual
.
virtual_transport = dovecot
Потому что это Dovecot-Ida кто доставит письмо, тогда virtual_mailbox_maps
не использовался на этом этапе (хранение электронной почты). Вместо конфигурации постфикса dovecot будет использовать этот параметр
mail_location = maildir:/var/mail/vmail/%d/%n/mail:LAYOUT=fs
чтобы определить, где хранить электронное письмо.
Где документально подтверждено, что формат файла $ virtual_mailbox_maps - "адресный адрес" и что второй должен совпадать с первым для работы SMTP (нота: Это основано на моих эмпирических наблюдениях)?
Параметр virtual_mailbox_maps
должен состоять из одного или нескольких таблицы поиска. . Все справочные таблицы Postfix хранят информацию в виде пар (ключ, значение). Так вот почему virtual_mailbox_maps
Файл состоит из двух столбцов: левая сторона для ключа, а правая для значения.
Большинство справочных таблиц Postfix используются для поиска информации. Например, агент виртуальной доставки использует virtual_mailbox_maps
найти путь к почтовому ящику получателя. Таким образом, в правой части вашей хеш-таблицы должен быть указан путь.
Однако с некоторыми таблицами Postfix нужно знать, только если ключ поиска существует . Любой непустой результат поиска здесь можно использовать значение: результат поиска не используется. Например, smtpd использует virtual_mailbox_maps
чтобы проверить, существует ли получатель.
На самом деле вы можете поместить любую запись в правую часть virtual_mailbox_maps
поскольку постфикс не будет его использовать. В этом случае нет такого формата, как «адрес адрес».
Когда я заменил
$virtual_mailbox_maps
запись с помощью, например, user@domain1.com ОК, доставка работала, но отправка электронной почты не удалась (с Адрес отправителя отклонен: не принадлежит пользователю)
Это потому, что у вас есть этот параметр в main.cf
smtpd_sender_restrictions = reject_unknown_sender_domain,
reject_sender_login_mismatch
smtpd_sender_login_maps = $virtual_mailbox_maps
Когда у тебя есть reject_sender_login_mismatch
и smtpd_sender_login_maps
на нем postfix проверит, ваше имя пользователя SASL сопоставлен с отправителем, указанным при отправке электронного письма. Итак, формат smtpd_sender_login_maps = $virtual_mailbox_maps
должен состоять из:
my.real.email@example.com my.sasl.username@example.com
В вашем случае my.real.email@example.com = my.sasl.username@example.com, поэтому вам нужно указать «адрес-адрес» в своем $virtual_mailbox_maps
.
Конечно, вы можете предоставить smtpd_sender_login_maps
с другим столом с virtual_mailbox_maps
. Но автор статьи решил их объединить. Возможно, причина в том, что вам нужно изменить только один файл для добавления / удаления действительного получателя.