Проблема с программой Почта на 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