Sun Java System Messaging Server 6.3 管理指南

13.2 使用管道通道遞送郵件至程式

使用者可能會想將內送郵件傳送至程式,而不是電子信箱。例如,使用者可能想將內送的郵件傳送至郵件排序程式。pipe 通道使用針對使用者站點提供的程式,執行郵件遞送。

若要方便程式傳送,必須先將程式註冊為可由 pipe 通道進行呼叫。使用 imsimta program 公用程式可執行此作業。此公用程式會為每個指令指定唯一名稱,這些指令是您註冊為可由 pipe 通道呼叫的指令。接著,一般使用者即可指定方法名稱,做為其 mailprogramdeliveryinfo LDAP 屬性的值。

例如,若要增加 UNIX 指令 myprocmail 做為可由使用者呼叫的程式,應先使用 imsimta program 公用程式註冊該指令,如下例所示。此範例會註冊名為 myprocmail 的程式,用以執行附有引數 -d username 的程式 procmail,而且是以使用者身份執行:

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

請確定可執行檔位於 programs 目錄 msg-svr-base/data/site-programs 中。同時請確實將執行權限設為「others」。

若要讓使用者可存取此程式,使用者的 LDAP 項目中必須包含以下屬性和值:

maildeliveryoption: program 
mailprogramdeliveryinfo: myprocmail

如需有關 imsimta program 公用程式的更多資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」

替代遞送程式必須遵循以下退出碼和指令行引數限制

結束碼限制。pipe 通道呼叫的傳送程式必須傳回有意義的錯誤碼,以使通道瞭解是否將郵件移出佇列、傳送以便以後處理或傳回郵件。

如果子程序結束,而結束碼為 0 (EX_OK),則表示郵件傳送成功,並已從 MTA 佇列中移除。若子程序結束,而結束碼為 71、74、75 或 79 (EX_OSERREX_IOERREX_TEMPFAILEX_DB),則表示發生暫時性錯誤,將延遲遞送郵件。如果傳回任何其他退出碼,則郵件將被作為無法遞送的郵件傳回給創建者。這些結束碼均定義於系統標頭檔案 sysexits.h 中。

指令行引數。傳送程式可以帶有任意多個固定引數以及可變引數 %s,該可變引數表示使用者執行程式時所用的使用者名稱,或是 Postmaster (「inetmail」) 執行程式時所用的使用者名稱+網域。例如,以下指令行將使用 procmail 程式遞送收件者的郵件:

/usr/lib/procmail -d %s