域级命令别名
当邮件到达时,给一个特定的域执行任意命令。但是,它的域必须非本地域名。
当邮件到达时,JDMail先确定目标域是否存在,如果没找到,检查是否有针对该域的指令,然后运行指令。
用户级命令别名
命令别名,是自定义域处理的用户版本。是为了邮件到达时,给一本地域的特定用户名运行任意命令。但是,特定用户应该是“不存在的”。
检查SMTP会话的目标地址(RCPT TO是否在本地用户中存在,如果不是本地域用户,就搜索目标地址的命令别名,如果存在就执行已经定义的指令。
用户级投递管理
自定义用户处理,当邮件到达本地特定用户时,可以执行任意的指令。
命令别名指令格式:
指令 (空白) 参数(宏) (空白) ...... (换行)
"指令" 是jdmail的内部命令。可以是OS系统的内部命令或外部命令、批处理脚本(Windows),您可以指定任何其它支持标准输入输出的程序。 "参数(宏)" 可以有多个。此外,您可以重复执行命令行。
jdmail的宏
您可以在命令行指定您自己的宏。当您执行内部或者外部命令的时候,宏可以作为参数传递。
$(FROM) 或 @@FROM
邮件的发件人地址(SMTP会话时的MAIL FROM: 的值)。
$(RCPT) 或 @@RCPT
邮件的收件人地址(SMTP会话时的RCPT TO: 的值)。
$(FILE) 或 @@FILE
邮件(文件)在文件系统上的绝对路径。
$(MSGID) 或 @@MSGID
jdmail生成的邮件编号(ID)。
$(MSGREF) 或 @@MSGREF
邮件的SMTP参考值。
$(TMPFILE) 或 @@TMPFILE
邮件的临时文件名。
$(USERAUTH) 或 @@USERAUTH
SMTP认证时的用户ID。
指令的种类
指令 external、filter、redirect、lredirect、smtprelay、smtp、mailbox(只有在自定义用户处理的场合下有效) ,用法如下(大写也可以)。
external
启动一个外部命令。详细请参阅 "如何运行一个外部程序" 。
filter
启动一个外部命令。跟external的差异:external 只有一个返回值,filter命令和 "过滤器管理" 一样,同样可以设置返回值。
redirect
收到的邮件重新定向到内部域或者外部域。这个命令需要有参数。
lredirect
收到的邮件重新定向到内部域或者外部域。用法和redirect是一样的,不同之处在于redirect重定向时使用最初的连接时的发件人地址(MAIL FROM,lredirect重定向时替换为新的发件人地址。
smtprelay
收到的邮件直接转发到SMTP中继服务器。中继服务器如果有多个,可以用分号分隔。
smtprelay 192.168.0.10
到达的邮件转发到中继服务器IP 192.168.0.10。
smtp
进入正常的SMTP处理。不可以使用参数。
外部程序的运行方法
如果您使用命令external 或 filter 启动一个外部程序,命令行格式如下:
external(filter) (空白) 优先级 (空白) 超时秒数 (空白) 带路径的外部程序 (空白) 参数(宏) ...... (改行)
* 优先级
处理的优先级是 0(通常)、-1(非优先)、+1(优先)。
* 超时秒数
jdmail通过指定的秒数等待来自外部程序的返回值。0 代表外部程序启动后,不等待,立刻执行下一个处理。如果外部程序使用了宏 0FILE),需要指定充分的超时秒数。否则,外部程序在邮件文件未处理完的情况下,可能删除邮件文件。
* 带路径的外部程序
指定被调用的外部程序。
* 参数(宏)
外部程序运行时所需的参数,如果有多个参数,请用空格分隔。以下是perl程序c:/temp/task.pl处理邮件文件的示例。
external 0 30 perl c:/temp/task.pl $(FILE)
以下external命令实现 Windows XP/Vista/2003 等OS的重新启动(shutdown.exe 是OS的外部命令)。
external +1 10 shutdown -r -f -t 1 |