sql >> データベース >  >> RDS >> PostgreSQL

postgresのsp_send_dbmailの代替? Postgresの電子メールレポートを送信する簡単な方法は?

    pgMailを使用できます PostgreSQL内からメールを送信します。

    前提条件:

    pgMailを使用する前に、TCL/u手続き型言語をインストールする必要があります。 TCL / uは、データベースが格納されている関数で使用できるTCLの無制限バージョンです。無制限のTCL手続き型言語をすべてのデータベースにインストールする前に、TCL / u言語をデータベースに追加するときに、適切なセキュリティ対策を準備する必要があることを考慮に入れてください。私は、危険なユーザーが悪いことをすることを可能にするサーバーの設定ミスについては責任を負いません!

    TCL / u手続き型言語をインストールするには、PostgreSQLのTCL拡張機能をコンパイル(またはバイナリパッケージを使用)してインストールしておく必要があります。これが完了したことを確認したら、データベース管理者としてUNIXシェルプロンプトで次のように入力します。

    # createlang pltclu [YOUR DATABASE NAME]
    

    [YOUR DATABASE NAME]の代わりに 、ストアドプロシージャを追加するデータベースの名前を入力します。すべての新しいデータベースに追加する場合は、データベース名として「template1」を使用します。

    DBに新しいプロシージャを追加する前に、まず次のことを行ってください。

    テキストを置き換えます<ENTER YOUR MAILSERVER HERE> メールサーバーの完全修飾ドメイン名を使用します。つまり、mail.server.com。

    テキストを置き換えます<ENTER YOUR DATABASESERVER HERE> データベースサーバーの完全修飾ドメイン名を使用します。つまり、db.server.com。

    上記を実行すると、準備が整います。

    このステップの後、psqlインターフェースを使用してpgMail関数を追加します。 pgmail.sqlファイルの内容をコピーして、ウィンドウに貼り付けるだけです。次のように入力して、コマンドラインから直接ロードすることもできます。

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

    ストアド関数をインストールしたら、次のようにプロシージャを呼び出すだけです。

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

    または今、マルチパートMIME!

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

    [送信元]フィールドと[送信先]フィールドの両方に、メールのみを含めるか、<>で囲まれたプレーンテキスト名のメールを含めることができます。

    インストールのテスト

    私はあなたが試すための例を含めました。まず、example.execute.sqlスクリプトの文字列を実際の電子メールアドレスに置き換え、上記のpltcluと同じようにplpgsql言語をインストールする必要があります。これを行うには、createlang [YOUR DATABASE NAME] plpgsqlを入力します。 。

    それが完了したら、最初にexample.setup.sqlを実行します。次に、example.execute.sqlスクリプトを実行します。すべてが正常に機能している場合、メールボックスに2通のメールが表示されます。この例を削除するには、example.cleanup.sqlを実行します スクリプト。

    SMTP認証

    pgMailはSMTP認証をサポートしていません。これを使用するほとんどの人は、データベースサーバー上にローカルキューイング用にローカルメールサーバーをセットアップしてから、必要なリレー(認証を使用)にそのセットアップを使用します。または、代わりに、通常、/ etc / mail / access(または同等の)ファイルで作成された特別なルールがあり、データベースサーバーによって使用されるそのIPからのリレーを許可します。明らかに、後者のオプションはGMailでは機能しません。

    この背後にある理由の一部は、大きなジョブのpgMailのトランザクションの性質においてauthが問題になるということです。理想的な解決策は、EXIMサーバーをデータベースサーバーにドロップし、スマートリレーサーバーとしてあらゆるタイプの認証を処理することです。 SMTPサーバーの設定方法 に関する詳細情報があるリンクは次のとおりです。 。

    ドキュメント: http://brandolabs.com/pgmail



    1. HAVING句で使用しているときにSELECTステートメントから列を省略するにはどうすればよいですか?

    2. rand()を使用したこのMySQLクエリが約3分の1の時間で結果を返さないのはなぜですか?

    3. phpMyAdminで外部キーを設定しますか?

    4. 左結合で結合された行の数を数える