2017-02-20 22 views
2

Мы отправляем много сообщений электронной почты из нашего приложения Siebel 7.8, и мы хотели бы определить, были ли они успешно доставлены или нет.Как проверить, успешно ли Siebel отправил электронное письмо?

According to the Bookshelf, если SMTP-сервер выключен, диспетчер исходящих сообщений связи пытается отправить сообщение позже, так что это не проблема. Тем не менее, есть еще много вопросов, которые могут вызвать по электронной почте не может быть доставлен, например, опечатка в адресе, приемник достигнув хранения квоты и т.д.

Мы посылаем наши сообщения таким образом:

var ps = TheApplication().NewPropertySet(); 
ps.SetProperty("ActivityId", outboundEmailActivityId); 
ps.SetProperty("CommProfile", commProfile); 
ps.SetProperty("ProcessMode", "Local"); 

var bs = TheApplication().GetService("Outbound Communications Manager"); 
bs.InvokeMethod("SendMessage", ps, psOut); 

Использование ProcessMode = Local позволяет нам обнаружить ошибки. Например, если мы попытаемся отправить сообщение несуществующей учетной записи в том же домене нашего SMTP-сервера, он возвращает 550 Unknown user, а затем 503 Must have sender and recipient first. Outbound Communications Manager создает исключение, и мы его захватываем и обрабатываем.

Однако, если мы отправляем сообщение несуществующей учетной записи в другом домене, наш SMTP-сервер не может знать, что он сбой, и поэтому он возвращает 250 Queued, и наш код успешно завершен. Позже (он может варьироваться от нескольких секунд до нескольких часов), мы получим сообщение об ошибке «Сообщение невозможен», но на данный момент мы знаем только, что исходящее сообщение не удалось, мы не знаем, какой из них.

Есть ли способ, с помощью которого Siebel может обрабатывать эти сообщения «Недостающие сообщения» автоматически?

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

ответ

0

Проблема заключается в том, что SMTP по своей природе не является ни синхронным, ни надежным протоколом (т. Е. В смысле «спроектирован для гарантированной доставки»). Ваш сервер приложений Siebel подключится к назначенному SMTP-серверу и попросит его принять сообщение для доставки, и в то время есть несколько высокоуровневых проверок, которые могут быть выполнены (некоторые из которых вы упомянули, но которые также могут включать в себя применение политики например, проверка того, разрешена ли ваша (возможно, анонимная) идентификация для передачи сообщений внешним доменам). Как только этот разговор заканчивается, вы не можете много сделать, потому что снова все, начиная с этой точки, является асинхронным и не гарантируется для доставки (может быть задействовано любое количество промежуточных агентов ретрансляции, каждый из которых имеет свой собственный потенциал для сбоев с повторением или без него , каждый из которых имеет возможность уважать или игнорировать запросы на доставку или читать квитанции или сообщать о недопустимых получателях, бросать ваше сообщение в папку нежелательной почты или нет и т. д.). Конечно, вы можете попытаться работать с любыми уведомлениями об отказе, которые вы пытаетесь связать с отправителем, но это будет вне контекста вашего отправляемого кода.