Django는 이메일을 보내고 받으시겠습니까?
-
06-09-2019 - |
문제
Django의 이메일 보내기 능력에 대해 잘 알고 있었지만 사용자로부터 이메일을 받고 처리하는 것에 대해 아무것도 보지 못했습니다. 이 기능을 사용할 수 있습니까?
몇몇 Google 검색은 매우 유망한 결과를 얻지 못했습니다. 나는 이것을 찾았지만 : Python에서 이메일을 받고 보내십시오
내 자신을 굴려야할까요? 그렇다면, 나는 당신이 말할 수있는 것보다 더 빨리 그 앱을 게시 할 것입니다.
고마워요, 짐
업데이트: 저는 이메일 서버를 만들려고하지 않습니다. 이미지를 사이트에 이메일로 이메일로 보내고 계정에 팝업 할 수있는 기능을 추가하면됩니다.
해결책
전화 앱이 있습니다 Jutda-Helpdesk 그것은 파이썬을 사용합니다 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
메시지의 특정 부분을 얻으려면 이렇게하기를 바랍니다.
다른 팁
나는이 질문이 지금 꽤 오래되었다는 것을 알고 있지만, 당신이주고 싶은 미래의 참조를 위해 추가 할 것이라고 생각했습니다. http://cloudmailin.com 전에. 우리는 시스템을 사용하는 Django 사용자가 상당히 많으며 제안 된 솔루션보다 조금 간단해야합니다.
Django는 실제로 웹 서버 (웹 서버에 맞는 프레임 워크)로서 전자 메일 서버가 아닙니다. 링크 한 해당 질문에 표시된 코드의 종류를 사용하여 이메일 서버를 시작하는 Django 웹 응용 프로그램에 일부 코드를 넣을 수 있다고 생각하지만 실제로 권장하지는 않습니다. 동적 웹 프로그래밍 기능의 남용입니다.
일반적인 관행은 별도의 이메일과 웹 서버를 갖는 것이며,이를 위해 Sendmail 또는 (더 나은) Postfix와 같은 것을 조사하고 싶을 것입니다. POP3의 경우 Dovecot 또는 Courier와 같은 것이 필요할 것입니다. (전자 메일 서버에 이메일이 수신되면 웹 응용 프로그램에 알리도록 할 수 있습니다.
편집하다: 귀하의 의견에 대한 응답으로 : 예, 이메일 서버를 만들거나 최소한 사용하려고합니다. 전자 메일 서버는 이메일을받는 프로그램 일뿐입니다 (전자 메일도 보낼 수 있지만 필요하지 않습니다).
이 이메일을 수신하고 이미지를 파일 시스템이나 데이터베이스 등에 저장하는 작은 전자 메일 서버를 파이썬으로 작성할 수 있습니다. (새로운 질문을 할 가치가있을 수 있습니다). 그러나 Django 웹 앱의 일부로 만들지는 않습니다. 고유 한 프로그램으로 유지하십시오.