Назад | Перейти на главную страницу

Как включить Postfix, чтобы всегда отправлять DSN для аутентифицированных отправителей?

Проблема с программой Почта на MacOS. У него нет возможности запрашивать уведомление о доставке (например, сообщать, что электронная почта была принята почтовым сервером получателя), и сообщения DSN никогда не приходят в ответ на электронные письма от Mail (в MacOS). Очень бесполезно!

Мой постфикс отправляет DSN, когда его запрашивает почтовый клиент. Например, с Thunderbird работает.

Теперь варианты закрыты для этого:

smtpd_discard_ehlo_keywords = etrn, silent-discard

Можно ли всегда отправлять DSN для отправителя (который отправляет электронную почту через этот постфикс)?

Это было бы против того, как Уведомления о доставке (DSN) определены в RFC 3464. DSN в случае успеха отправляется только в том случае, если клиент специально запрашивает его.

Поскольку DSN требует модификации на уровне протокола MAIL FROM или RCPT TO команда, сервер должен сообщить о поддержке DSN. Это происходит, когда сначала объявляется, что сервер поддерживает расширенный SMTP, а затем в ответ на EHLO команда, список поддерживаемых функций включает 250 DSN, например здесь, в последней строке:

<--  220 mail.example.com ESMTP Postfix (Debian/GNU)
-->  EHLO client-198.51.100.123.example.com
<--  250-mail.example.com
<--  250-PIPELINING
<--  250-SIZE 10240000
<--  250-VRFY
<--  250-ETRN
<--  250-STARTTLS
<--  250-ENHANCEDSTATUSCODES
<--  250-8BITMIME
<--  250-DSN

Postfix имеет Поддержка для DSN и варианты для ограничение кто может запросить это. Из введения:

В частности, поддержка DSN дает отправителю электронной почты возможность указать:

  • Какие уведомления отправляются: успех, сбой, задержка или нет. Обычно Postfix информирует отправителя только тогда, когда доставка почты задерживается или когда доставка не удалась.

  • Какой контент возвращается в случае сбоя: только заголовки сообщения или все сообщение.

  • Идентификатор конверта, который возвращается как часть уведомлений о состоянии доставки. Это идентифицирует транзакцию отправки сообщения, и его не следует путать с идентификатором сообщения, который определяет содержание сообщения.

Реализация поддержки DSN включает в себя дополнительные параметры для команд SMTP MAIL FROM и RCPT TO, а также два параметра командной строки Postfix sendmail, которые обеспечивают подмножество функций дополнительных параметров команды SMTP.

Поясним это немного. Обычное простое SMTP-соединение будет продолжаться:

-->  MAIL FROM: sender@example.com
<--  250 2.1.0 Ok
-->  RCPT TO: recipient@example.net
<--  250 2.1.5 Ok

Но с поддержкой и запросом DSN это может быть (в зависимости от того, что запрашивается), например

-->  MAIL FROM: sender@example.com RET=HDRS
<--  250 2.1.0 Ok
-->  RCPT TO: recipient@example.net NOTIFY=FAILURE,DELAY ORCPT=rfc822;recipient@example.net
<--  250 2.1.5 Ok

Вот, RET=HDRS означает, что в автоматический ответ следует добавлять только заголовки, и NOTIFY= указывает, что следует сообщать только о сбоях и задержках. Если бы также было NOTIFY=SUCCESS, отчет был бы отправлен по любому результату, то есть это изменило бы нормальное поведение Postfix. (ORCPT просто добавить исходного получателя.)

Следовательно, сервер просто не должен позволять себе отправлять уведомления о доставке в случае успеха, если они не запрашиваются явно.

Жаль, что Mac OS X Mail не поддерживает эту функцию. Это неудивительно, поскольку этот клиент даже не имеет поддержки графического интерфейса для уведомлений о прочтении. К счастью, уведомление о прочтении - это другой стандарт, который не требует модификации команд SMTP: он работает, добавляя Disposition-Notification-To заголовок к содержимому электронного письма. Это возможно из терминала Mac OS X (добавить, удалить и проверить):

defaults write com.apple.mail UserHeaders '{"Disposition-Notification-To" = "u@example"; }'
defaults delete com.apple.mail UserHeaders
defaults read com.apple.mail UserHeaders