PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

sp_send_dbmail-Alternative in Postgres? Einfache Möglichkeit, Postgres-E-Mail-Berichte zu senden?

Sie können pgMail verwenden um E-Mails aus PostgreSQL heraus zu versenden.

Voraussetzungen:

Bevor Sie pgMail verwenden können, müssen Sie die prozedurale Sprache TCL/u installieren. TCL/u ist eine UNEINGESCHRÄNKTE Version von TCL, die Ihre Datenbank in ihren gespeicherten Funktionen verwenden kann. Bevor Sie sich daran machen, die uneingeschränkte prozedurale Sprache TCL in all Ihren Datenbanken zu installieren, bedenken Sie, dass Sie angemessene Sicherheitsvorkehrungen treffen müssen, wenn Sie die Sprache TCL/u zu Ihrer Datenbank hinzufügen! Ich übernehme keine Verantwortung für falsch konfigurierte Server, die es gefährlichen Benutzern ermöglichen, schlechte Dinge zu tun!

Um die prozedurale Sprache TCL/u zu installieren, müssen Sie die TCL-Erweiterungen von PostgreSQL kompiliert (oder Binärpakete verwendet) und installiert haben. Wenn Sie sicher sind, dass dies abgeschlossen ist, geben Sie als Datenbankadministrator einfach Folgendes am Unix-Shell-Prompt ein.

# createlang pltclu [YOUR DATABASE NAME]

Anstelle von [YOUR DATABASE NAME] , geben Sie den Namen der Datenbank ein, zu der Sie die gespeicherte Prozedur hinzufügen werden. Wenn Sie möchten, dass es zu allen NEUEN Datenbanken hinzugefügt wird, verwenden Sie "template1" als Ihren Datenbanknamen.

Bevor Sie der DB eine neue Prozedur hinzufügen, tun Sie zuerst:

Ersetzen Sie den Text <ENTER YOUR MAILSERVER HERE> mit dem vollqualifizierten Domänennamen für Ihren Mailserver. dh mail.server.com.

Ersetzen Sie den Text <ENTER YOUR DATABASESERVER HERE> mit dem vollständig qualifizierten Domänennamen für Ihren Datenbankserver. d. h. db.server.com.

Sobald Sie die oben genannten Schritte ausgeführt haben, können Sie loslegen.

Verwenden Sie nach diesem Schritt die psql-Schnittstelle, um die pgMail-Funktion hinzuzufügen. Kopieren Sie einfach den Inhalt der pgmail.sql-Datei und fügen Sie ihn in Ihr Fenster ein. Sie können es auch direkt von der Befehlszeile aus laden, indem Sie Folgendes eingeben:

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

Nachdem Sie die gespeicherte Funktion installiert haben, rufen Sie die Prozedur einfach wie folgt auf.

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

Oder jetzt mehrteiliges MIME!

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

Sowohl in den Feldern „Senden von“ als auch „Senden an“ können Sie entweder nur die E-Mail oder die in <> eingeschlossene E-Mail mit einem Klartextnamen einschließen.

Testen Ihrer Installation

Ich habe ein Beispiel für Sie beigefügt, damit Sie es ausprobieren können. Sie MÜSSEN ZUERST die Zeichenfolge im Skript example.execute.sql durch Ihre echte E-Mail-Adresse ersetzen und die plpgsql-Sprache so installieren, wie Sie es oben mit pltclu getan haben. Sie können dies tun, indem Sie createlang [YOUR DATABASE NAME] plpgsql eingeben .

Sobald dies abgeschlossen ist, führen Sie zuerst example.setup.sql aus. Führen Sie dann das Skript example.execute.sql aus. Vorausgesetzt, alles funktioniert gut, sehen Sie 2 E-Mails in Ihrem Postfach. Um dieses Beispiel zu entfernen, führen Sie example.cleanup.sql aus Skript.

SMTP-Authentifizierung

pgMail unterstützt keine SMTP-Authentifizierung. Die meisten Leute, die es verwenden, richten entweder einen lokalen Mailserver auf dem Datenbankserver für lokale Warteschlangen ein und verwenden dieses Setup dann für alle erforderlichen Weiterleitungen (mit Authentifizierung). Oder alternativ gibt es normalerweise eine spezielle Regel in der /etc/mail/access (oder gleichwertigen) Datei, um die Weiterleitung von dieser IP zu erlauben, die vom Datenbankserver verwendet wird. Offensichtlich funktioniert die letztere Option nicht mit GMail.

Ein Teil der Argumentation dahinter ist, dass auth in der Transaktionsnatur von pgMail für große Jobs problematisch sein wird. Die ideale Lösung wäre, einen EXIM-Server auf dem Datenbankserver abzulegen und diesen jede Art von Authentifizierung als Smart-Relay-Server handhaben zu lassen. Hier ist ein Link mit weiteren Informationen zum wie man den SMTP-Server einrichtet .

Dokumentation:http://brandolabs.com/pgmail