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

Что может привести к тому, что пользователь получит повторяющиеся электронные письма?

Один из наших клиентов получает дубликаты электронных писем от нашего приложения, хотя, насколько я могу судить по журналам приложения и SMTP, мы отправляем их только один раз.

Каким образом электронное письмо может дублироваться между отправкой и получением?

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

2012-02-16 17:54:45 127.0.0.1 portal PORTAL 127.0.0.1 MAIL +FROM:<notifications@mycompany.com> 250 0 59 46
2012-02-16 17:54:45 127.0.0.1 portal PORTAL 127.0.0.1 RCPT +TO:<dustinc@redacted.com> 250 0 33 30
2012-02-16 17:54:45 127.0.0.1 portal PORTAL 127.0.0.1 DATA <PORTAL6hNo6j3wsGSaV0002e91c@portal.mycompany.com> 250 0 140 10654

а затем (я предполагаю) ответ от самого целевого почтового сервера несколькими строками позже:

2012-02-16 17:54:45 208.186.207.146 OutboundConnectionResponse PORTAL - - 220+smtp.redacted.com+ESMTP+Service+ready 0 0 41 0
2012-02-16 17:54:45 208.186.207.146 OutboundConnectionCommand PORTAL - EHLO portal.mycompany.com 0 0 4 0
2012-02-16 17:54:45 208.186.207.146 OutboundConnectionResponse PORTAL - - 250-Requested+mail+action+okay,+completed 0 0 41 0
2012-02-16 17:54:45 208.186.207.146 OutboundConnectionCommand PORTAL - MAIL FROM:<notifications@mycompany.com>+SIZE=10998 0 0 4 0
2012-02-16 17:54:45 208.186.207.146 OutboundConnectionResponse PORTAL - - 250+Requested+mail+action+okay,+completed 0 0 41 0
2012-02-16 17:54:45 208.186.207.146 OutboundConnectionCommand PORTAL - RCPT TO:<dustinc@redacted.com> 0 0 4 0
2012-02-16 17:54:46 208.186.207.146 OutboundConnectionResponse PORTAL - - 250+Requested+mail+action+okay,+completed 0 0 41 0
2012-02-16 17:54:46 208.186.207.146 OutboundConnectionCommand PORTAL - DATA - 0 0 4 0
2012-02-16 17:54:46 208.186.207.146 OutboundConnectionResponse PORTAL - - 354+Start+mail+input;+end+with+<CRLF>.<CRLF> 0 0 44 0

(… Затем проходит несколько секунд, пока…)

2012-02-16 17:54:50 208.186.207.146 OutboundConnectionResponse PORTAL - - 250+Requested+mail+action+okay,+completed 0 0 41 0
2012-02-16 17:54:50 208.186.207.146 OutboundConnectionCommand PORTAL - RSET - 0 0 4 0
2012-02-16 17:54:50 208.186.207.146 OutboundConnectionResponse PORTAL - - 250+Requested+mail+action+okay,+completed 0 0 41 0

Я видел это в двух случаях.

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

В любом случае вам понадобятся заголовки сообщений для диагностики проблемы.

На почтовом сервере клиента могут быть определенные правила («Транспортные правила» - это номенклатура, если это сервер Exchange), которые необъяснимым образом дублируют вашу входящую электронную почту. Вам нужно будет сообщить об этом клиенту.

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