2009-04-08 6 views
21

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

Несколько поисковых запросов Google не показали очень многообещающих результатов. Хотя я нашел это: Receive and send emails in python

Должен ли я рулон самостоятельно? если так, я буду размещать это приложение быстрее, чем вы можете сказать ... что бы вы ни говорили.

спасибо, Jim

обновление: Я не пытаюсь сделать сервер электронной почты, мне просто нужно добавить некоторые функции, где вы можете по электронной почте изображение на сайт и он всплывал в вашем Счет.

+0

См. Также этот вопрос: http://stackoverflow.com/questions/640970/email-integration –

ответ

17

У вас есть приложение под названием jutda-helpdesk, в котором используются обрабатываемые входящие сообщения Python poplib и imaplib. Вам просто нужно иметь учетную запись где-нибудь с доступом POP3 или IMAP.

Это заимствовано из их get_email.py:

def process_mail(mb): 
    print "Processing: %s" % q 
    if mb.email_box_type == 'pop3': 
     if mb.email_box_ssl: 
      if not mb.email_box_port: mb.email_box_port = 995 
      server = poplib.POP3_SSL(mb.email_box_host, int(mb.email_box_port)) 
     else: 
      if not mb.email_box_port: mb.email_box_port = 110 
      server = poplib.POP3(mb.email_box_host, int(mb.email_box_port)) 
     server.getwelcome() 
     server.user(mb.email_box_user) 
     server.pass_(mb.email_box_pass) 

     messagesInfo = server.list()[1] 

     for msg in messagesInfo: 
      msgNum = msg.split(" ")[0] 
      msgSize = msg.split(" ")[1] 
      full_message = "\n".join(server.retr(msgNum)[1]) 

      # Do something with the message 

      server.dele(msgNum) 
     server.quit() 

    elif mb.email_box_type == 'imap': 
     if mb.email_box_ssl: 
      if not mb.email_box_port: mb.email_box_port = 993 
      server = imaplib.IMAP4_SSL(mb.email_box_host, int(mb.email_box_port)) 
     else: 
      if not mb.email_box_port: mb.email_box_port = 143 
      server = imaplib.IMAP4(mb.email_box_host, int(mb.email_box_port)) 
     server.login(mb.email_box_user, mb.email_box_pass) 
     server.select(mb.email_box_imap_folder) 
     status, data = server.search(None, 'ALL') 
     for num in data[0].split(): 
      status, data = server.fetch(num, '(RFC822)') 
      full_message = data[0][1] 

      # Do something with the message 

      server.store(num, '+FLAGS', '\\Deleted') 
     server.expunge() 
     server.close() 
     server.logout() 

mb просто какой-то объект, чтобы хранить все данные почтового сервера, остальное должно быть довольно ясно.

Возможно, вам нужно будет проверить документы на poplib и imaplib, чтобы получить определенные части сообщения, но, надеюсь, этого достаточно, чтобы вы могли двигаться.

2

Django действительно предназначен как веб-сервер (ну, как структура, которая вписывается в веб-сервер), а не как почтовый сервер. Я полагаю, вы могли бы поместить некоторый код в веб-приложение Django, которое запускает сервер электронной почты, используя код, показанный в этом вопросе, с которым вы связались, но я бы не рекомендовал его; это злоупотребление возможностями динамического веб-программирования.

Обычная практика состоит в том, чтобы иметь отдельные почтовые и веб-серверы, и для этого вы хотели бы изучить нечто вроде Sendmail или (еще лучше) Postfix. Думаю, для POP3 вам также понадобится что-то вроде Dovecot или Courier. (Это, конечно, можно иметь сервер электронной почты уведомить ваш веб-приложения при получении сообщений электронной почты, чтобы он мог действовать на них, если это то, что вы хотите сделать.)

EDIT: в ответ на Ваши комментарии: да вы пытаясь сделать (или хотя бы использовать) почтовый сервер. Сервер электронной почты - это просто программа, которая получает электронные письма (и может также отправлять их, но вам это не нужно).

Вы можете определенно написать небольшой почтовый сервер в Python, который просто получает эти письма и сохраняет изображения в файловой системе или в базе данных или что-то еще. (Возможно, стоит задать новый вопрос, о) Но не делайте его частью своего веб-приложения Django; сохраните его как свою отдельную программу.

+1

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

5

Я знаю, что этот вопрос сейчас довольно старый, но я думал, что добавлю для будущей ссылки, что вы можете дать http://cloudmailin.com a go. У нас есть довольно много пользователей django, использующих систему, и это должно быть немного проще предлагаемого решения.

+0

СПАСИБО ТЕБЯ, это именно то, что я искал. –