PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

alternative à sp_send_dbmail dans postgres ? Un moyen facile d'envoyer des rapports par e-mail Postgres ?

Vous pouvez utiliser pgMail pour envoyer du courrier depuis PostgreSQL.

Prérequis :

Avant de pouvoir utiliser pgMail, vous devez installer le langage procédural TCL/u. TCL/u est une version UNRESTRICTED de TCL que votre base de données peut utiliser dans ses fonctions stockées. Avant de devenir fou en installant le langage procédural TCL sans restriction dans toutes vos bases de données, tenez compte du fait que vous devez préparer des précautions de sécurité adéquates lors de l'ajout du langage TCL/u à votre base de données ! Je ne serai pas responsable des serveurs mal configurés permettant à des utilisateurs dangereux de faire de mauvaises choses !

Pour installer le langage procédural TCL/u, vous devez avoir compilé (ou utilisé des packages binaires) et installé les extensions TCL de PostgreSQL. Une fois que vous êtes sûr que cela a été fait, tapez simplement ce qui suit à l'invite du shell unix en tant qu'administrateur de base de données.

# createlang pltclu [YOUR DATABASE NAME]

A la place de [YOUR DATABASE NAME] , indiquez le nom de la base de données à laquelle vous allez ajouter la procédure stockée. Si vous souhaitez qu'il soit ajouté à toutes les NOUVELLES bases de données, utilisez "template1" comme nom de base de données.

Avant d'ajouter une nouvelle procédure à la base de données :

Remplacez le texte <ENTER YOUR MAILSERVER HERE> avec le nom de domaine complet de votre serveur de messagerie. c'est-à-dire, mail.server.com.

Remplacez le texte <ENTER YOUR DATABASESERVER HERE> avec le nom de domaine complet de votre serveur de base de données. c'est-à-dire, db.server.com.

Une fois que vous avez fait ce qui précède, vous êtes prêt à partir.

Après cette étape, utilisez l'interface psql pour ajouter la fonction pgMail. Copiez simplement le contenu du fichier pgmail.sql et collez-le dans votre fenêtre. Vous pouvez également le charger directement depuis la ligne de commande en tapant :

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

Une fois que vous avez installé la fonction mémorisée, appelez simplement la procédure comme suit.

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

Ou maintenant, MIME en plusieurs parties !

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

Dans les champs "Envoyer de" et "Envoyer à", vous pouvez inclure soit uniquement l'e-mail, soit l'e-mail entre <> avec un nom en clair.

Tester votre installation

J'ai inclus un exemple pour que vous puissiez essayer. Vous DEVEZ D'ABORD remplacer la chaîne dans le script example.execute.sql par votre véritable adresse e-mail, et installer le langage plpgsql comme vous l'avez fait avec le pltclu ci-dessus. Vous pouvez le faire en saisissant un createlang [YOUR DATABASE NAME] plpgsql .

Une fois cette opération terminée, exécutez d'abord example.setup.sql. Exécutez ensuite le script example.execute.sql. Si tout fonctionne bien, vous verrez 2 e-mails dans votre boîte aux lettres. Pour supprimer cet exemple, exécutez le example.cleanup.sql script.

Authentification SMTP

pgMail ne prend pas en charge l'authentification SMTP. La plupart des personnes qui l'utilisent configurent un serveur de messagerie local sur le serveur de base de données pour la mise en file d'attente locale, puis utilisent cette configuration pour tout relais requis (avec authentification). Ou, alternativement, il existe généralement une règle spéciale dans le fichier /etc/mail/access (ou équivalent) pour permettre le relais à partir de cette adresse IP utilisée par le serveur de base de données. Évidemment, cette dernière option ne fonctionne pas avec GMail.

Une partie du raisonnement derrière cela est que l'authentification sera problématique dans la nature transactionnelle de pgMail pour les gros travaux. La solution idéale serait de déposer un serveur EXIM sur le serveur de base de données et de faire en sorte qu'il gère tout type d'authentification en tant que serveur relais intelligent. Voici un lien qui contient plus d'informations sur comment configurer le serveur SMTP .

Documentation :http://brandolabs.com/pgmail