Django - Enviando E-mails
Django vem com um motor leve pronto e fácil de usar para enviar e-mail. Semelhante ao Python, você só precisa importar smtplib. No Django você só precisa importar django.core.mail. Para começar a enviar e-mail, edite o arquivo settings.py do seu projeto e defina as seguintes opções -
EMAIL_HOST - servidor smtp.
EMAIL_HOST_USER - Credencial de login para o servidor smtp.
EMAIL_HOST_PASSWORD - Credencial de senha para o servidor smtp.
EMAIL_PORT - porta do servidor smtp.
EMAIL_USE_TLS or _SSL - Verdadeiro se conexão segura.
Enviando um e-mail simples
Vamos criar uma visão "sendSimpleEmail" para enviar um e-mail simples.
from django.core.mail import send_mail
from django.http import HttpResponse
def sendSimpleEmail(request,emailto):
res = send_mail("hello paul", "comment tu vas?", "[email protected]", [emailto])
return HttpResponse('%s'%res)
Aqui estão os detalhes dos parâmetros de send_mail -
subject - Assunto do e-mail.
message - Corpo do e-mail.
from_email - E-mail de.
recipient_list - Lista de endereços de e-mail dos destinatários.
fail_silently - Bool, se for falso, send_mail gerará uma exceção em caso de erro.
auth_user - Login do usuário se não estiver definido em settings.py.
auth_password - Senha do usuário, se não estiver definida em settings.py.
connection - Back-end de e-mail.
html_message - (novo no Django 1.7) se presente, o e-mail será multiparte / alternativa.
Vamos criar uma URL para acessar nossa visão -
from django.conf.urls import patterns, url
urlpatterns = paterns('myapp.views', url(r'^simpleemail/(?P<emailto>
[\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/',
'sendSimpleEmail' , name = 'sendSimpleEmail'),)
Então, ao acessar /myapp/simpleemail/[email protected], você obterá a seguinte página -
Enviando vários e-mails com send_mass_mail
O método retorna o número de mensagens entregues com sucesso. É o mesmo que send_mail, mas leva um parâmetro extra; datatuple, nossa visão sendMassEmail será então -
from django.core.mail import send_mass_mail
from django.http import HttpResponse
def sendMassEmail(request,emailto):
msg1 = ('subject 1', 'message 1', '[email protected]', [emailto1])
msg2 = ('subject 2', 'message 2', '[email protected]', [emailto2])
res = send_mass_mail((msg1, msg2), fail_silently = False)
return HttpResponse('%s'%res)
Vamos criar uma URL para acessar nossa visão -
from django.conf.urls import patterns, url
urlpatterns = paterns('myapp.views', url(r'^massEmail/(?P<emailto1>
[\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<emailto2>
[\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})', 'sendMassEmail' , name = 'sendMassEmail'),)
Ao acessar /myapp/massemail/[email protected]/[email protected]/, obtemos -
detalhes dos parâmetros send_mass_mail são -
datatuples - Uma tupla onde cada elemento é semelhante (assunto, mensagem, de_email, lista_de_ destinatário).
fail_silently - Bool, se for falso, send_mail gerará uma exceção em caso de erro.
auth_user - Login do usuário se não estiver definido em settings.py.
auth_password - Senha do usuário, se não estiver definida em settings.py.
connection - Back-end de e-mail.
Como você pode ver na imagem acima, duas mensagens foram enviadas com sucesso.
Note - Neste exemplo, estamos usando o servidor de depuração smtp Python, que você pode iniciar usando -
$python -m smtpd -n -c DebuggingServer localhost:1025
Isso significa que todos os seus e-mails enviados serão impressos no stdout e o servidor fictício está sendo executado no localhost: 1025.
Sending e-mails to admins and managers using mail_admins and mail_managers methods
Esses métodos enviam e-mails aos administradores do site, conforme definido na opção ADMINS do arquivo settings.py, e aos gerentes do site, conforme definido na opção MANAGERS do arquivo settings.py. Vamos assumir que nossas opções de ADMINS e MANAGERS se parecem com -
ADMINS = (('polo', '[email protected]'),)
MANAGERS = (('popoli', '[email protected]'),)
from django.core.mail import mail_admins
from django.http import HttpResponse
def sendAdminsEmail(request):
res = mail_admins('my subject', 'site is going down.')
return HttpResponse('%s'%res)
O código acima enviará um e-mail para cada administrador definido na seção ADMINS.
from django.core.mail import mail_managers
from django.http import HttpResponse
def sendManagersEmail(request):
res = mail_managers('my subject 2', 'Change date on the site.')
return HttpResponse('%s'%res)
O código acima enviará um e-mail para todos os gerentes definidos na seção GESTORES.
Detalhes dos parâmetros -
Subject - Assunto do e-mail.
message - Corpo do e-mail.
fail_silently - Bool, se for falso, send_mail gerará uma exceção em caso de erro.
connection - Back-end de e-mail.
html_message - (novo no Django 1.7) se presente, o e-mail será multiparte / alternativa.
Enviando e-mail HTML
Enviar mensagem HTML no Django> = 1.7 é tão fácil quanto -
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 e-mail multiparte / alternativo.
Mas para Django <1.7, o envio de mensagens HTML é feito através da classe django.core.mail.EmailMessage e, em seguida, chamando 'send' no objeto -
Vamos criar uma visão "sendHTMLEmail" para enviar um e-mail em HTML.
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)
Detalhes dos parâmetros para a criação da classe EmailMessage -
Subject - Assunto do e-mail.
message - Corpo do e-mail em HTML.
from_email - E-mail de.
to - Lista de endereços de e-mail dos destinatários.
bcc - Lista de endereços de e-mail dos destinatários “Bcc”.
connection - Back-end de e-mail.
Vamos criar uma URL para acessar nossa visão -
from django.conf.urls import patterns, url
urlpatterns = paterns('myapp.views', url(r'^htmlemail/(?P<emailto>
[\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/',
'sendHTMLEmail' , name = 'sendHTMLEmail'),)
Ao acessar /myapp/htmlemail/[email protected], obtemos -
Enviando e-mail com anexo
Isso é feito usando o método 'attach' no objeto EmailMessage.
Uma visão para enviar um e-mail com anexo será -
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)
Detalhes sobre anexar argumentos -
filename - O nome do arquivo a ser anexado.
content - O conteúdo do arquivo a ser anexado.
mimetype - O tipo MIME do conteúdo do anexo.