如何从IBM iSeries DB2 v7.1发送电子邮件

时间:2015-05-26 15:54:58

标签: email db2-400

我正在尝试创建一个基于数据库事件发送电子邮件的触发器,具体来说,当在某个表中插入记录时,我想要一封电子邮件说明该事实要转到SysAdmin。

我可以在iSeries Navigator中的SQL窗口中成功执行以下操作:

CL:SNDDST TYPE(*LMSG) 
   TOINTNET(('sysadmin@mycompany.com')) 
   DSTD('this is the Subject Line') 
   LONGMSG('This is an Email sent from iSeries box via Navigator')

...并发送电子邮件。这意味着必要的SMTP内容正在运行。

所以我想要做的就是封装这段代码,也许还有一些数据更改(例如“在一个sysdate-is上,已经将一条记录添加到XYZ表中”)。 Navigator有一些诱人的例子,它们调用CL做一些普通的东西,但没有关于如何使它在触发器中工作的线索。我知道如何编写执行“数据库内容”的触发器,但不知道这个CL的东西。这是iSeries DB2,因此我无权访问UTL_MAIL。

我对CL,DDS或其他iSeries内部机构几乎一无所知...我宁愿不必创建外部Java程序,但作为最后的手段会这样做...但即便如此,我也是很难找到直截了当的例子。

提前感谢。

3 个答案:

答案 0 :(得分:0)

首先请注意,SNDDST不是来自IBM i的互联网邮件的最佳选择。基本上,SNDDST是SNADS网络时代的一个遗留物,IBM攻击支持SMTP电子邮件。有免费的替代方案,或者如果您对7.1的修复程序有合理的当前情况,那么您应该可以使用发送SMTP电子邮件(SNDSMTPEMM)命令。

iNav的Run SQL Scripts窗口确实支持使用CL:前缀的CL命令。但这与查询引擎本身理解CL不同。

CL:前缀不能在SQL触发器内工作。

但是,您可以use the QCMDEXC stored procedure来调用CL命令。但我不一定称之为最佳选择。

IBM i支持使用" external"存储过程和触发器。从理论上讲,您可以使用直接调用SNDSMTPEMM命令的CL程序。但是,如果您希望包含表格中的数据,我建议您不要将这种方法与表格结构联系起来。

相反,创建自己的UTLMAILSND CL程序来调用SNDSMTPEMM。然后将UTLMAILSND程序定义为external stored procedure(您甚至可以为其提供更长的SQL名称UTIL_MAIL_SEND)。

现在,您可以从SQL触发器调用UTIL_MAIL_SEND()过程。

答案 1 :(得分:0)

您需要尝试SNDSMTPEMM命令。它与切片面包相比SNDDST TYPE(*LMSG)它也支持HTML,这会带来很多乐趣。

答案 2 :(得分:0)

是的,我使用了SNDSMPTEMM(暂时跳过html ......)。

然而,一个重要的注意事项是:在从CL调用SQL程序时使用此命令不起作用。我不得不把它改成CLLE程序。

所以最终的答案如下:a)所讨论的表上的INSERT触发器,它调用:b)在数据库中创建的(外部)PROCEDURE,后者又调用:c)编译的CLLE程序对象。像魅力一样。

P.S。我在INSERT触发器中创建了整个电子邮件,然后将其传递给CLLE程序。这允许我只有这一个CLLE程序来报告数据库中任何地方的任何INSERT / UPDATE / DELETE。