如何从PostgreSQL触发器发送电子邮件?

时间:2012-08-17 08:49:52

标签: sql database postgresql pgadmin

我在使用pgsql设置触发器时更新表数据集(将状态更改为已完成) 它会使用数据集电子邮件值自动向电子邮件帐户发送电子邮件,并将此电子邮件保存在服务器

但我不知道如何写入触发功能来发送电子邮件,并在服务器中发送电子邮件。 提前谢谢

Pg版本为9.1,CentOS 5.8

CREATE OR REPLACE FUNCTION sss()
RETURNS trigger AS
$BODY$begin
if(NEW.publisher== 'aaaa')
then
//send email and save to server 192.168.171.64
end if;
return NEW;
end

$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sss()
OWNER TO postgres;
GRANT EXECUTE ON FUNCTION sss() TO postgres;

4 个答案:

答案 0 :(得分:2)

  1. 使用本地MTA(这为多个应用提供集中式SMTP配置)
  2. 让本地MTA中继到您真正的MTA(这实际上为您提供异步支持)
  3. 如果是windows,请使用blat SMTP命令行客户端。确保blat的路径在PATH
  4. 您应该使用Apache Camel或pgAgent,而不是直接在触发器
  5. 中执行此操作

    如果是postgres超级用户,这将在Windows上运行。触发功能应该是SECURITY DEFINER。类似于Linux上的sendmail:

    ...
    
    copy 
      ( select 'my email body' ) 
    to program 
      'blat -to to@example.com -from from@example.com -subject "My Subject" -server localhost:25' 
    with (
      format text
    );
    
    ...
    

    ~60 ms

答案 1 :(得分:1)

您可以使用plperlu发送邮件。

This链接显示了如何在触发器上使用它的示例。

答案 2 :(得分:1)

您可以使用pgMail(如果您可以安装它):

如果您按照brandolabs.com上的说明进行操作,请转到

pgmail('Send From ','Send To ','Subject goes here','Message body here.')

答案 3 :(得分:0)

我同意@Craig Ringer。您可以使用100行代码在Python中编写代码。我建议使用以下Python库:psycopg2,smtplib。根据您希望获得更改通知的频率,您可以运行cronjob(取决于您的工作环境)。这样,您可以将对数据库的多个更改聚合到一个电子邮件中,而不是每次发生更改时都发送通知。