Обработка входящей почты для нескольких получателей в PHP - PullRequest
4 голосов
/ 30 марта 2010

Хорошо, это может занять одну или две минуты, чтобы объяснить:

Я работаю над созданием SMS <> SMS Bridge (например, Teleflip). У меня есть несколько установленных параметров для работы:

  • Dreamhost Webhosting
  • PHP 5 (без PEAR)
  • Postfix
  • MySQL (если необходимо)

То, что у меня сейчас есть, это универсальный адрес электронной почты, который пересылает письмо, отправленное на учетную запись оболочки. Учетная запись оболочки, в свою очередь, перенаправляет ее в мой PHP-скрипт.

Сценарий PHP читает его, удаляет несколько заголовков электронной почты, чтобы убедиться, что он отправляется правильно, а затем пересылает его на номер, указанный в качестве получателя. 5551234567@sms.bridge.gvoms.com, конечно, отправляет SMS на +1 (555) 123-4567.

Это работает очень хорошо, так как я разбираю поле «Кому» и беру только адрес электронной почты, на который оно отправляет. Однако я понял, что я не учел нескольких получателей. Например, электронное письмо, отправленное на номера 5551234567 и 1235554567 (с использованием строки Кому, строки CC или любой их комбинации).

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

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

Кроме того, хотя я сомневаюсь, что это возможно: есть ли способ обрабатывать BCC таким же образом?

Ответы [ 4 ]

2 голосов
/ 30 марта 2010

Если вы проверяете заголовки письма, вы должны найти поле Message-ID (согласно RFC2822 - раздел 3.6.4 ). Таким образом, вы можете проверить, отправили ли вы уже SMS-сообщение с тем же идентификатором сообщения и номером телефона, чтобы предотвратить отправку одного и того же сообщения на один и тот же номер дважды.

1 голос
/ 30 марта 2010

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

0 голосов
/ 31 марта 2010

Хотя у wimvds был лучший ответ здесь, в другом месте я обнаружил, что Dreamhost включает заголовок «X-DH-Original-To» в том, как я запускаю его через систему. Используя это, я могу отправить на каждый номер индивидуально после получения электронного письма, не проверяя его по базе данных. Это также должно работать с Blind Carbon Copy (я не знаю особенностей того, как работает электронная почта, чтобы рассказать вам, как это работает).

0 голосов
/ 30 марта 2010

Глупое грязное решение: проанализировать всех получателей из почты, затем отправить им SMS, а затем поместить их все во временную таблицу с md5 текста сообщения. И проверьте все входящие письма по этой таблице.

...