Решение Python, позволяющее загружать фотографии по электронной почте на мой веб-сайт Django

Я изучаю Python/Django, и мой любимый проект — сайт для обмена фотографиями. Я хотел бы дать пользователям возможность загружать свои фотографии, используя адрес электронной почты, такой как Posterous, Tumblr. Исследования привели меня к выводу, что мне нужно использовать следующее:

-- задание cron -- парсер почты python -- cURL или libcurl -- что-то, что обновляет мою базу данных

Как все эти части будут работать вместе, мне все еще нужно разъяснение. Я знаю, что cron запустит скрипт, который анализирует электронную почту (звучит просто при чтении), но как начать со всеми этими вещами сложно. Любая помощь в указании меня в правильном направлении, учебниках или ответе будет принята с благодарностью.


person django-d    schedule 13.10.2010    source источник
comment
У вас есть прямой доступ к maildir или почтовому ящику?   -  person baklarz2048    schedule 13.10.2010


Ответы (2)


Читать сообщения из 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()
person baklarz2048    schedule 13.10.2010
comment
Вам нужно будет импортировать модель - person Andrew Sledge; 13.10.2010
comment
и этот скрипт будет вызываться cron? - person django-d; 13.10.2010

Не уверен, для чего вам нужен cURL в этом списке - что он должен делать?

Вы действительно не говорите, где у вас проблемы. Мне кажется, все это можно сделать с помощью команды управления Django, который можно запустить в обычном cron. Стандартная библиотека Python содержит все необходимое для доступа к почтовому ящику (smtplib) и анализа сообщения для получения изображения (email и email.message). Затем сценарий может просто сохранить файл изображения в соответствующем месте на диске и создать соответствующую запись в базе данных с помощью обычного ORM Django.

person Daniel Roseman    schedule 13.10.2010