2010-03-30 42 views
4

好吧,這可能需要一個或兩個瞬間來解釋:處理傳入郵件到多個收件人在PHP

我正在創建一個電子郵件<>短信大橋(如TeleFlip系統)。我有幾組參數的工作:

  • Dreamhost的虛擬主機
  • PHP 5中(不含PEAR)
  • 後綴
  • MySQL的(如果需要)

我有什麼權利現在,是一個全面的電子郵件地址,用於轉發發送到shell帳戶的電子郵件。 shell帳戶反過來將其轉發給我的PHP腳本。

PHP腳本讀取它,剝去幾個電子郵件標題以確保它正確發送,然後將其轉發給指定爲收件人的號碼。 [email protected]當然會發送短信至+1(555)123-4567。

這很有效,因爲我正在解析收件人字段並只抓取發送給它的電子郵件地址。但是,我意識到我沒有考慮的是多個收件人。例如,發送給5551234567和1235554567的電子郵件(使用「收件人」行,「抄送」行或其任意組合)。

當然,電子郵件的工作方式是我收到兩封收到的郵件,最後分別解析每封郵件,最後5551234567最終得到相同的郵件兩次。

什麼是處理這種情況的最佳方法,以便在TO和CC中指定的每個數字都可以獲得消息的一個副本。

另外,雖然我懷疑它是否可能:有沒有辦法以相同的方式處理BCC?

回答

0

雖然wimvds在這裏有最好的答案,但我在其他地方發現,Dreamhost在我通過系統運行它的方式中包含一個「X-DH-Original-To」頭文件。使用此功能,我可以在收到電子郵件時單獨發送給每個號碼,而無需在數據庫中進行檢查。這也應該與Blind Carbon Copy一起工作(我不知道電子郵件的工作原理足以告訴你這是如何工作的)。

0

愚蠢的骯髒的解決方案:解析郵件中的所有收件人,然後發送他們的短信,然後將他們全部放入臨時表與消息文本的MD5。並檢查所有傳入的郵件對這張桌子。

1

爲什麼不使用諸如imap之類的東西來檢查catch-all郵箱,循環查看郵件,然後在完成後刪除它們?這樣你就不需要轉發他們到一個單獨的帳戶。

+0

這是我用類似的項目所做的。這裏的缺點是我必須使用帶寬連接和滾動IMAP,這是一個很髒,以及有一個cronjob設置爲通過IMAP輪詢。它也使轉發電子郵件髒(或我缺乏知識)。現在我已經設置了它的方式,它將電子郵件直接推送到腳本,並且可以在收到郵件後立即發送。 – Navarr 2010-03-30 19:16:48

2

如果您檢查郵件的標題,您應該找到一個消息ID字段(根據RFC2822 - section 3.6.4)。因此,您可以測試您是否已經爲具有相同消息ID &電話號碼的郵件發送短信,以防止將同一郵件發送給同一號碼兩次。

+0

消息ID始終是靜態的權利? 所以我們可以說我在TO領域有兩個發件人,在CC領域有三個 - 我可以將該消息ID作爲MySQL中的唯一密鑰存儲,然後當我收到其他四封電子郵件時,我會查看如果該ID已經在數據庫中,並且如果它是我可以丟棄它們? – Navarr 2010-03-30 19:18:12

+0

根據RFC它應該唯一匹配一個郵件消息,因此它應該是一致的靜態,你可以放棄具有相同的消息ID的副本。 – wimvds 2010-03-30 19:58:34

+0

我只是跑了一個簡單的測試,它似乎是這種情況!謝謝。 現在,如果只有我可以讓密件抄送工作,但我懷疑可能會發生,因爲,它的密件抄送。 – Navarr 2010-03-30 20:04:18

相關問題