def costruisci_email(oggetto='Nessun oggetto', modello='email_vuoto.html', corpo=None, mittente=None, destinatari=None, allegati=None, **kwargs): """ :param oggetto: Oggetto del messaggio. :param modello: Modello da utilizzare per l'invio. :param corpo: Sostituzioni da fare nel modello. Dizionario {nome: valore} :param mittente: Mittente del messaggio. None per Notifiche da Gaia. :param destinatari: Un elenco di destinatari (oggetti Persona). :param allegati: Allegati messaggio :return: Un oggetto Messaggio """ destinatari = destinatari or [] allegati = allegati or [] corpo = corpo or {} corpo.update({ 'mittente': mittente, }) oggetto = Truncator(oggetto).chars(Messaggio.LUNGHEZZA_MASSIMA_OGGETTO) with transaction.atomic(): m = Messaggio(oggetto=oggetto, mittente=mittente, **kwargs) allegati_objects = list() for a in allegati: if isinstance(a, Allegato): a.oggetto = m a.save() else: allegato = Allegato(file=a, nome=a.name) allegato.oggetto = m allegato.save() allegati_objects.append(allegato) corpo[ 'allegati'] = allegati_objects if allegati_objects else allegati m.corpo = get_template(modello).render(corpo) m.processa_link() m.save() for d in destinatari: m.oggetti_destinatario.create(persona=d) return m
def do(self): n = Allegato.pulisci() print("Sono stati rimossi %d file scaduti." % n)
def posta_scrivi(request, me): destinatari = Persona.objects.none() # Prova a recuperare destinatari dalla sessione. try: timestamp = request.session["messaggio_destinatari_timestamp"] if ( timestamp and timestamp > (now() - timedelta(seconds=settings.POSTA_MASSIVA_TIMEOUT)) ): # max POSTA_MASSIVA_TIMEOUT secondi fa destinatari = request.session["messaggio_destinatari"] except KeyError: # Nessun destinatario in sessione. pass # Svuota eventuale sessione request.session["messaggio_destinatari"] = None request.session["messaggio_destinatari_timestamp"] = None MAX_VISIBILI = 20 MAX_VISIBILI_STR = "%d destinatari selezionati" if destinatari: # Ho appena scaricato i destinatari if destinatari.count() > MAX_VISIBILI: modulo = ModuloScriviMessaggioConDestinatariNascosti(initial={ "destinatari": [x.pk for x in destinatari], "destinatari_selezionati": MAX_VISIBILI_STR % (destinatari.count(),) }) else: modulo = ModuloScriviMessaggioConDestinatariVisibili(initial={ "destinatari": [x.pk for x in destinatari], }) else: # Normale if len(request.POST.getlist('destinatari')) > MAX_VISIBILI: modulo = ModuloScriviMessaggioConDestinatariNascosti(request.POST or None, request.FILES or None, initial={ "destinatari_selezionati": MAX_VISIBILI_STR % (destinatari.count(),) }) else: modulo = ModuloScriviMessaggioConDestinatariVisibili(request.POST or None, request.FILES or None) if modulo.is_valid(): allegati = [] for a in modulo.cleaned_data['allegati']: ai = Allegato(file=a, nome=a.name) ai.scadenza = datetime.now() + timedelta(days=15) ai.save() allegati.append(ai) # Invia o accoda il messaggio, a seconda del numero di destinatari. if len(modulo.cleaned_data['destinatari']) > MAX_VISIBILI: funzione = Messaggio.costruisci_e_accoda azione = "accodato" else: funzione = Messaggio.costruisci_e_invia azione = "inviato" messaggio = funzione( oggetto=modulo.cleaned_data['oggetto'], modello='email_utente.html', corpo={"testo": modulo.cleaned_data['testo']}, allegati=allegati, mittente=me, destinatari=[ el if isinstance(el, Persona) else Persona.objects.get(pk=int(el)) for el in modulo.cleaned_data['destinatari'] ], ) # Porta alla schermata del messaggio. return redirect("/posta/in-uscita/1/%d/?%s" % (messaggio.pk, azione,)) contesto = { "modulo": modulo, } return 'posta_scrivi.html', contesto
def posta_scrivi(request, me): destinatari = Persona.objects.none() # Prova a recuperare destinatari dalla sessione. try: timestamp = request.session["messaggio_destinatari_timestamp"] if (timestamp and timestamp > (now() - timedelta(seconds=settings.POSTA_MASSIVA_TIMEOUT))): # max POSTA_MASSIVA_TIMEOUT secondi fa destinatari = request.session["messaggio_destinatari"] except KeyError: # Nessun destinatario in sessione. pass # Svuota eventuale sessione request.session["messaggio_destinatari"] = None request.session["messaggio_destinatari_timestamp"] = None MAX_VISIBILI = 20 MAX_VISIBILI_STR = "%d destinatari selezionati" if destinatari: # Ho appena scaricato i destinatari if destinatari.count() > MAX_VISIBILI: modulo = ModuloScriviMessaggioConDestinatariNascosti( initial={ "destinatari": [x.pk for x in destinatari], "destinatari_selezionati": MAX_VISIBILI_STR % (destinatari.count(), ) }) else: modulo = ModuloScriviMessaggioConDestinatariVisibili(initial={ "destinatari": [x.pk for x in destinatari], }) else: # Normale if len(request.POST.getlist('destinatari')) > MAX_VISIBILI: modulo = ModuloScriviMessaggioConDestinatariNascosti( request.POST or None, request.FILES or None, initial={ "destinatari_selezionati": MAX_VISIBILI_STR % (destinatari.count(), ) }) else: modulo = ModuloScriviMessaggioConDestinatariVisibili( request.POST or None, request.FILES or None) if modulo.is_valid(): allegati = [] for a in modulo.cleaned_data['allegati']: ai = Allegato(file=a, nome=a.name) ai.scadenza = datetime.now() + timedelta(days=15) ai.save() allegati.append(ai) messaggio = Messaggio.costruisci( oggetto=modulo.cleaned_data['oggetto'], modello='email_utente.html', corpo={"testo": modulo.cleaned_data['testo']}, allegati=allegati, mittente=me, destinatari=[ el if isinstance(el, Persona) else Persona.objects.get( pk=int(el)) for el in modulo.cleaned_data['destinatari'] ], ) # Invia o accoda il messaggio, a seconda del numero di destinatari. if len(modulo.cleaned_data['destinatari']) > MAX_VISIBILI: messaggio.accoda() azione = "accodato" else: messaggio.invia() azione = "inviato" # Porta alla schermata del messaggio. return redirect("/posta/in-uscita/1/%d/?%s" % ( messaggio.pk, azione, )) contesto = { "modulo": modulo, } return 'posta_scrivi.html', contesto
def posta_scrivi(request, me): MAX_VISIBILI = 20 MAX_VISIBILI_STR = "%d destinatari selezionati" # Prova a recuperare destinatari dalla sessione. destinatari_in_sessione = request.session.get('messaggio_destinatari') destinatari = destinatari_in_sessione if destinatari_in_sessione else Persona.objects.none() # Svuota eventuale sessione request.session["messaggio_destinatari"] = None request.session["messaggio_destinatari_timestamp"] = None destinatari_count = destinatari.count() max_visibili_count = MAX_VISIBILI_STR % destinatari_count if destinatari: # Ho appena scaricato i destinatari destinatari_list = [x.pk for x in destinatari] if destinatari_count > MAX_VISIBILI: form = ModuloScriviMessaggioConDestinatariNascosti(initial={'destinatari': destinatari_list, 'destinatari_selezionati': max_visibili_count}) else: form = ModuloScriviMessaggioConDestinatariVisibili(initial={'destinatari': destinatari_list,}) else: # Normale if len(request.POST.getlist('destinatari')) > MAX_VISIBILI: form = ModuloScriviMessaggioConDestinatariNascosti( request.POST or None, request.FILES or None, initial={ "destinatari_selezionati": max_visibili_count}) else: form = ModuloScriviMessaggioConDestinatariVisibili(request.POST or None, request.FILES or None) if form.is_valid(): cd = form.cleaned_data allegati = list() for a in cd['allegati']: allegato = Allegato(file=a, nome=a.name) allegato.scadenza = datetime.now() + timedelta(days=15) allegato.save() allegati.append(allegato) # Invia o accoda il messaggio, a seconda del numero di destinatari. if len(cd['destinatari']) > MAX_VISIBILI: funzione = Messaggio.costruisci_e_accoda azione = "accodato" else: funzione = Messaggio.costruisci_e_invia azione = "inviato" messaggio = funzione( oggetto=cd['oggetto'], modello='email_utente.html', corpo={"testo": cd['testo']}, allegati=allegati, mittente=me, destinatari=[el if isinstance(el, Persona) else Persona.objects.get(pk=int(el)) for el in cd['destinatari'] ], ) # Porta alla schermata del messaggio. return redirect("/posta/in-uscita/1/%d/?%s" % (messaggio.pk, azione,)) return 'posta_scrivi.html', {'modulo': form}
def posta_scrivi(request, me): MAX_VISIBILI = 20 MAX_VISIBILI_STR = "%d destinatari selezionati" # Prova a recuperare destinatari dalla sessione. destinatari_in_sessione = request.session.get('messaggio_destinatari') destinatari = destinatari_in_sessione if destinatari_in_sessione else Persona.objects.none( ) # Svuota eventuale sessione request.session["messaggio_destinatari"] = None request.session["messaggio_destinatari_timestamp"] = None destinatari_count = destinatari.count() max_visibili_count = MAX_VISIBILI_STR % destinatari_count if destinatari: # Ho appena scaricato i destinatari destinatari_list = [x.pk for x in destinatari] if destinatari_count > MAX_VISIBILI: form = ModuloScriviMessaggioConDestinatariNascosti( initial={ 'destinatari': destinatari_list, 'destinatari_selezionati': max_visibili_count }) else: form = ModuloScriviMessaggioConDestinatariVisibili( initial={ 'destinatari': destinatari_list, }) else: # Normale if len(request.POST.getlist('destinatari')) > MAX_VISIBILI: form = ModuloScriviMessaggioConDestinatariNascosti( request.POST or None, request.FILES or None, initial={"destinatari_selezionati": max_visibili_count}) else: form = ModuloScriviMessaggioConDestinatariVisibili( request.POST or None, request.FILES or None) if form.is_valid(): cd = form.cleaned_data allegati = list() for a in cd['allegati']: allegato = Allegato(file=a, nome=a.name) allegato.scadenza = datetime.now() + timedelta(days=15) allegato.save() allegati.append(allegato) # Invia o accoda il messaggio, a seconda del numero di destinatari. if len(cd['destinatari']) > MAX_VISIBILI: funzione = Messaggio.costruisci_e_accoda azione = "accodato" else: funzione = Messaggio.costruisci_e_invia azione = "inviato" messaggio = funzione( oggetto=cd['oggetto'], modello='email_utente.html', corpo={"testo": cd['testo']}, allegati=allegati, mittente=me, destinatari=[ el if isinstance(el, Persona) else Persona.objects.get( pk=int(el)) for el in cd['destinatari'] ], ) # Porta alla schermata del messaggio. return redirect("/posta/in-uscita/1/%d/?%s" % ( messaggio.pk, azione, )) return 'posta_scrivi.html', {'modulo': form}