2012-07-09 50 views
4

我正在處理的Django網站在發送內容更新時發送電子郵件。Django/Python:電子郵件回覆更新到網站

我想添加的功能是用戶可以回覆這些郵件的地方,即對某個主題的評論。這個回覆會在頁面上顯示更新。

什麼是解決這個問題的好方法?有沒有可以放入的模塊?

回答

5

首先第一件事情,你需要能夠接收郵件和在這樣做時調用python函數。有許多方法可以做到這一點:

  • 使用Python的內置poplib定期檢查你的郵箱
  • 一些主機商,Webfaction特別,讓你自動調用Python腳本時,您收到的郵件,通過他們稱之爲mail2script
  • 其他主機推薦使用第三方服務,如MailgunPostmark。這取決於你的需求,真的。

一旦您收到郵件並且能夠在此事件中調用python腳本,它可能很簡單,因爲將註釋添加到您的Django模型中的正確線程。

但是,在考慮構建此功能時,還應考慮如何使其更安全(電子郵件非常容易僞造) - 您不希望隨機的人員能夠將評論發佈爲其他人。這並不容易,但唯一的電子郵件回覆ID是一種合理的直接方式(但絕不保證安全)。

-1

退房django.core.mail模塊here ...

from django.core.mail import send_mail 

send_mail('Subject here', 'Here is the message.', '[email protected]', 
    ['[email protected]'], fail_silently=False) 

或結帳這篇文章here ...

+0

謝謝,但我已經從我的Django應用程序發送郵件。這裏的問題是讓用戶回覆網站上顯示的郵件。 – powlo 2012-07-09 10:54:13

2

的情況下,在一個類似的項目時,我遇到了它是有幫助的幾個基本問​​題:

發送電子郵件:我開始使用Django的send_mail和子流程send_mass_mail,但是我現在切換到django-mailer和cron條目,以便我們能夠正確管理郵件隊列並記錄正在發送的內容等。您可能會發現Pinax項目中的其他應用程序有用:http://pinaxproject.com/ecosystem/,如通知或其他用於電子郵件確認的應用程序。

正在提取電子郵件:我使用poplib作爲@ herman-schaaf的建議,加上每隔幾分鐘檢查郵件的cron條目。我保存了使用其UIDL下載的所有電子郵件的記錄,以便我可以檢查它們是否已被處理。

小心循環:您可能想要使用與發件人地址不同的返回路徑。爲了防止洪水氾濫,我還採取了檢查措施,以阻止任何用戶在一次迭代中提交超過x郵件,或者每次迭代次數超過n郵件。

日期和時間:你也可能會想從電子郵件解析發送日期跟蹤插入,而不是使用datetime.now()timezone.now(),因爲你可以接收電子郵件發送多分鐘前。我想你必須像我們必須處理時區一樣。當它變得可用時,我們切換到Django 1.4版,它使處理時區感知的日期時間比以前的版本(see release notes about this here)更容易處理,並將它與存儲了感知日期時間的PostgreSQL組合。 Pinax還有一個應用程序來簡化用戶時區本地化的實施。

僞造電子郵件:在我們的情況下,我們不關心,由於應用程序的封閉性僞造的電子郵件,但我們通知任何更新,其中包括創建者的票的所有參與者被通知的創作本身的,所以每個人都至少可以注意到他/她是否會被冒充(您可以在您的通知電子郵件中包含管理員的電子郵件地址,以便用戶報告任何可疑活動)。

+0

偉大的技巧謝謝。 – powlo 2012-08-10 15:30:17