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

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

使用者可能想將內送郵件傳送至程式,而不是電子信箱。例如,使用者可能想將內送郵件傳送至郵件排序程式。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 2005Q4 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