sql >> Database >  >> RDS >> PostgreSQL

sp_send_dbmail alternatief in postgres? Gemakkelijke manier om Postgres e-mailrapporten te verzenden?

U kunt pgMail . gebruiken om e-mail te verzenden vanuit PostgreSQL.

Vereisten:

Voordat u pgMail kunt gebruiken, moet u de proceduretaal TCL/u installeren. TCL/u is een ONBEPERKTE versie van TCL die uw database kan gebruiken in de opgeslagen functies. Voordat u doorgaat met het installeren van de onbeperkte TCL-proceduretaal in al uw databases, moet u er rekening mee houden dat u adequate veiligheidsmaatregelen moet nemen wanneer u de TCL/u-taal aan uw database toevoegt! Ik ben niet verantwoordelijk voor verkeerd geconfigureerde servers waardoor gevaarlijke gebruikers slechte dingen kunnen doen!

Om de proceduretaal TCL/u te installeren, moet u de TCL-extensies van PostgreSQL hebben gecompileerd (of binaire pakketten gebruikt) en geïnstalleerd. Zodra u zeker weet dat dit is voltooid, typt u als databasebeheerder het volgende achter de unix-shellprompt.

# createlang pltclu [YOUR DATABASE NAME]

In plaats van [YOUR DATABASE NAME] , voer dan de naam in van de database waaraan u de opgeslagen procedure wilt toevoegen. Als je wilt dat het wordt toegevoegd aan alle NIEUWE databases, gebruik dan "template1" als je databasenaam.

Voordat u een nieuwe procedure aan de DB toevoegt, doet u eerst:

Vervang de tekst <ENTER YOUR MAILSERVER HERE> met de volledig gekwalificeerde domeinnaam voor uw mailserver. d.w.z. mail.server.com.

Vervang de tekst <ENTER YOUR DATABASESERVER HERE> met de volledig gekwalificeerde domeinnaam voor uw databaseserver. d.w.z. db.server.com.

Zodra je het bovenstaande hebt gedaan, ben je klaar om te gaan.

Gebruik na deze stap de psql-interface om de pgMail-functie toe te voegen. Kopieer gewoon de inhoud van het bestand pgmail.sql en plak het in uw venster. U kunt het ook rechtstreeks vanaf de opdrachtregel laden door te typen:

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

Nadat u de opgeslagen functie hebt geïnstalleerd, roept u de procedure als volgt aan.

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.');

Of nu, meerdelige MIME!

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

In zowel de velden "Verzenden van" als "Verzenden naar" kunt u ofwel alleen de e-mail opnemen, ofwel de e-mail tussen <> met een platte tekstnaam.

Uw installatie testen

Ik heb een voorbeeld voor je toegevoegd om te proberen. U MOET EERST de string in het script example.execute.sql vervangen door uw echte e-mailadres en de plpgsql-taal installeren zoals u de pltclu hierboven deed. U kunt dat doen door een createlang [YOUR DATABASE NAME] plpgsql in te voeren .

Zodra dat is voltooid, voert u eerst het voorbeeld.setup.sql uit. Voer vervolgens het script voorbeeld.execute.sql uit. Als alles goed werkt, zie je 2 e-mails in je mailbox. Om dit voorbeeld te verwijderen, voert u de opdracht example.cleanup.sql . uit schrift.

SMTP-verificatie

pgMail ondersteunt geen SMTP-verificatie. De meeste mensen die het gebruiken, zetten ofwel een lokale mailserver op de databaseserver op voor lokale wachtrijen en gebruiken die setup vervolgens voor elke vereiste relayering (met auth). Of, als alternatief, is er meestal een speciale regel gemaakt in het /etc/mail/access (of equivalent) bestand om het doorgeven van dat IP-adres dat door de databaseserver wordt gebruikt, toe te staan. Uiteraard werkt de laatste optie niet met GMail.

Een deel van de redenering hierachter is dat auth problematisch zal zijn in de transactionele aard van pgMail voor grote opdrachten. De ideale oplossing zou zijn om een ​​EXIM-server op de databaseserver te laten vallen en die elk type authenticatie als een slimme relaisserver te laten afhandelen. Hier is een link met meer informatie over hoe de SMTP-server in te stellen .

Documentatie:http://brandolabs.com/pgmail



  1. Hoe combineer ik gegevens uit twee afzonderlijke tabellen in een enkele cursor?

  2. Geneste lussen Joins en prestatiespoelen

  3. Postgres ORDER BY-waarden in IN-lijst met Rails Active Record

  4. Hoe input van de gebruiker te krijgen tijdens runtime