English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Envio de E-mails Django

   O Django oferece um motor leve e fácil de usar para enviar e-mails prontos. Semelhante ao Python, você precisa importar smtplib. No Django, você precisa importar django.core.mail. Para enviar e-mails, edite o arquivo settings.py do projeto e configure as seguintes opções −

EMAIL_HOST − servidor SMTP EMAIL_HOST_USER − servidor SMTP de login     EMAIL_HOST_PASSWORD − credenciais de senha do servidor SMTP     EMAIL_PORT − porta do servidor SMTP     EMAIL_USE_TLS ou   _SSL − Se definido como True, é uma conexão segura.    

Enviar um e-mail simples

Vamos criar uma vista "sendSimpleEmail" para enviar um e-mail simples.

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.core.mail import send_mail
 from django.http import HttpResponse
 def sendSimpleEmail(request, emailto):
    res = send_mail("hello paul", "comment tu vas?", "xxx@w")3codebox.com", [emailto])
    return HttpResponse('%s'%res)

Aqui estão os detalhes dos parâmetros do send_mail −

assunto − E-Assunto do e-mail     message − E-Conteúdo do assunto do e-mail     from_email − E-Remetente do e-mail     lista_de_destinatários − Lista de endereços de e-mail dos destinatários     fail_silently − Booleano, se for false, o send_mail lançará uma exceção ao ocorrer um erro     auth_user − Login do usuário, se não estiver configurado em settings.py     auth_password − Senha do usuário, se não estiver configurada em settings.py     connection − E-backend de e-mail     html_message − (Django1.7nova funcionalidade),se houver,esse e-mail será multipart/alternativa.    

Vamos acessar o URL da nossa vista -

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns('myapp.views', url(r'^simpleemail/(?P<emailto>
    [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/', 
    'sendSimpleEmail', name='sendSimpleEmail'),)

Portanto, ao acessar /myapp/simpleemail/  [email protected]/ ao usar send_mass_mail, você será direcionado para a seguinte página −  

Enviar múltiplas mensagens com send_mass_mail

Método que retorna a quantidade de mensagens enviadas com sucesso. Isso é semelhante ao send_mail, mas requer um parâmetro adicional; datatuple, a vista sendMassEmail é −

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.core.mail import send_mass_mail
 from django.http import HttpResponse
 def sendMassEmail(request, emailto):
    msg1 = ('assunto 1', 'mensagem 1', '[email protected]', [emailto1])
    msg2 = ('assunto 2', 'mensagem 2', '[email protected]', [emailto2])
    res = send_mass_mail((msg1, msg2), fail_silently=False)
    return HttpResponse('%s'%res)

Vamos criar o URL de acesso para nossa vista −

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns('myapp.views', url(r'^massEmail/(?P<emailto1>
    [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/(?P<emailto2>
    [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})', 'sendMassEmail', name='sendMassEmail'),)

Quando acessamos /myapp/massemail/[email protected]/[email protected]/, obtemos −  

Parâmetros detalhados do send_mass_mail −

datatuples    − Tupla, cada elemento é como (assunto, mensagem, from_email, lista_de_destinatários)     fail_silently − Booleano,se for false,send_mail emitirá exceção em caso de erro     auth_user − usuário de login,se não estiver configurado no settings.py     auth_password − senha do usuário,se não estiver configurada no settings.py     connection − E-backend de e-mail    

Como você pode ver na imagem acima, duas mensagens foram enviadas com sucesso.

Notas - Neste exemplo, usamos o debuggingserver smtpd do Python, que pode ser iniciado com o comando a seguir -

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
$python -m smtpd -n -c DebuggingServer localhost:1025

Isso significa que todos os e-mails enviados serão impressos no stdout e o servidor virtual será executado no localhost:1025.

Enviar e-mails para administradores e gerentes usando os métodos mail_admins e mail_managers

Esses métodos enviam e-mails para os administradores do site conforme definido na opção ADMINS do arquivo settings.py,os administradores do site são definidos na seção MANAGERS do arquivo settings.py. Suponha que nossos ADMINS e MANAGERS sejam como follows-

ADMINS   = (('polo', '[email protected]'),)

MANAGERS = (('popoli', '[email protected]'),)

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.core.mail import mail_admins
 from django.http import HttpResponse
 def enviarEmailAdmins(request):
    res = mail_admins('meu assunto', 'site está caindo.')
    return HttpResponse('%s'%res)

O código acima enviará um e-mail para cada administrador definido na parte ADMINS.

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.core.mail import mail_managers
 from django.http import HttpResponse
 def enviarEmailGerentes(request):
    res = mail_managers('meu assunto 2', 'Mudar a data no site.')
    return HttpResponse('%s'%res)

O código acima enviará e-mails para cada administrador definido na parte MANAGERS.

detalhes do parâmetro -

Subject − E-mail assunto.     message − E-assunto do e-mail.     fail_silently − Booleano,se for false,send_mail emitirá exceção em caso de erro     connection − E-mail backend.     html_message − (Django1.7nova funcionalidade),se houver,esse e-mail será multipart/alternativa.    

enviar e-mail HTML-mail

no Django>=1.7Enviar mensagem HTML é tão simples quanto -

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.core.mail import send_mail
 from django.http import HttpResponse
    res = send_mail("hello paul", "comment tu vas?", "[email protected]", 
          ["[email protected]"], html_message=")

Isso produzirá um multipart/e-mail alternativo.

mas para Django<1.7 O envio de e-mails HTML é feito pela classe django.core.mail.mailMessage, e então chama o objeto "send"−

Vamos criar uma vista "sendHTMLEmail" para enviar e-mails HTML.

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.core.mail import EmailMessage
 from django.http import HttpResponse
 def sendHTMLEmail(request, emailto):
    html_content = "<strong>Comment tu vas?</strong>"
    email = EmailMessage("my subject", html_content, "[email protected]", [emailto])
    email.content_subtype = "html"
    res = email.send()
    return HttpResponse('%s'%res)

Classe de mensagem de e-mail que cria detalhes de parâmetros −

Subject − E-mail assunto.     message − E-mail corpo em HTML.     from_email − E-mail remetente.     to − Lista de endereços de e-mail dos destinatários.     bcc − Lista de endereços de e-mail para "Cópia Oculta".     connection − E-mail backend.    

Vamos criar o endereço da vista de acesso −

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns('myapp.views', url(r'^htmlemail/(?P<emailto>
    [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/', 
    'sendHTMLEmail', name = 'sendHTMLEmail'),)

Quando acessamos /myapp/htmlemail/[email protected], receberá o seguinte conteúdo −  

Enviar e-mail com anexos

Isso é feito usando o método "attach" do objeto EmailMessage.

Uma visão para enviar um e-mail, com anexos conforme abaixo −

# Nome do arquivo: example.py
# Copyright : 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data : 2020-08-08
from django.core.mail import EmailMessage
 from django.http import HttpResponse
 def sendEmailWithAttach(request, emailto):
    html_content = "Comment tu vas?"
    email = EmailMessage("my subject", html_content, "[email protected]", emailto)
    email.content_subtype = "html"
    fd = open('manage.py', 'r')
    email.attach('manage.py', fd.read(), 'text/plain)
    res = email.send()
    return HttpResponse('%s'%res)

Parâmetros detalhados no anexo −

filename − Nome do arquivo anexado     content − Conteúdo do arquivo, anexado.     mimetype − Tipo de Conteúdo MIME do Anexo.