代码之家  ›  专栏  ›  技术社区  ›  DougB

postgres中的sp_send_dbmail替代方案?发送Postgres电子邮件报告的简单方法?

  •  6
  • DougB  · 技术社区  · 6 年前

    quick guide here )你可以通过电子邮件发送报告。在博士后中是否存在类似的情况?我的postgres托管在Heroku,因此我可以共享一个数据剪辑,但我想知道是否有一种简单的方法来安排发送报告的电子邮件。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Johnny    6 年前

    你可以用 pgMail 从PostgreSQL内部发送邮件。

    先决条件:

    在使用pgMail之前,必须安装TCL/u过程语言。TCL/u是TCL的无限制版本,您的数据库可以在其存储函数中使用。在所有数据库中安装无限制的TCL过程语言之前,请考虑将TCL/u语言添加到数据库时必须准备足够的安全预防措施!我不会对错误配置的服务器负责,这些服务器允许危险用户做坏事!

    # createlang pltclu [YOUR DATABASE NAME]
    

    代替 [YOUR DATABASE NAME] ,将存储过程添加到的数据库的名称。如果希望将其添加到所有新数据库中,请使用“template1”作为数据库名称。

    替换文本 <ENTER YOUR MAILSERVER HERE> 使用您的邮件服务器的完全限定域名。i、 电子邮件。服务器通用域名格式。

    替换文本 <ENTER YOUR DATABASESERVER HERE>

    在此步骤之后,使用psql接口添加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.');
    

    我给你举了一个例子。必须首先替换示例中的字符串。处决sql脚本和您的真实电子邮件地址,并安装plpgsql语言,就像您在上面安装pltclu一样。您可以通过输入 createlang [YOUR DATABASE NAME] plpgsql .

    完成后,首先运行示例。设置。sql。然后执行示例。处决sql脚本。如果一切正常,您将在邮箱中看到2封电子邮件。要删除此示例,请执行 example.cleanup.sql 剧本

    pgMail不支持SMTP身份验证。大多数使用它的人要么在数据库服务器上为本地排队设置本地邮件服务器,然后将该设置用于任何需要的中继(使用auth)。或者,通常在/etc/mail/access(或等效文件)文件中制定特殊规则,以允许从数据库服务器使用的IP进行中继。显然,后一种选择不适用于GMail。

    这背后的部分原因是,对于大型作业,auth在pgMail的事务性方面存在问题。理想的解决方案是在数据库服务器上放置一个EXIM服务器,并将其作为智能中继服务器处理任何类型的身份验证。这里有一个链接,有更多关于 how to set SMTP server up

    文档: http://brandolabs.com/pgmail

        2
  •  1
  •   a_horse_with_no_name    6 年前

    您还可以使用py_pgmail from https://github.com/lcalisto/py_pgmail

    1. 创建函数后,只需从数据库中的任意位置调用函数,如下所示:

      select py_pgmail('sentFromEmail',
                       array['destination emails'],
                       array['cc'],
                       array['bcc'],
                       'Subject',
                       '<USERNAME>','<PASSWORD>',
                       'Text message','HTML message',
                       '<MAIL.MYSERVER.COM:PORT>')
      

    array['cc'] array['bcc'] array['']