.. _package/email/inviare_email: Inviare e-mail ============== Una volta configurato il package è possibile inviare e-mail in modo manuale o automatico. Come inviare manualmente e-mail con template -------------------------------------------- Per inviare manualmente un'email partendo da un template precedentemente disegnato è sufficiente selezionare uno o più record di interesse e cliccare sull'icona della bustina all'interno della tabella (es: ``Clienti``): .. image:: /_static/images/email/icona-bustina.png :width: 150px :align: center Nella schermata che apparirà sarà poi possibile inserire una ``Carta intestata`` ed eventualmente un ``Mailcode`` facoltativo, a indicare il "lotto" di invio. Uno degli utilizzi più comuni del package e-mail è relativo all'invio di e-mail automatiche, per esempio **e-mail di benvenuto dopo la registrazione** dell'utente, **e-mail di recupero password**, **e-mail contenenti dati** relativi all'inserimento di record. Come programmare l'invio automatico delle e-mail di registrazione nuovo utente e recupero password -------------------------------------------------------------------------------------------------- Nel caso in cui sia abilitata la registrazione degli utenti direttamente dalla schermata di login, all'interno delle ``Preferenze`` (il bottone in basso a destra con il nome dell'istanza) è possibile indicare l'account SMTP precedentemente configurato che verrà utilizzato per le e-mail di sistema: .. image:: /_static/images/email/package-email-preferenze.png :width: 500px :align: center Nella medesima schermata è inoltre possibile specificare un template di email per la *Conferma della Registrazione utente* o per il *Recupero della password*. Si noti che entrambi i modelli sono validi per l'invio solo nel momento in cui le checkbox ``Allow password recovery`` e ``New user registration`` sono attive. In caso contrario sarà necessario definire un metodo che prepari il record del messaggio per l'invio in un modo alternativo. È possibile **personalizzare integralmente** il testo e il design delle e-mail come semplice codice HTML (cliccando sull'icona in basso a sinistra e utilizzando il Rich Text Editor), nonché **inserire variabili predefinite**. Ad esempio, di default sono definite: - ``$greetings``, che si riempie con il valore del nome o alternativamente del cognome dell'utente - ``$link``, che produce un token che permette di impostare per la prima volta (o reimpostare) la password dell'utente all'accesso .. image:: /_static/images/email/email-automatiche-personalizzate.png :width: 400px :align: center .. hint:: È possibile impostare le variabili che si desidera personalizzando i metodi ``login_confirmUser``, ``login_confirmNewPassword`` e ``login_confirmNewPassword`` presenti nella risorsa ``login`` del :ref:`Package ADM` . Se la checkbox ``Save output message`` durante la :ref:`Configurazione dell'account` non è stata attivata l'invio sarà automatico, se invece è stata attivata non avverrà l'invio automatico della mail ma la **creazione di un record all'interno della tabella** ``Messaggi``: per l'invio dell'e-mail sarà necessario un ulteriore passaggio descritto nell'ultima sezione di questo documento. Utilizzare metodi per programmare l'invio automatico delle e-mail ----------------------------------------------------------------- Il caso della mail di Benvenuto e/o di recupero password è un caso piuttosto comune e per questo è stata prevista una modalità più esplicita, ma ci sono diversi altri casi in cui ci può interessare inviare automaticamente delle e-mail (es: alla generazione di un preventivo, alla creazione di un'anagrafica, ecc). In questi casi è opportuno sfruttare **template** creati con il template editor, **metodi e trigger customizzati** per preparare un nostro record *Messaggio* al verificarsi di specifiche condizioni. Per fare questo Genropy ci mette a disposizione il metodo *newMessageFromUserTemplate* così definito:: def newMessageFromUserTemplate(self,record_id=None,letterhead_id=None, template_id=None,table=None,template_code=None, attachments=None,to_address=None, subject=None, cc_address=None,bcc_address=None,from_address=None, account_id=None, **kwargs): mail_handler=self.db.application.site.getService('mail') return self.newMessage(**mail_handler.mailParsFromUserTemplate(record_id=record_id,letterhead_id=letterhead_id, template_id=template_id,table=table,template_code=template_code, attachments=attachments,to_address=to_address, subject=subject, cc_address=cc_address,bcc_address=bcc_address,from_address=from_address, account_id=account_id, **kwargs)) Come inviare automaticamente le e-mail programmate -------------------------------------------------- Una volta preimpostati i record dei messaggi e-mail questi non verranno inviati automaticamente senza che sia stata preimpostata un'operazione di invio pianificato. Innanzitutto se stiamo lavorando in locale l'invio di e-mail può essere effettuato **solo da un utente "vero"**, e non dall'utente admin di default che viene creato via xml in fase di installazione di Genropy. Per prima cosa quindi creiamo un utente admin con username e password ed effettuiamo il login con questo nuovo utente. Al nuovo utente in *E-mail Config > Accounts* assegneremo la capacità di inviare messaggi e spunteremo la checkbox ``Save output message`` come abbiamo mostrato in :ref:`Configurazione` Sempre da *Email Config > Accounts*, nella View troveremo **l'icona dell'ingranaggio** da cui sarà possibile selezionare l'opzione ``Send Messages``. Cliccando su ``Programma`` ci si presenterà la seguente schermata: .. image:: /_static/images/email/package-email-scheduler-dati.png :width: 600px :align: center Compilando la form sarà possibile pianificare l'invio in modo che venga eseguito **in una data precisa** (es: ogni 28 del mese), **in uno specifico giorno/ora** (es: ogni lunedì alle 7.00), oppure, come abbiamo fatto noi, **con una specifica frequenza** (es: ogni 5 minuti). A questo punto l'operazione è pianificata e verrà eseguita secondo le condizioni prestabilite. Un'ultimo passaggio da eseguire, sempre e solo se stiamo lavorando in locale, è il lancio in una nuova finestra del terminale del seguente processo:: gnrtaskworker nomeistanza Il *gnrtaskworker*, che funzionerà parallelamente al *gnrwsgiserve* che starà già eseguendo l'istanza, si occuperà per l'appunto dell'esecuzione dei processi che abbiamo pianificato. Il lancio di *gnrtaskworker* sul progetto pubblicato online non sarà invece necessario in quanto sarà stato reso automatico nella fase di deploy. .. sectionauthor:: Davide Paci