2009-04-08 21 views
21

Dobrze poznałem możliwości wysyłania e-maili przez Django, ale nie widziałem niczego na ten temat odbierając i przetwarzając wiadomości od użytkowników. Czy ta funkcja jest dostępna?django do wysyłania i odbierania wiadomości e-mail?

Kilka wyszukiwań w Google nie przyniosło bardzo obiecujących wyników. Chociaż znalazłem to: Receive and send emails in python

Czy będę musiał rzucić własną? jeśli tak, będę publikować tę aplikację szybciej niż możesz powiedzieć ... cokolwiek powiesz.

Dzięki, Jim

aktualizacja: Nie chcę, aby serwer e-mail, po prostu trzeba dodać jakąś funkcjonalność gdzie możesz przesyłać obraz do serwisu i to pop-up w swojej konto.

+0

Zobacz także to pytanie: http://stackoverflow.com/questions/640970/email-integration –

Odpowiedz

17

Istnieje aplikacja o nazwie , która korzysta z Pythona poplib i imaplib do przetwarzania przychodzących wiadomości e-mail. Musisz mieć konto gdzieś z dostępem POP3 lub IMAP.

ten przystosowany jest ze swoich 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 to tylko niektóre obiekt do przechowywania wszystkich informacji serwera poczty, reszta powinna być dość jasne.

Prawdopodobnie będziesz potrzebować sprawdzić dokumenty na poplib i imaplib, aby uzyskać określone części wiadomości, ale mam nadzieję, że to wystarczy, abyś mógł zacząć.

2

Django jest naprawdę przeznaczony jako serwer sieciowy (cóż, jako framework, który pasuje do serwera WWW), a nie jako serwer poczty e-mail. Przypuszczam, że możesz umieścić kod w aplikacji internetowej Django, która uruchamia serwer e-mail, używając kodu pokazanego w tym pytaniu, z którym się łączyłeś, ale naprawdę nie poleciłbym tego; to nadużycie możliwości dynamicznego programowania internetowego.

Normalną praktyką jest posiadanie oddzielnych serwerów pocztowych i internetowych, a do tego chciałbyś zajrzeć do czegoś podobnego do Sendmaila lub (jeszcze lepiej) do Postfix. W przypadku POP3 potrzebowałbym również czegoś takiego jak Dovecot lub Courier. (Jest to oczywiście możliwe, że serwer pocztowy powiadomić aplikację internetową, gdy e-maile są odbierane dzięki czemu może działać na nich, jeśli to, co chcesz zrobić.)

EDIT: w odpowiedzi na komentarze: tak jesteś próbuje zrobić (lub przynajmniej użyć) serwer pocztowy. Serwer poczty e-mail to program, który odbiera wiadomości e-mail (i może je również wysyłać, ale nie jest to konieczne).

Z pewnością można napisać mały serwer pocztowy w Pythonie, który odbiera te e-maile i zapisuje obrazy do systemu plików lub bazy danych. (Może warto zadać nowe pytanie, około) Ale nie rób tego częścią twojej aplikacji internetowej Django; zachowaj go jako własny oddzielny program.

+1

Nie próbuję utworzyć serwera poczty e-mail, wystarczy dodać trochę funkcji, aby wysłać wiadomość e-mail do stronę i poproś o jej pojawienie się na Twoim koncie. – Jiaaro

5

Wiem, że to pytanie jest już dość stare, ale pomyślałem, że dodam je do przyszłego odniesienia, które warto dać http://cloudmailin.com. Mamy sporo użytkowników django korzystających z systemu i powinno to być trochę prostsze niż proponowane rozwiązanie.

+0

DZIĘKUJEMY, że ci się udało, właśnie tego szukałem. –

Powiązane problemy