2010-10-13 19 views
2

我正在學習Python/Django,我的寵物項目是一個照片分享網站。我想讓用戶能夠使用Posterous,Tumblr等電子郵件地址上傳他們的照片。有研究使我相信,我需要使用以下命令:Python解決方案,允許通過電子郵件將照片上傳到我的Django網站

- cron作業 - 蟒蛇郵件分析器 - 捲曲或libcurl的 - 這是我更新數據庫

如何所有這些部件將一起工作仍然是我需要澄清的地方。我知道cron會運行一個解析郵件的腳本(閱讀時聽起來很簡單),但是如何開始使用這些東西是令人生畏的。任何幫助指導我正確的方向,教程或答案將不勝感激。

+0

您是否對maildir或郵箱有直接訪問權限? – iddqd 2010-10-13 13:09:52

+0

是的,我有我自己的VPS – 2010-10-13 13:14:14

回答

3

從maildir讀取消息。它沒有優化,但顯示如何解析電子郵件。當然,你應該將關於文件和用戶的信息存儲到數據庫中。將模型導入此代碼並進行正確的插入。

import mailbox 
import sys 
import email 
import os 
import errno 
import mimetypes 


mdir = mailbox.Maildir(sys.argv [1], email.message_from_file) 


for mdir_msg in mdir: 
    counter = 1 
    msg = email.message_from_string(str(mdir_msg)) 
    for part in msg.walk(): 
     # multipart/* are just containers 
     if part.get_content_maintype() == 'multipart': 
      continue 
     # Applications should really sanitize the given filename so that an 
     # email message can't be used to overwrite important files 
     filename = part.get_filename() 
     if not filename: 
      ext = mimetypes.guess_extension(part.get_content_type()) 
      if not ext: 
       # Use a generic bag-of-bits extension 
       ext = '.bin' 
      filename = 'part-%03d%s' % (counter, ext) 
     counter += 1 
     fp = open(os.path.join('kupa', filename), 'wb') 
     fp.write(part.get_payload(decode=True)) 
     fp.close() 
     #photomodel imported from yourapp.models 
     photo = PhotoModel() 
     photo.name = os.path.join('kupa', filename) 
     photo.email = .... 
     photo.save() 
+0

您需要導入模型 – 2010-10-13 14:41:19

+0

並且該腳本將由cron調用? – 2010-10-13 15:21:27

0

不知道你在那個列表中需要cURL - 它應該做什麼?

你真的不知道你在哪裏遇到麻煩。在我看來,你可以在Django management command中完成所有這些工作,這可以在普通的cron上觸發。標準Python庫包含訪問郵箱所需的所有內容(smtplib)並解析消息以獲取圖像(emailemail.message)。然後,腳本可以簡單地將圖像文件保存到磁盤上的相關位置,並通過普通的Django ORM在數據庫中創建匹配條目。

相關問題