Skip to main content
 首页 » 编程设计

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

2024年09月03日39lautakyan007

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

-- 定时任务 -- python 邮件解析器 --cURL 或 libcurl -- 更新我的数据库的东西

所有这些部分将如何协同工作仍然是我需要澄清的地方。我知道 cron 将运行一个解析电子邮件的脚本(阅读时听起来很简单),但如何开始所有这些事情却令人望而生畏。如果能为我指明正确的方向、教程或答案提供任何帮助,我们将不胜感激。

请您参考如下方法:

从 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()