2011-03-29 73 views
5

我需要做下面的事情,我想知道是否有人做過類似的事情,如果是的話,他們做了什麼。使用python處理動態電子郵件地址

我需要編寫一個程序來處理不同客戶端的傳入郵件,處理它們,然後根據郵件地址做一些事情(添加到數據庫,回覆等)。

讓這個更具挑戰性的事情是電子郵件地址不是靜態的,它們是動態的。例如。電子郵件會是這樣的。 [email protected]。在這個例子中,電子郵件按客戶端使用動態子域進行分組,這將是'dynamic-subdomain1'。客戶將擁有自己的分配給他們的子域。每個客戶可以在其子域下創建自己的電子郵件地址,併爲該電子郵件分配一個事件。這些電子郵件地址和子域可以改變這一切,新添加,刪除舊的時間等

因此,舉例來說,如果一個電子郵件進來的電子郵件'[email protected] '然後我需要在數據庫中查找哪個客戶端分配了'dynamic-subdomain1'子域,然後查看哪些事件映射到'dynamic-email1'的電子郵件地址,然後執行事件。我已經完成了事件處理,但我不確定如何將電子郵件地址映射到事件。

由於電子郵件地址是動態的,因此使用基於文件的配置文件來處理這個問題將是一件非常痛苦的事情,所以最好在數據庫中查找。我做了一些研究,並找到了一些類似但不完全相似的項目。我發現的最接近是Zed的肖氏拉姆森項目:http://lamsonproject.org

更多的背景:

  • 我使用python,Django的,Linux操作系統,MySQL的,目前memcached的。

問題:

  1. 有沒有人使用拉姆森做什麼,我希望做的,你是怎麼樣呢?
  2. 是否有任何其他項目可以做類似的事情,也許除了python以外的其他語言?
  3. 我將如何設置我的DNS MX記錄來處理這樣的事情?

感謝您的幫助。

更新: 我做了谷歌應用程序引擎的建議一些更多的研究,它可能工作,但我需要改變太多的東西,它會增加活動的部件太多。我還需要抓住所有電子郵件轉發商,任何人都知道任何好的便宜的?我更願意部署在處理所有電子郵件的系統上。它看起來像人們已經使用postfix監聽端口25並將請求轉發到lamson。這似乎是合理的,我會嘗試一下,看看它是如何發展的。我會更新我的結果。

更新2: 我做了一些更多的研究,我發現一對夫婦的網站,爲我做這樣的事情,所以我打算在他們看未來。

http://mailgun.net

http://www.emailyak.com

回答

1

我已經做了在動態的電子郵件地址了幾個項目的一些工作,但從來沒有在同一時間動態的子域。我對你的問題的想法:

  1. 我從來沒有用過拉姆森,所以我不能對此作出評論。

  2. 我通常使用App Engine's API來接收和處理傳入的消息,它工作得很好。您可以輕鬆地將每個收到的消息轉換爲您自己的服務器上的基本POST請求,例如, To,From,SubjectMessage字段,並處理那些標準的Django。與GAE電子郵件

    一個缺點是必須使用*@yourappname.appspotmail.com,但你可以通過建立一個包羅萬象的電子郵件轉發器*@yourdomain.com指揮一切[email protected]繞開這個問題。這樣可以讓您在自定義域上收到消息並使用GAE處理它們。

    GAE的另一個問題/好處是使用Google的服務器而不是您自己的(至少在電子郵件位)。

  3. 對於子域的問題,你可以嘗試爲MX記錄,這些記錄(理論上)將直接發送到任何的子域相同的服務器(S)的所有郵件設置wildcard DNS。這將使你獲得的所有子域的電子郵件(!是好還是壞 - 尋找出垃圾郵件)

+0

感謝應用引擎建議,我想過應用引擎,但我不知道如何做到這一點與appspotmail.com電子郵件地址限制,我將不得不嘗試爲前鋒,看看它是否會工作。一個問題是,我的正常電子郵件[email protected]也會去appengine。它看起來不像傳入電子郵件的速率限制,這也很好。 – 2011-03-30 13:41:04

+1

是的,我也考慮過「常規」電子郵件問題。也許通配符記錄可以將子域指向例如'app_mail.mydomain.com'和catch-all(而不是裸露的域名)?如果子域問題變得過於複雜,那麼可能值得考慮一個替代語法,比如'user + command @ mydomain.com',如果這樣做更容易。 – 2011-03-30 15:36:14

+0

該應用程序的工作方式現在它大量使用子域名,但我會看看如果我可以解決該問題以嘗試使用[email protected]方法,它確實使事情變得更簡潔,但我猜測我可能必須執行[email protected]或類似的操作,以便我的常規@ mydomain.com電子郵件不會與自動郵件發送到相同的MX服務器。感謝您的建議。 – 2011-04-01 13:21:19

0

對於拉姆森,你嘗試過爲簡單的東西:

@route("(address)@(subdomain).(host)", address=".+", subdomain="[^\.]+") 
def START(message, address=None, subdomain=None, host=None): 
    .... 
相關問題