Я использую Postfix и Dovecot LMTP на своем сервере. Мой вопрос заключается в том, как мне создать адрес получателя, отбрасывающего молчание, и автоответчик? Также я хочу изучить поток управления выполнением Postfix и Dovecot.
Это часть моего Postfix main.cf
:
alias_maps = hash:/etc/aliases
# Virtual domains
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 115
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mailbox.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/aliases.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
В моем /etc/aliases
:
devnull: /dev/null
В моем скромном понимании Postfix обрабатывает адрес получателя существует или нет, правильно? Если адрес получателя существует, то он передается в Dovecot LMTP для обработки локальной доставки. Есть ли возможность условного транспорта в Postfix? Например, я хочу создать тестовый почтовый адрес, такой как ping@example.com
. Эта учетная запись является алиасом для devnull
. Моя цель состоит в том, чтобы получатель ping@example.com
молча отбрасывал входящую почту и автоматически отвечал на PONG сообщение отправителю для тестирования. Если адрес получателя не ping@example.com
, то пересылать на Dovecot-lmtp. Я пытался использовать плагин фильтра Dovecot Sieve с расширением vacation для обработки автоответа. Но в mail.log моей системы:
# replaced actual domain name with DOMAIN
postfix/lmtp[13532]: 62EBD333697: to=<devnull@DOMAIN>, orig_to=<ping@DOMAIN>, relay=DOMAIN[private/dovecot-lmtp], delay=538, delays=538/0.02/0.01/0.44, dsn=5.1.1, status=bounced (host DOMAIN[private/dovecot-lmtp] said:
550 5.1.1 <devnull@DOMAIN> User doesn't exist: devnull@DOMAIN (in reply to RCPT TO command))
Таким образом, я полагаю, что плагин Dovecot Sieve filter не работает с несуществующей учетной записью. Можно ли выполнить скрипт Sieve перед проверкой почтового ящика пользователя? Если да, то мне даже не нужно использовать devnull
blackhole alias. Я могу сделать это в моем скрипте Sieve примерно так:
if address :matches "To" "ping@*" {
vacation
:seconds 1
"PONG";
discard;
}
UPDATED:
Я создал пользователя под именем ping
в моей базе данных и получил ответное письмо в моем аккаунте GMail. Но это было не совсем ответное письмо. Это было новое письмо в моем почтовом ящике. Затем я попытался ответить вручную с помощью программы Apple mail GUI. Все работает, как и ожидалось. Затем я захожу в gmail и нажимаю на меню показать оригинал
.
Из message-id
Apple Mail доменная часть была правильной виртуальный домен отправителя.
Но из Dovecot/Sieve message-id
доменная часть была hostname
моего сервера.
Я не знаю, почему это происходит. Но я предполагаю, что это может быть из-за того, что доменное имя было изменено? В рабочем примере из программы Apple Mail это был корректный виртуальный домен отправителя. Но в автоответчике sieve было изменено реальное имя хоста моего сервера.
Еще один журнал Postfix из /var/log/mail.log
postfix/cleanup[1329]: EE83F333699: message-id=<dovecot-sieve-1623257247-953496-0@HOSTNAME>
PS: У меня всего несколько дней опыта работы с Postfix, Dovecot и несколько часов опыта работы со скриптом sieve. Я такой новичок. Надеюсь, мой вопрос и цель были достаточно ясны. Спрашивайте меня о чем угодно, если вам нужна дополнительная информация.
Я исправил это, добавив аббревиатуру «Re:» перед строкой темы. Похоже, что GMail создаст новую историю разговоров, если тема будет изменена.
Идентификатор сообщения
не проблема. Также я не использовал плагин Sieve vacation
для ответа. Вместо этого плагин sieve_extprograms
и направьте его в сценарий оболочки, а затем отправьте curl
на мой сервер NodeJS.
Почему вы не используете постфиксные пользовательские ответы? Не уверен, будет ли изменен идентификатор сообщения, но попробуйте.
В main.cf smtpd_recipient_restrictions сконфигурируйте
check_recipient_access hash:/path/custom_replies
Затем в / path / custom_replies
ping@example.com REJECT Custom message
И сделайте postmap для этого файла
С уважением