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

Django 发送邮件

   Django fornisce un motore leggero e facile da usare per inviare email. Come Python, devi importare smtplib. In Django è sufficiente importare django.core.mail. Per inviare email, edita il file settings.py del progetto e imposta le seguenti opzioni -

EMAIL_HOST − Server SMTP EMAIL_HOST_USER − Credenziali di accesso al server SMTP     EMAIL_HOST_PASSWORD − Credenziali della password del server SMTP     EMAIL_PORT − Porta del server SMTP     EMAIL_USE_TLS o   _SSL − Se impostato a True è una connessione sicura.    

Invio di una email semplice

Creiamo una vista "sendSimpleEmail" per inviare una email semplice.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 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?", "[email protected]", [emailto])
    return HttpResponse('%s'%res)

Ecco i dettagli del parametro send_mail -

subject − Oggetto dell'email     message − Contenuto dell'email     from_email − E-mail mittente     recipient_list − Elenco degli indirizzi email del destinatario     fail_silently − Booleano, se impostato a false, send_mail solleva un'eccezione quando si verifica un errore     auth_user − Login dell'utente, se non definito in settings.py     auth_password − La password dell'utente, se non definita in settings.py     connection − Backend di E-mail     html_message − (funzionalità aggiunta in Django 1.7), se presente, la mail sarà multipart/alternative.    

Facciamo una chiamata all'indirizzo della nostra vista -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08

 urlpatterns = paterns('myapp.views', url(r'^simpleemail/(?P<emailto>',
    [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
    'sendSimpleEmail', name = 'sendSimpleEmail'),)

Quindi, quando si accede a /myapp/simpleemail/  [email protected]alla pagina seguente quando si accede a /  

Invio di più email con send_mass_mail

Il metodo restituisce il numero di messaggi trasmessi con successo. È simile a send_mail ma richiede un ulteriore parametro; datatuple, per la nostra vista sendMassEmail −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
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)

Creiamo l'indirizzo del nostro view per l'accesso −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08

 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 accediamo a /myapp/massemail/[email protected]/[email protected]/, otteniamo −  

Dettagli del parametro send_mass_mail come segue −

datatuples    − Tupla, ogni elemento è come (subject, message, from_email, recipient_list)     fail_silently − Booleano, se impostato a false, send_mail solleva un'eccezione in caso di errore     auth_user − Accesso dell'utente, se non impostato in settings.py     auth_password − La password dell'utente, se non impostata in settings.py     connection − Backend di E-mail    

Come puoi vedere nell'immagine sopra, due messaggi sono stati inviati con successo.

Nota - In questo esempio, utilizziamo il debuggingserver di smtpd di Python, che può essere avviato con il comando seguente −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
$python -m smtpd -n -c DebuggingServer localhost:1025

Questo significa che tutte le email inviate saranno stampate sullo stdout e il server virtuale sarà in esecuzione su localhost:1025.

Invio di email agli amministratori e ai manager utilizzando i metodi mail_admins e mail_managers

Questi metodi inviano email agli amministratori del sito come definito nel file settings.py come opzione ADMINS, gli amministratori del sito sono definiti nel file settings.py come voce MANAGERS. Supponiamo che il nostro ADMINS e MANAGERS siano così:

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

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

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
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)

Il codice sopra invierà una mail a ogni amministratore definito nella parte ADMINS.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
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)

Il codice sopra invierà una mail a ogni amministratore definito nella parte MANAGERS.

Dettagli dei parametri −

Subject − Titolo dell'email.     message − Oggetto dell'E-mail.     fail_silently − Booleano, se impostato a false, send_mail solleva un'eccezione in caso di errore     connection − Backend di E-mail.     html_message − (funzionalità aggiunta in Django 1.7), se presente, la mail sarà multipart/alternative.    

Invio di E-mail HTML

Come inviare messaggi HTML in Django>=1.7 è molto semplice -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 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=")

Questo produrrà una email multipart/alternative.

Ma per Django<1.7 l'invio di email HTML viene completato attraverso la classe django.core.mail.mailMessage, quindi chiamiamo l'oggetto 'send'−

Creiamo una vista 'sendHTMLEmail' per inviare email HTML.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 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 di creazione del messaggio email con dettagli dei parametri −

Subject − Titolo dell'email.     message − Email nel corpo HTML.     from_email − Email mittente.     to − Elenco degli indirizzi email dei destinatari.     bcc − Elenco degli indirizzi email dei destinatari 'Copia Conoscenza'.     connection − Backend di email.    

Creiamo l'indirizzo del view per l'accesso −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08

 urlpatterns = patterns('myapp.views', url(r'^htmlemail/(?P<emailto>
    [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
    'sendHTMLEmail', name = 'sendHTMLEmail'),)

Quando si accede a /myapp/htmlemail/[email protected], si ottiene il seguente contenuto −  

Invio di email con allegati

Questo viene fatto utilizzando il metodo 'attach' dell'oggetto EmailMessage.

Un'anteprima per inviare una email, allegati come segue −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 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)

在附件中的详细参数 −

filename − 附加的文件的名称     content − 该文件的内容,以附加。     mimetype − 附件的内容MIME类型。