Django para enviar e receber e-mail?
-
06-09-2019 - |
Pergunta
Eu comecei bastante familiarizado com e-mail habilidades envio do Django, mas eu havn't visto qualquer coisa sobre ele recepção e processamento de e-mails de usuários. Essa funcionalidade está disponível?
Algumas pesquisas do Google não apareceram resultados muito promissores. Apesar de eu encontrar este: Receber e enviar e-mails em python
Am I vai ter que rolar minha própria? Se assim for, eu estarei postando esse aplicativo mais rápido do que você pode dizer ... o que você diz.
graças, Jim
update :. Eu não estou tentando fazer um servidor de e-mail, eu só precisa adicionar algumas funcionalidades, onde você pode enviar uma imagem para o local e tê-lo aparecer em sua conta
Solução
Há um app chamado jutda-helpdesk que usa poplib
e imaplib
do Python para processo e-mails recebidos. Você apenas tem que ter um lugar conta com acesso POP3 ou IMAP.
Esta é uma adaptação do seu 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
é apenas algum objeto para armazenar todas as informações do servidor de correio, o resto deve ser bastante clara.
Você provavelmente precisará verificar os docs sobre poplib
e imaplib
para obter partes específicas da mensagem, mas espero que isto é suficiente para você ir.
Outras dicas
Eu sei que esta questão é muito velho agora, mas apenas pensei que eu gostaria de acrescentar para referência futura que você pode querer dar http://cloudmailin.com uma vez. Temos muito poucos usuários Django usando o sistema e deve ser um pouco mais simples do que a solução proposta.
Django é realmente pretende ser um servidor web (bem, como um quadro que se encaixa em um servidor web), e não como um servidor de e-mail. Eu suponho que você poderia colocar algum código em uma aplicação web Django que inicia um servidor de e-mail, usando o tipo de código mostrado na a essa pergunta é ligada ao, mas eu realmente não recomendo; é um abuso das capacidades de programação web dinâmico.
A prática normal é ter servidores de e-mail e web separadas, e por que você iria querer olhar para algo como Sendmail ou (ainda melhor) Postfix. Para o POP3, você também precisa de algo como Dovecot ou Courier, eu acho. (É certamente possível para que o servidor de e-mail notificar seu aplicativo web quando e-mails são recebidos para que ele possa agir sobre eles, se é isso que você quer fazer.)
Editar : em resposta a seus comentários: Sim, você está tentando fazer (ou pelo menos de uso) um servidor de e-mail. Um servidor de e-mail é apenas um programa que recebe e-mails (e pode ser capaz de enviá-los tão bem, mas você não precisa disso).
Você poderia definitivamente escrever um servidor de e-mail pequena em Python que só recebe esses e-mails e salva as imagens para o sistema de arquivos ou um banco de dados ou qualquer outra coisa. (Talvez valesse a pena fazer uma nova pergunta, sobre) Mas não torná-lo parte do seu aplicativo web Django; mantê-lo como seu próprio programa separado.