PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

sp_send_dbmail alternativa in postgres? Un modo semplice per inviare report e-mail a Postgres?

Puoi usare pgMail per inviare posta da PostgreSQL.

Prerequisiti:

Prima di poter usare pgMail, devi installare il linguaggio procedurale TCL/u. TCL/u è una versione UNRESTRICTED di TCL che il database può utilizzare nelle sue funzioni memorizzate. Prima di impazzire installando il linguaggio procedurale TCL illimitato in tutti i tuoi database, tieni presente che devi preparare adeguate precauzioni di sicurezza quando aggiungi il linguaggio TCL/u al tuo database! Non sarò responsabile per server mal configurati che consentono a utenti pericolosi di fare cose cattive!

Per installare il linguaggio procedurale TCL/u, devi aver compilato (o utilizzato pacchetti binari) e installato le estensioni TCL di PostgreSQL. Una volta che sei sicuro che questo sia stato completato, digita semplicemente quanto segue al prompt della shell unix come amministratore del database.

# createlang pltclu [YOUR DATABASE NAME]

Al posto di [YOUR DATABASE NAME] , inserisci il nome del database a cui andrai ad aggiungere la stored procedure. Se vuoi che venga aggiunto a tutti i NUOVI database, usa "template1" come nome del tuo database.

Prima di aggiungere una nuova procedura al DB, eseguire innanzitutto:

Sostituisci il testo <ENTER YOUR MAILSERVER HERE> con il nome di dominio completo per il tuo server di posta. cioè, mail.server.com.

Sostituisci il testo <ENTER YOUR DATABASESERVER HERE> con il nome di dominio completo per il server del database. cioè db.server.com.

Dopo aver fatto quanto sopra, sei pronto per partire.

Dopo questo passaggio, usa l'interfaccia psql per aggiungere la funzione pgMail. Basta copiare il contenuto del file pgmail.sql e incollarlo nella finestra. Puoi anche caricarlo direttamente dalla riga di comando digitando:

# psql -e [YOUR DATABASE NAME] < pgMail.sql

Una volta installata la funzione memorizzata, è sufficiente richiamare la procedura come segue.

select pgmail('Send From ','Send To ','Subject goes here','Plaintext message body here.');

select pgmail('Send From ','Send To ','Subject goes here','','HTML message body here.');

O ora, MIME multiparte!

select pgmail('Send From ','Send To ', 'Subject goes here','Plaintext message body here.', 'HTML message body here.');

In entrambi i campi "Invia da" e "Invia a", puoi includere solo l'e-mail o l'e-mail racchiusa tra <> con un nome in chiaro.

Test dell'installazione

Ho incluso un esempio per farti provare. DEVI PRIMA sostituire la stringa nello script example.execute.sql con il tuo vero indirizzo e-mail e installare la lingua plpgsql proprio come hai fatto pltclu sopra. Puoi farlo inserendo un createlang [YOUR DATABASE NAME] plpgsql .

Una volta completato, eseguire prima il file example.setup.sql. Quindi eseguire lo script esempio.execute.sql. A condizione che tutto funzioni bene, vedrai 2 email nella tua casella di posta. Per rimuovere questo esempio, esegui example.cleanup.sql copione.

Autenticazione SMTP

pgMail non supporta l'autenticazione SMTP. La maggior parte delle persone che lo utilizzano configurano un server di posta locale sul server del database per l'accodamento locale e quindi utilizzano tale configurazione per qualsiasi inoltro richiesto (con autenticazione). Oppure, in alternativa, di solito è presente una regola speciale nel file /etc/mail/access (o equivalente) per consentire l'inoltro da quell'IP utilizzato dal server del database. Ovviamente, quest'ultima opzione non funziona con GMail.

Parte del ragionamento alla base di questo è che l'autenticazione sarà problematica nella natura transazionale di pgMail per i grandi lavori. La soluzione ideale sarebbe abbandonare un server EXIM sul server di database e fare in modo che gestisca qualsiasi tipo di autenticazione come server del modulo logico. Ecco un link con maggiori informazioni su come impostare il server SMTP .

Documentazione:http://brandolabs.com/pgmail