Skip to content

Posta: Inviare una e mail

Alfio Emanuele edited this page Jul 13, 2015 · 7 revisions

1. Creare un modello

Creare un modello in posta/templates/ con un nome significativo, che inizi con email_ es.: email_attivita_partecipazione_concessa.html

Il contenuto deve essere come segue:

{% extends 'email.html' %}

{% block corpo %}
    <p>Qui il contenuto della e-mail.<p>
    <p>Ci sono anche le variabili. Ad esempio, {{ esempio }}.</p>
    <p>Ancora meglio, si possono passare oggetti. Ad esempio, passando una persona, posso:</p>
    <p>Nome completo: {{ persona.nome_completo }}.</p>
    <p>Solo cognome: {{ persona.cognome }}.</p>
    <p>Data di nascita: {{ persona.data_nascita }}.</p>
{% endblock %}

Notasi che in questo esempio, {% extends 'email.html' %} vuol dire che il modello eredita i contenuti (es. header e footer) da email.html.

2. Inviare la e-mail da una vista

Il metodo piu' rapido e' quello di usare uno dei due metodi scorciatoia:

  • Messaggio.costruisci_e_invia per inviare immediatamente,
  • Messaggio.costruisci_e_accoda per accodare il messaggio per l'invio asincrono.

Entrambe le funzioni hanno la stessa firma, ovvero:

  • oggetto. Oggetto del messaggio. Obbligatorio.
  • modello. Modello del messaggio (in /posta/templates/). Obbligatorio.
  • corpo. Dizionario che contiene le sostituzioni. Opzionale. Da includere solo se almeno una variabile nel modello.
  • mittente. Mittente del messaggio. Opzionale. Se non specificato o None, il mittente sara' Gaia (notifica di sistema).
  • destinatari. Destinatario del messaggio. Opzionale. Se non specificato o [], il destinatario sara' il Supporto di Gaia.

Seguono degli esempi di utilizzo.

Invio immediato a due destinatari

Messaggio.costruisci_e_invia(
    oggetto="Oggetto del messaggio",
    modello="email_attivita_partecipazione_concessa.html",
    corpo={
        "esempio": "La mia variabile",
        "persona": Persona.objects.get(codice_fiscale='XYZ'),
    },
    mittente=me,  # me=utente attuale, qualunque Persona o None per notifica di sistema.
    destinatari=[
        Persona.objects.get(codice_fiscale='ABC'),
        Persona.objects.get(codice_fiscale='DEF')
    ]
)

Invio in coda a tutto un comitato

presidente = Persona.objects.get(codice_fiscale='AXD')
comitato = Sede.objects.get(id=123)

Messaggio.costruisci_e_accoda(
    oggetto="Oggetto del messaggio di massa",
    modello="email_attivita_partecipazione_concessa.html",
    corpo={
        "esempio": "La mia variabile",
        "persona": Persona.objects.get(codice_fiscale='XYZ'),
    },
    mittente=presidente,
    destinatari=comitato.membri_attuali()
)