В Django я хочу вставить запись в базу данных, отправив себе электронное письмо? - PullRequest
4 голосов
/ 11 апреля 2010

Я ищу возможную функцию для моего небольшого приложения ... Мне нравится идея, что я могу отправить электронное письмо на определенный адрес электронной почты, содержащий задачу, которую мне нужно выполнить, и это будет прочитано моим веб-приложением и помещено в базу данных ... Поэтому, когда я зайду, чтобы войти в свое приложение, задание, которое я отправил по электронной почте, будет там как запись в приложении.

Возможно ли это? У меня есть фрагмент с SliceHost (в основном выделенный сервер), поэтому у меня есть полный контроль над тем, что устанавливать и т. Д. Я использую для этого Python / Django / MySQL.

Есть идеи, какие шаги предпринять, чтобы это произошло?

Ответы [ 4 ]

5 голосов
/ 11 апреля 2010

Если бы я реализовал это, я бы использовал планировщик и запланированное задание.

Это задание будет подключаться к почтовому серверу (будь то POP3 или IMAP) и анализировать непрочитанные сообщения (или сообщения, не прочитанные заданием). Исходя из этого, я вставил бы эту запись.

Таким образом вы получите 2 типа записей. Список идентификаторов почтовых сообщений, которые были обработаны (чтобы вы не обрабатывали почту) и список задач.

Недостатком является то, что требуется некоторое время, прежде чем вы увидите задание, поскольку задание выполняется только каждые X минут или секунд.

Если этого недостаточно, я бы выбрал постоянное IMAP-соединение, но вам нужно было бы больше обрабатывать ошибки; Вы не просто повторяете автоматически каждые X минут.

Планирование Google для Django + поможет вам начать работу.

также посмотрите на этот поток StackOverflow , не нужно изобретать велосипед :))

2 голосов
/ 11 апреля 2010

Мне нужно было то же самое. Я использую проект Lamson (который написан на python) для преобразования электронной почты, пересылки электронной почты на основе правил в мои учетные записи www.evernote.com и продумывания роли www.trgtd.com.au, обновления правил веб-фильтрации брандмауэра, обновления разрешения / запрета списки для моего спам-фильтра, базы данных для чтения и записи и т.д ....

Мне нравится думать об этом как об автоматизации почтового сервера и разработке почтовых приложений.

www.lamsonproject.org

Трой

1 голос
/ 13 апреля 2010

Один из способов, который я решил в прошлом, - это использование файлов qmail .qmail ( docs ).

Обычно вы настраиваете qmail и указываете свой адрес электронной почты (для простоты использования предположим, что proc@whever.com - ваш адрес электронной почты) в вашем домашнем каталоге. В этом каталоге вы настроили файл .qmail-proc для обработки почты.

Это позволяет вам использовать полноценный SMTP-сервер на вашем сервере, включая фильтрацию спама, переадресацию, псевдонимы, все эти забавные вещи. Затем вы можете передать данные из электронной почты в приложение. В вашем случае я бы предложил сделать Mangement Command в Django для обработки электронного письма (я назову его proc_email). Таким образом, ваш .qmail-proc может выглядеть так:

/var/spool/mail/proc
| /www/django/myproject/manage.py proc_email

Сохраняет копию электронного письма в /var/spool/mail/proc, а затем передает письмо сценарию во второй строке. Само электронное письмо передается на proc_email через sys.stdin. Просто прочитайте письмо оттуда и сохраните его в ваших моделях Django.

Если вам потребуется позже обработать электронную почту для разных адресов, вы также можете настроить псевдонимы, которые указывают на ваш домашний каталог, и использовать файлы .qmail-<username> для каждого псевдонима. Позволяет вам передавать другие флаги (например, имя пользователя для каждого псевдонима) в proc_email при необходимости.

Я должен отметить, что это не самое простое решение, но оно может масштабироваться и является чертовски пуленепробиваемым.

0 голосов
/ 11 апреля 2010

Я бы не стал за это фокусироваться на Джанго.

Я бы создал почтовый сервер для перехвата этих писем. Используйте http://docs.python.org/library/smtpd.html.

Затем я использовал бы только Django ORM для обновления базы данных на основе полученных писем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...