2009-04-08 3 views
21

저는 장고의 이메일 전송 능력에 대해 매우 잘 알고 있습니다 만, 사용자로부터 이메일을 수신하고 처리하는 것에 대해서는 아무 것도 보지 못했습니다. 이 기능을 사용할 수 있습니까?django가 이메일을 보내고받을 수 있습니까?

Google 검색 결과 중 일부가 유망한 결과를 얻지 못했습니다. 내가 이것을 찾았지만 : Receive and send emails in python

나는 내 자신을 굴려야 할 것인가? 그렇다면, 내가 말할 수있는 것보다 더 빨리 앱을 게시 할 것입니다.

덕분에, 짐

갱신 : 난 그냥 당신이 사이트에 이미지를 이메일로 할 수있는 몇 가지 기능을 추가 할 필요가에서 팝업이, 이메일 서버를 만들려고 노력하고 있지 않다 당신의 계정.

+0

이 질문도 참조하십시오. http://stackoverflow.com/questions/640970/email-integration –

답변

17

수신 이메일을 처리하기 위해 poplibimaplib을 사용하는 jutda-helpdesk이라는 앱이 있습니다. 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가, 나머지는 꽤 명확해야 모든 메일 서버 정보를 저장하는 그냥 객체입니다.

메시지의 특정 부분을 얻으려면 poplibimaplib에있는 문서를 확인해야 할 것입니다.하지만이 방법을 사용하면 충분합니다.

2

장고는 실제로 이메일 서버가 아닌 웹 서버 (웹 서버에 맞는 프레임 워크)로 사용됩니다. 이메일 서버를 시작하는 Django 웹 응용 프로그램에 몇 가지 코드를 넣을 수 있다고 가정합니다.이 질문에 표시된 것과 같은 종류의 코드를 사용하지만 실제로는 권장하지 않습니다. 동적 인 웹 프로그래밍 기능의 남용입니다.

일반적인 연습은 별도의 전자 메일과 웹 서버를 사용하는 것이므로 Sendmail이나 Postfix와 같은 것을 조사하고 싶을 것입니다. POP3의 경우 Dovecot이나 Courier 같은 것이 필요할 것입니다. (이메일 서버가 수신되면 이메일 서버에 웹 응용 프로그램에 알릴 수 있으므로 원하는대로 수행 할 수 있습니다.)

편집 : 귀하의 의견에 답하십시오 : 예 이메일 서버를 만들려고 노력한다. 전자 메일 서버는 전자 메일을 수신하는 프로그램 일뿐 아니라 전자 메일을 보낼 수도 있습니다. 그러나 전자 메일 서버는 필요하지 않습니다.

파이썬에서이 전자 메일을 받고 파일 시스템이나 데이터베이스 등에 이미지를 저장하는 작은 전자 메일 서버를 작성할 수 있습니다. (새로운 질문을해볼만한 가치가 있습니다.) 그러나 장고 웹 앱에 포함시키지 마십시오. 그것을 별도의 프로그램으로 유지하십시오.

+1

이메일 서버를 만들려고하지 않고 이미지를 이메일로 보낼 수있는 몇 가지 기능을 추가해야합니다. 귀하의 계정에 팝업으로 표시하십시오. – Jiaaro

5

나는이 질문이 꽤 오래되었다는 것을 알고 있지만 앞으로의 참조를 위해 추가하겠다고 생각한 것은 http://cloudmailin.com에게 가고 싶을 것입니다. 우리는 시스템을 사용하는 꽤 많은 장고 사용자가 있으며 제안 된 솔루션보다 조금 더 간단해야합니다.

+0

감사합니다. 스티브, 이것은 내가 찾고있는 것입니다. –

관련 문제