Python解决方案允许通过电子邮件将照片上传到我的Django网站

时间:2010-10-13 13:04:00

标签: python django email cron postfix-mta

我正在学习Python / Django,我的宠物项目是一个照片共享网站。我想让用户能够使用像Posterous,Tumblr这样的电子邮件地址上传他们的照片。研究让我相信我需要使用以下内容:

- cron job - python邮件解析器 - cURL或libcurl - 更新我的数据库的东西

所有这些部分如何协同工作仍然需要澄清。我知道cron将运行一个解析电子邮件的脚本(阅读时听起来很简单),但如何开始使用所有这些东西是令人生畏的。非常感谢任何帮助我指出正确的方向,教程或答案。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

不确定你需要cURL在那个列表中 - 它应该做什么?

你并没有真正说出你遇到麻烦的地方。在我看来,你可以在Django management command中完成所有这些操作,这可以在普通的cron上触发。标准Python库包含访问邮箱(smtplib)和解析消息以获取映像(emailemail.message)所需的一切。然后,脚本可以将图像文件保存到磁盘上的相关位置,并通过普通的Django ORM在数据库中创建匹配条目。