Sun Java System Messaging Server 6 2005Q4 管理指南

使用 Pipe 通道将邮件传送给程序

用户可能希望将外来邮件传递给程序而不是他们的邮箱。例如,用户可能希望将其外来邮件发送到邮件分类程序。pipe 通道使用站点提供的基于用户的程序执行邮件传送。

为了便于程序传送,必须首先将程序注册为能够通过 pipe 通道调用。可以使用 imsimta program 实用程序完成此操作。该实用程序为每个命令(注册为能够通过 pipe 通道调用)赋予唯一的名称。然后最终用户可以将方法名称指定为其 mailprogramdeliveryinfo LDAP 属性的值。

例如,要将 UNIX 命令 myprocmail 添加为用户可以调用的程序,应该首先使用 imsimta program 实用程序注册该命令,如以下示例所示。此示例注册了称作 myprocmail 的程序,该程序以用户身份执行带有参数 -d usernameprocmail 程序:

imsimta program -a -m myprocmail -p procmail -g "-d %s" -e user

请确保可执行程序存在于 programs 目录 msg_svr_base/data/site-programs 中。还要确保将执行权限设置为“其他”。

要使用户能够访问程序,用户的 LDAP 条目必须包含以下属性和值:

maildeliveryoption: program 
mailprogramdeliveryinfo: myprocmail

有关 imsimta program 实用程序的更多信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

其他传送程序必须符合以下出口代码和命令行参数限制:

出口代码限制。pipe 通道调用的传送程序必须返回有意义的错误代码,以便通道了解是使邮件出队列、传送邮件供日后处理还是返回邮件。

如果子进程使用出口代码 0 (EX_OK) 退出,则认为邮件已成功传送,并将其从 MTA 队列中删除。如果使用出口代码 71、74、75 或 79(EX_OSERREX_IOERREX_TEMPFAILEX_DB)退出,则认为出现临时错误,邮件的传送将被延迟。如果返回其他任何出口代码,邮件将被作为无法传送的邮件返回其创始者。系统标题文件 sysexits.h 中对这些出口代码进行了定义。

命令行参数。传送程序可以具有任意数量的固定参数和变量参数 %s。对于由用户执行的程序,该变量参数代表用户名;对于由邮寄主管 ("inetmail") 执行的程序,该变量参数代表用户名和域。例如,以下命令行使用程序 procmail 传送收件人的邮件:

/usr/lib/procmail -d %s