メールで送信した画像とテキストデータをdjangoに登録するために、
メールサーバからデータベースに保存したメールデータを
Pythonのemailライブラリとdjango APIを使ってテキストデータと
画像ファイルとして保存するスクリプトを作成した。
色々省いたので、動くかどうか...。
emailパッケージの使用方法についてはこちらを参考にした。
http://nagosui.org/Nagosui/COREBlog2/fight-for-moblog-extra-email-module
C:/test/workspace/sample/scripts/mail_saver.py
import os import re import sys import email sys.path.append('C:/test/workspace') from django.core.management import setup_environ from sample import settings setup_environ(settings) from django.core.exceptions import ObjectDoesNotExist from django.core.files.base import ContentFile from sample.mail.models import Inbox from sample.photo.models import Photo from sample.blog.models import Blog, BlogPhotoMap def main(): inbox_list = Inbox.objects.all() for inbox in inbox_list: message = email.message_from_string(inbox.message_body) user = None # ここでユーザー取得処理 if user: blog = None photo_list = [] for part in message.walk(): if part.get_content_maintype() == 'multipart': pass elif part.get_content_maintype() == 'text': body = part.get_payload() enc = part.get_content_charset() ubody = unicode(body, enc) blog = Blog() blog.contents = ubody blog.user = user blog.save() elif part.get_content_maintype() == 'image': filename = part.get_filename() photo = Photo() photo.user = user photo.image.save("ファイル名", ContentFile(part.get_payload(decode=1)), save=False) photo.save() photo_list.append(photo) if blog: # Save blog photo map for photo in photo_list: bpm = BlogPhotoMap() bpm.blog = blog bpm.photo = photo bpm.save() inbox_list.delete() if __name__ == '__main__': main()