Skip to main content

DSN: уведомление о статусе доставки для электронной почты SMTP

Delphi. Synapse. Уведомление о доставке письма (Июль 2025)

Delphi. Synapse. Уведомление о доставке письма (Июль 2025)
Anonim

Даже краткий обзор протокола SMTP заставит вас заметить, что помимо обычного HELO существует также EHLO, что делает расширенный SMTP-сервер рекламирует свои возможности за пределами оригинального стандарта. Один из них - DSN. DSN? Достаточно ли ДНК и ДДТ?

Утверждать, что электронная почта ненадежна, что кто-то должен " … лучше кормить свой сервер; он съел мою почту … «Это не редкость, но нет оснований для поддержки этих подозрений.

Доставка S ОСТОЯНИЕ N otification существует примерно с RFC 821 (с 1982 года). Как только часть DATA протокола SMTP будет завершена, и сервер примет электронное письмо для доставки, он несет за это ответственность. Если по какой-либо причине он не сможет получить доступ к получателю, он должен отправить его обратно с уведомлением об ошибке первоначальному отправителю. Это привело к некоторой неясной электронной почте.

Кроме того, эта старая конвенция означала, что либо вы получили сообщение об ошибке, либо получили ничего такого в этом случае вы знали ничего такого : письмо, возможно, прибыло, или оно может не быть. Сообщения об ошибках во многих случаях были столь же полезны, как и сообщения об ошибках. Поскольку электронная почта становится все более важной, это уже не является удовлетворительным (как если бы это было раньше).

Расширения DSN для SMTP

RFC 1891 предлагает некоторые расширения для протокола SMTP, которые должны привести к созданию более надежной и более удобной системы DSN. Это набор расширений команд MAIL и RCPT.

Нет EHLO, нет развлечений

Во-первых, мы должны убедиться, что сервер поддерживает DSN. Таким образом, мы должны сказать ему EHLO и внимательно слушать. Если он отвечает DSN где-то в списке функций, мы можем предположить, что он сможет обслуживать наши запросы. Если нет, то нет: мы можем попробовать другой сервер или просто вернуться к электронной почте без DSN. Например:

220 larose.magnet.at ESMTP Sendmail 8.8.6 / 8.8.6; Вс, 24 авг 1997 18:23:22 +0200EHLO localhost250-larose.magnet.at Здравствуйте, localhost 127.0.0.1, рад познакомиться с вами250-EXPN250-ГЛАГОЛА250-8BITMIME250-РАЗМЕР250-уведомление о доставке250-ONEX250-ETRN250-XUSR250 ПОМОЩЬ

К счастью, среди прочего мы находим DSN.

Расширения отправителя DSN

Следующей командой обычно является MAIL FROM. С DSN это ничем не отличается. Но есть два дополнительных варианта, которые вы можете задать: RET и ENVID.

Параметр RET был довольно произвольно помещен в команду MAIL, но он подходит здесь, как и в другом месте. Цель состоит в том, чтобы указать, сколько из вашего исходного сообщения должно быть возвращено в случае сбоя доставки. Допустимые аргументы: FULL и HDRS. Первое означает, что полное сообщение должно быть включено в сообщение об ошибке, HDRS сообщает серверу о возврате заголовков неудавшейся почты. Если RET не указан, сервер должен делать что делать. В большинстве случаев HDRS будет значением по умолчанию.

ENVID действительно принадлежит отправителю, поскольку она или (скорее) ее почтовый клиент будет единственным, кто использует это идентификатор конверта , Его цель - сообщить отправителю, которому отправлено письмо с возможным сообщением об ошибке. Формат этого идентификатора в основном оставлен для воображения отправителя. Мы не будем использовать ENVID в нашем примере:

ПОЧТА ОТ: [email protected] RET = HDRS250 [email protected] … Отправитель ok

По-видимому, мы хотим только вернуть заголовки в наш DSN.

Расширения получателей DSN

RCPT TO: получает также свою долю расширений: NOTIFY и ORCPT.

NOTIFY - настоящее сердце DSN. Он сообщает серверу когда для отправки уведомления о состоянии доставки. Первое возможное значение NEVER означает, что ни при каких обстоятельствах DSN не должен возвращаться отправителю. Это невозможно без DSN. Тогда есть УСПЕХ, который уведомит вас, когда ваша почта прибудет в пункт назначения. FAILURE является аналогом SUCCESS: DSN поступит, если во время доставки произошла ошибка. Последним вариантом является DELAY: вы будете уведомлены о необычной задержке доставки, но фактический результат доставки (успех или неудача) еще не решен. НИКОГДА должен быть единственным аргументом, если он указан, остальные три могут отображаться в списке, разделенных запятой. УСПЕХ И НЕИСПРАВНОСТЬ составляют очень сильную команду, сообщающую вам (почти) в любом случае, что случилось с вашей почтой.

Целью ORCPT является сохранение оригинал получатель сообщения электронной почты, например, если он перенаправляется на другой адрес. Аргументом для этого параметра является адрес электронной почты исходного получателя вместе с типом адреса. Сначала вводится тип адреса, затем точка с запятой и, наконец, адрес. Например:

RCPT TO: [email protected] NOTIFY = FAILURE, DELAY ORCPT = rfc822; [email protected]250 [email protected] … Получатель ok (будет стоять в очереди)

За этим следует ДАННЫЕ, как мы ее знаем, и, надеюсь, уведомление о статусе доставки уведомляет вас об успехе.

Работает ли DSN?

Конечно, вся эта красота, и она будет работать, только если почтовые транспортные агенты от отправителя до получателя поддерживают DSN. Когда-нибудь они будут.