URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8347
[ Назад ]

Исходное сообщение
"как проверить, что exim отослал письмо?"

Отправлено user11 , 10-Июл-09 23:40 
Привет. Пользуюсь MTA exim4 и библиотекой-клиетом jwsmtp в Debian Lenny. После создания и отправки письма, exim может ответить 250 OK <HASH>. Но письмо иногда реально НЕ уходит. В логах можно посмотреть, что сообщение freezed или ещё что-то, из-за несуществующего обратного адреса или ещё что. По-мойму это жутко не удобно: я получаю 250 в ответ, но письмо не уходит. Как я могу программно проверить (через общение с MTA, localhost:25, естественно), что письмо РЕАЛЬНО ушло? Может, возможно как-то использовать ту строку <HASH>, которую exim возвращает вместе с кодом 250? Спасибо.

Содержание

Сообщения в этом обсуждении
"как проверить, что exim отослал письмо?"
Отправлено angra , 12-Июл-09 11:48 
Во время SMTP сессии MTA отвечает 250 OK <HASH>, если письмо прошло его собственные стандрты и он положил его в очередь. Однако при отсылке письма из очереди могут возникнуть совсем другие проблемы, узнать о которых можно только из логов, но не как не из SMTP запросов. Читайте внимательно сообщение об ошибке в логе и исправляйте вашу конфигурацию.

"как проверить, что exim отослал письмо?"
Отправлено me , 12-Июл-09 23:42 
>Во время SMTP сессии MTA отвечает 250 OK <HASH>, если письмо прошло его собственные стандрты и он положил его в очередь. Однако при отсылке письма из очереди могут возникнуть совсем другие проблемы, узнать о которых можно только из логов, но не как не из SMTP запросов. Читайте внимательно сообщение об ошибке в логе и исправляйте вашу конфигурацию.

т.е. если логгирование отключено, то я вообще никак не узнаю, ушло ли письмо?? Разве это правильно? Странно получается, согласитесь - я прошу программу оправить письмо, она отвечает 250 OK, и всё, далее её действия совершенно закрыты, и отправила ли она письмо невозможно узнать... бред какой-то честно говоря.


"как проверить, что exim отослал письмо?"
Отправлено angra , 13-Июл-09 00:31 
Ну напишите свой rfc, который бы описывал ваше видение работы MTA. Потом почитайте к нему комментарии, возможно узнаете о себе что-то новое. Можете даже попробовать ваш rfc реализовать в виде своего MTA, предложите его другим, узнайте о себе еще больше.

"как проверить, что exim отослал письмо?"
Отправлено user11 , 13-Июл-09 01:57 
>Ну напишите свой rfc, который бы описывал ваше видение работы MTA. Потом
>почитайте к нему комментарии, возможно узнаете о себе что-то новое. Можете
>даже попробовать ваш rfc реализовать в виде своего MTA, предложите его
>другим, узнайте о себе еще больше.

похоже что для отсылки писем придётся писать свой MTA. Ладно, всё равно спасибо за помощь :)


"как проверить, что exim отослал письмо?"
Отправлено DeadMustdie , 13-Июл-09 17:19 
Процесс передачи почты носит многоуровневый характер, и задача проверки "что письмо реально ушло" в общем случае толком не решается.

В типовом случае письмо проходит (с некоторыми вариантами) следующие этапы:
  1. приём локальным MTA, помещение в локальную очередь
  2. пересылка на smarthost, имеющий доступ в Internet, помещение в очередь на smarthost
  3. передача на один из MX-серверов, ответственных за обработку почты домена, помещение в очередь MX-сервера
  4. передача с MX-сервера на подчинённый сервер, обеспечивающий доступ для пользователей почты, помещение в почтовый ящик пользователя
  5. приём почты клиентским программным обеспечением

На любой из стадий письмо может быть отброшена как спам, заблокировано или задержано. Локальный MTA имеет при этом информацию только о шагах 1 и 2, причём SMTP-клиент "видит" только результат шага 1.

Строго говоря, на указанный в сообщении обратный адрес при возникновении проблем обязательно отправляется отчёт об ошибке доставки. Можно попробовать обработать такие отчёты.

Алгоритм доставки почты оптимизирован для ситуации, когда поток почты порождается живыми людьми, а проблемы с доставкой решаются не менее живыми людьми - сисадминами.

Что касается конкретно описанной проблемы (несуществующий обратный адрес), то она решается установкой правильного обратного адреса.


"как проверить, что exim отослал письмо?"
Отправлено me , 13-Июл-09 17:24 
>Строго говоря, на указанный в сообщении обратный адрес при возникновении проблем обязательно
>отправляется отчёт об ошибке доставки. Можно попробовать обработать такие отчёты.

Строго говоря, это зависит от настроек DSN. Такой отчёт может и не приходить.

>Что касается конкретно описанной проблемы (несуществующий обратный адрес), то она решается установкой
>правильного обратного адреса.

Это просто одна из возможных проблем. Мне нужно программно проверить реально ли ушло письмо. С помощью SMTP либо ESMTP (ETRN поможет ли?)


"как проверить, что exim отослал письмо?"
Отправлено DeadMustdie , 13-Июл-09 17:44 
>Строго говоря, это зависит от настроек DSN. Такой отчёт может и не
>приходить.

В Интернете встречается много неправильно настроенных серверов.
И с этим действительно нужно жить :)

>Это просто одна из возможных проблем. Мне нужно программно проверить реально ли
>ушло письмо. С помощью SMTP либо ESMTP (ETRN поможет ли?)

Сперва имеет смысл сформулировать, что же такое "реально ушло"?
Добралось на smarthost? Поступило на ответственный MX? Или дошло
до локального ящика адресата?


"как проверить, что exim отослал письмо?"
Отправлено me , 13-Июл-09 18:11 
>Сперва имеет смысл сформулировать, что же такое "реально ушло"?
>Добралось на smarthost? Поступило на ответственный MX? Или дошло
>до локального ящика адресата?

Прошло ли письмо успешно все стадии, которые мы в состоянии определить программно на своей машине, откуда посылаем письмо. Если мы НИКАК не можем определить, что письмо дошло
до локального ящика адресата, но можем определить что письмо 100% пришло на ответственный MX, то считаем это успешной посылкой. Хотя бы так.


"как проверить, что exim отослал письмо?"
Отправлено DeadMustdie , 13-Июл-09 19:07 
>Прошло ли письмо успешно все стадии, которые мы в состоянии определить программно
>на своей машине, откуда посылаем письмо. Если мы НИКАК не можем
>определить, что письмо дошло
>до локального ящика адресата, но можем определить что письмо 100% пришло на
>ответственный MX, то считаем это успешной посылкой. Хотя бы так.

Тогда путей два:

(1) взаимодействовать напрямую с ответственным MX-сервером

(2) анализировать протоколы локального SMTP-сервера на предмет изменения состояния доставки сообщений

Для второго варианта при работе с exim достаточно смотреть в mainlog.


"как проверить, что exim отослал письмо?"
Отправлено me , 13-Июл-09 23:26 
>[оверквотинг удален]
>>ответственный MX, то считаем это успешной посылкой. Хотя бы так.
>
>Тогда путей два:
>
> (1) взаимодействовать напрямую с ответственным MX-сервером
>
> (2) анализировать протоколы локального SMTP-сервера на предмет изменения состояния доставки сообщений
>
>
>Для второго варианта при работе с exim достаточно смотреть в mainlog.

Поможет ли ETRN из ESMTP?


"как проверить, что exim отослал письмо?"
Отправлено DeadMustdie , 15-Июл-09 09:43 
>Поможет ли ETRN из ESMTP?

Насколько я понимаю - нет.


"как проверить, что exim отослал письмо?"
Отправлено svn , 15-Июл-09 14:43 
>Привет. Пользуюсь MTA exim4 и библиотекой-клиетом jwsmtp в Debian Lenny. После создания и отправки письма, exim может ответить 250 OK <HASH>. Но письмо иногда реально НЕ уходит.

Если это так важно, надо использовать MQ вместо email. Там и проверки, и гарантии доставки ))