2012-01-13 147 views
2

我在實施以下方案時遇到困難。用戶回覆電子郵件。你如何從用戶電子郵件中獲取數據?

比方說,你有一個網站能夠發送和接收用戶之間的消息。 用戶收到一封電子郵件,通知他在軟件系統上有一條新消息(與實施內容無關)。他可以通過電子郵件發送回覆或登錄網站並使用網站回覆「消息」來回復此消息。

如果用戶只是簡單地回覆電子郵件通知,那麼您(作爲開發人員)如何知道回覆的「消息」(ID)? 我在想信息會被存儲在MIME擴展中。是否將MIME擴展轉換爲消息的回覆?如果是,那麼解決方案可能是查看用戶回覆的原始消息通知的數據。 任何想法?謝謝

回答

3

唯一「可靠」的方法是將這些信息編碼在發件人的地址用戶回覆;你也可以將它放入信息的主題或主體中,並且「希望」用戶不會篡改它。有一個「回覆(message-id)」標題,但很多現有的eMail客戶端不能正確設置標題。

通常的機制是這樣的:創建一個電子郵件別名前綴,並追加一個message-id-code片段到最後;例如,如果是用於採購訂單確認,則可以創建電子郵件別名處理地址,格式爲po-*@example.com,其中*是唯一的消息標識。然後,當您發送消息時,您會在From:Reply To:標頭中輸入適當的地址。 EG:

From: "Purchase Order Confirmation (#1234)" <[email protected]> 
To: "John Doe" <[email protected]> 
Reply-To: "Purchase Order Confirmation (#1234)" <[email protected]> 
Subject: Confirm your order (#1234) 

根據您的郵件服務器,你應該能夠定義一個「分隔符」字符(典型-+),用於分裂的「本地部分」的部分(左@ )的電子郵件地址;通常會有另一種機制將前綴映射到腳本以處理某種形式的所有地址。腳本界面通常非常類似於Web上的CGI,它會發送一些環境變量,並將標準輸入中的消息傳送到本地。如果您的應用程序主要是基於Web的,則可能會發現收集傳入電子郵件正文更加「舒適」,並且將其發送到私有(可能是http://[::1]/getMailReply)處理程序。這可以幫助您更容易地重用現有代碼。

1

我們在我們的服務器上設置了一個catch-all電子郵件地址 - 例如[email protected]。當我們向用戶發送電子郵件時,我們將郵件ID和我們可能需要的任何其他元信息編碼到發件人地址中。你可以混淆這個與否,取決於你的需求是什麼。因此,例如,如果用戶在系統中有一條新消息(其ID100),則我們發送給用戶的電子郵件的發件人地址將類似[email protected]。請確保您使用的任何格式的發件人地址都不會在您的郵件服務器上生成真實的電子郵件地址。

因此,當用戶回覆此消息時,它將發送到您設置的全部收件箱。從這裏開始,您有多種選擇可以處理這封電子郵件。在過去,我們編寫了一項計劃中的小服務,每隔幾分鐘運行一次,並在收件箱中檢查新電子郵件,並按需要處理它們(插入數據庫,發送更多電子郵件等等),並在完成後刪除郵件處理它。這是脆弱的,因爲電子郵件客戶端都有稍微不同的發送電子郵件的方式,並且很難解析那裏的各種客戶端消息。

我們做的第二種方式是通過與http://postmarkapp.com/集成 - 其中有一個即將上市的傳入電子郵件API(我們進入了測試階段)。你可以用同樣的方法設置所有的東西,只要將你的服務器的全部地址轉發到你將用Postmark設置的郵戳地址,然後Postmark完成郵件處理並調用一個你也設置好的webhook與收到的對象一樣。

我強烈推薦郵戳,但即使是土布方法大部分也能有效地工作。

-M

+1

請注意,幾個郵件服務器具有語法(經常用戶+郵箱@某處),允許用戶接收預定用於某個郵箱的郵件。 – 2012-01-13 16:56:31

+0

+1,但在我們執行第一次實施時在我們的服務器上無法使用 – Mustafakidd 2012-01-13 17:29:25

0

只是一個後續到以前的答案,郵戳入境現在生活和公共http://postmarkapp.com/inbound對於發送到你的特殊格式的入站電子郵件地址的每個電子郵件,您會收到一個JSON格式的網絡掛接API調用所有的電子郵件組件,標題,附件都會爲您分類。

相關問題