Postfix + Dovecot, поток выполнения Sieve и автоответчик

Я использую 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 доменная часть была правильной виртуальный домен отправителя. From Apple mail

Но из Dovecot/Sieve message-id доменная часть была hostname моего сервера. From sieve vacation

Я не знаю, почему это происходит. Но я предполагаю, что это может быть из-за того, что доменное имя было изменено? В рабочем примере из программы Apple Mail это был корректный виртуальный домен отправителя. Но в автоответчике sieve было изменено реальное имя хоста моего сервера.

Еще один журнал Postfix из /var/log/mail.log

postfix/cleanup[1329]: EE83F333699: message-id=<dovecot-sieve-1623257247-953496-0@HOSTNAME>

PS: У меня всего несколько дней опыта работы с Postfix, Dovecot и несколько часов опыта работы со скриптом sieve. Я такой новичок. Надеюсь, мой вопрос и цель были достаточно ясны. Спрашивайте меня о чем угодно, если вам нужна дополнительная информация.

2
задан 9 June 2021 в 20:43
2 ответа

Я исправил это, добавив аббревиатуру «Re:» перед строкой темы. Похоже, что GMail создаст новую историю разговоров, если тема будет изменена.

Идентификатор сообщения не проблема. Также я не использовал плагин Sieve vacation для ответа. Вместо этого плагин sieve_extprograms и направьте его в сценарий оболочки, а затем отправьте curl на мой сервер NodeJS.

0
ответ дан 28 July 2021 в 12:33

Почему вы не используете постфиксные пользовательские ответы? Не уверен, будет ли изменен идентификатор сообщения, но попробуйте.

В main.cf smtpd_recipient_restrictions сконфигурируйте

 check_recipient_access hash:/path/custom_replies

Затем в / path / custom_replies

ping@example.com   REJECT    Custom message

И сделайте postmap для этого файла

С уважением

0
ответ дан 28 July 2021 в 12:33

Теги

Похожие вопросы