本期首页 | 过往期刊 | 公司主页
2010.04 - 第四十五期
JDMail V3.10 过滤器
 

    JDMail的过滤器,是邮件到达时启动外部程序,进行各种追加处理的机制。包含反垃圾邮件处理的脚本。主要包括在线处理器(SMTP Session会话中处理)和离线处理器两种。
入站过滤器(收到邮件后的过滤处理):

    出站过滤器(外发邮件前的过滤处理):


    关于指令运行功能请参考 [别名的管理]-[指令别名]。

入站处理

    JDMail收到邮件后进行的一连串的处理是入站处理。入站处理按照 [SMTP RCPT 后处理]→[SMTP DATA 预处理]→[SMTP DATA 后处理]→[SMTP session后处理]的顺序进行。

    SMTP RCPT 后处理(在线处理)
    在SMTP session中,SMTP 客户端(outlook等)发送了 RCPT TO 指令之后紧接的处理是 [SMTP RCPT 后处理]。这时服务器端已获取发送者地址(MAIL FROM)和收件人地址(RCPT TO),发送者的 IP 地址。这时进行过滤处理成为可能 [SMTP RCPT 后处理]。

    SMTP DATA 前处理(在线处理)
    在SMTP session中,SMTP 客户端(outlook等)发送了 DATA 指令之后紧接的处理是 [SMTP DATA 预处理]。通常,邮件内容(邮件头和邮件体)在 DATA 指令后发送。在收取邮件内容之前的一连串的过滤器处理是 [SMTP DATA 预处理]。

    SMTP DATA 后处理(在线处理)
    在SMTP session中,JDMail从SMTP客户端接收了邮件实体之后的过滤器处理是 [SMTP DATA 后处理]。也就是完成SMTP session之前一连串的过滤器处理 [SMTP DATA 后处理]。

    SMTP Session结束后处理(离线处理)
    邮件的接收完成(SMTP Session结束)以后,投递到本地用户的邮箱之前的一连串的处理是 SMTP Session结束后处理。

出站处理

    JDMail发送邮件之前进行的一连串的过滤器处理是出站处理。

    SMTP Session开始预处理(离线处理)
    外发邮件时,在SMTP Session之前进行的一连串的过滤器处理是 SMTP Session开始预处理。

过滤器

过滤器开关

过滤器开关主要控制5个过滤器的开启和关闭。

JDWA 提供以下过滤功能。如果您不使用这些功能,请关闭过滤器。如果因为过滤器导致计算机负载非常重,请关闭过滤器,以提高服务性能。
关闭过滤器,以下功能将不可用。

SMTP RCPT 后处理

垃圾邮件的管理(S25R检查)

SMTP DATA 前处理

SMTP 连接数限制

SMTP DATA 后处理

病毒扫描(在线)
垃圾邮件过滤(在线)
附件删除(在线)
记录所有入站邮件(Catch All)
垃圾邮件者管理(S25R检查)

SMTP 会话开始前处理 (出站)
Recievied:头标记的处理

病毒扫描

垃圾邮件内容过滤

送信者(From允许SMTP中继的地址

删除附件

SMTP发送等待

SMTP 会话结束后处理 (入站)
Date: 检查

LAN 内邮件到达通知

Message-Id:头标记的添加

Reply-To: 头标记的添加

Subject: 头标记宏的添加

通知邮件

病毒扫描(离线)
垃圾邮件内容过滤

空邮件订阅/退订

邮件列表处理器

自动回复

自动删除

附件删除

拒收邮件

许可邮件(限制接收)
收信记录

正文页眉/页脚添加

收信自动过滤

入站过滤器(SMTP RCPT后处理)

在线过滤器 SMTP RCPT 后处理,在SMTP session中从客户端接收了 RCPT TO 指令后,被立即执行。

入站过滤器(SMTP DATA前处理)

在线过滤器 SMTP DATA 前処理,在SMTP session中jdmail从客户端接受了DATA指令之后(接收邮件数据的之前)被执行。

如果使用了灰名单GLST,请参考以下格式。
C:\mailroot\bin\glst.exe --mfile @@FILE
(起動命令:C:\mailroot\bin\glst.exe、第一个参数:--mfile、其它参数:@@FILE)

入站过滤器(SMTP DATA后处理) 在线过滤器 SMTP DATA 后处理,SMTP客户端会话从收到邮件数据后、session结束之前被执行。
入站过滤器(SMTP Session结束后处理)

过滤器是在SMTP session 结束后,也就是入站邮件离线处理,当客户端和SMTP会话结束后,邮件在到达最终用户邮箱之前被执行。

JDWA 请添加自定义规则。
自动回复、自动删除、邮件提醒、附件删除、拒收邮件、收信记录、Message-Id: 添加、Subject: 标记添加、Reply-To: 添加、页眉/页脚添加、垃圾邮件内容过滤、邮件列表订阅/退订、邮件列表处理器、病毒扫描、邮件到达 LAN内通知、收到邮件的过滤等 JDWA 已经作为标准功能可以使用。

发件人地址或目标地址 *@domain.com 您可以使用通配符。如果您只指定 * ,表示全部地址。

远程 IP 地址和本地 IP 地址是 0.0.0.0./0 和 192.168.1.0/24 包含掩码,代表网段。如果什么都不指定,被视作指定为 0.0.0.0/0 。

启动文件名不能使用中文。从启动文件运行的过滤器程序(脚本)需要另外创建。

新定义的规则,将添加到当前的启动文件中去。

启动命令和参数括在双引号(")内,使用制表符或空格分隔。详细说明请参考 [在线帮助] 相关部分。

出站过滤器(SMTP Session开始前处理) 过滤器在SMTP外发邮件时,和外部 SMTP 服务器的session会话开始前被执行。

JDMail的过滤器 (帮助)
--------------------------------------------------------------------------------

本篇是关于过滤器的安装配置的详细帮助信息。

JDMail过滤器,是邮件到达后触发各种处理程序进行各种处理的机制。JDMail的过滤器功能非常灵活,使用这个功能,可以增强对邮件的各种处理能力。

JDMail过滤器,有在线处理(SMTP会话期间执行)和离线处理(SMTP会话结束后执行或SMTP会话开始前执行)两种区别。

在线处理是在JDMail接收邮件(包括所有接收的邮件)的过程中执行,离线处理是在给本地用户的邮件在投递到用户的邮箱之前,或转发到外部的邮件会话开始前执行。

JDWA功能扩展

JDWA向JDMail邮件服务添加标准在线过滤器和离线过滤器,实行以下功能。

【SMTP RCPT 后处理】
(在线过滤器)

垃圾邮件主机的管理(S25R检查)
【SMTP DATA 前处理】
(在线过滤器)

SMTP 连接数制限

【SMTP DATA 后处理】
(在线过滤器)

病毒扫描

垃圾邮件内容过滤

批量删除附件

记录所有收到邮件(Catch All)
垃圾邮件主机的管理(S25R检查)
【SMTP 会话后处理(入站处理)】
(离线处理)

自动回复

通知邮件

删除附件

限制收信(许可收信)
拒绝收信

收信记录

Message-Id: Header标记的添加

Subject: Header标记的宏的添加

Reply-To: Header标记的添加

正文的页眉/页脚添加

垃圾邮件内容过滤

空邮件投稿自动订阅/退订

名单处理器

病毒扫描

邮件到达对 LAN 内主机的通知

接收邮件的自动过滤

批量删除附件

【SMTP 会话开始前处理(出站处理)】
(离线处理)

送信者(From允许SMTP中继的地址

垃圾邮件内容过滤

病毒扫描

Recievied:Header标记的添加

批量删除附件

SMTP 送信保留(延迟发送)

使用在线过滤器功能的准备工作

在线过滤器处理[SMTP RCPT 后处理]、[SMTP DATA 前处理]和[SMTP DATA 后处理]需要以下的工作。

[SMTP RCPT 后处理]、[SMTP DATA 前处理]、[SMTP DATA 后处理] 的定义文件保存在 MailRoot\filters.post-rcpt.tab、MailRoot\filters.pre-data.tab、MailRoot\filters.post-data.tab 。

过滤器定义文件中启动过滤器的定义可以指定如下(可以指定多行)。

"!标志" (tab) "启动指令" (tab) "参数" (tab) "参数" (tab) ‥‥‥(换行)

标志可以省略。如果省略标志,启动指令在开始处。标志 aex、wlex 。aex 对通过SMTP认证连接到SMTP服务器的用户不运行那个指令。wlex 对 [SMTP 白名单」登记的用户(IP 地址)不运行那个指令。指定多个标志时候用逗号断开。此外,标志字符串的起始作为识别字符的 "!" 需要添加。
例如: "!aex,wlex" ......

启动命令,操作系统的内部命令和外部命令,您可以指定一个程序或脚本,在控制台模式下运行。如果您运行一个Perl脚本,例如 c:\usr\local\bin\perl.exe 的解释器请指定路径。

参数可以重复任意多次。如果运行Perl脚本,请把脚步的完整路径作为第一个参数。JDMail支持宏作为参数。支持的宏如下。

$(CRCPT) 最后的 RCPT TO: 指令的值

$(FILE) 邮件文件的完整路径

$(FROM) MAIL FROM: 指令的值

$(LOCALADDR) 接收邮件的本地IP地址和TCP端口号

$(REMOTEADDR) 远程主机的IP地址和TCP端口号

$(USERAUTH) SMTP认证时的用户名

$(FILE) 或 @@FILE 两种参数格式都可以使用。

启动指令返回值为 3 ,JDMail 对 SMTP 客户端通知拒绝接收。如果返回值为 16 ,过滤器定义文件中有多个指令的情况,后面的指令不再执行。以外的返回值就继续SMTP会话。

使用离线过滤器功能的准备工作

离线过滤器处理的[SMTP 会话后处理](入站处理)或[SMTP 会话开始前处理](出站处理)需要以下的工作。

[SMTP会话后处理]或[SMTP会话开始前处理]的过滤器定义文件保存在 MailRoot\filters.in.tab 和 MailRoot\filters.out.tab 。

定义格式如下。(1 行 1 个定义)

"发件人地址" (tab) "收件人地址" (tab) "远程 IP 地址" (tab) "本地 IP 地址" (tab) "启动文件名" (换行)

发件人地址和收件人地址可以象 *@domain.com 一样指定通配符。如果只指定 * ,表示所有的地址。

IP 地址像 0.0.0.0./0 和 192.168.1.0/24 一样包含子网掩码。

通过JDWA添加规则不需要输入引号,此外,您可以用空格代替TAB符。

如果有多个规则,符合[发件人地址]、[收件人地址]、[远程 IP 地址]、[本地 IP 地址] 的邮件,按照规则顺序执行。

[环境设置]-[JDWA环境设置] 运行时,会自动配置标准过滤器(JDWA_common_in.tab 和 JDWA_common_out.tab),启动文件也会自动生成。

过滤器定义文件指定的启动文件在 JDMail 的 MailRoot\filters 文件夹内生成。

如果不使用JDWA制作启动文件,可以用文本编辑器按如下格式制作启动文件。(可以指定多行)

"启动指令" (tab) "参数" (tab) "参数" (tab) ‥‥‥(换行)

启动命令,操作系统内部命令和外部命令,您可以指定一个程序或脚本,在控制台模式下运行,如果您运行一个Perl脚本,例如 c:\usr\local\bin\perl.exe 解释器请具体说明路径。

参数可以重复任意次数。如果运行Perl脚本,把脚本文件的完整路径作为第一个参数。JDMail可以使用宏参数。支持的宏如下。

$(FILE) 邮件文件的完整路径

$(FROM) MAIL FROM: 指令的值

$(LOCALADDR) 接收邮件的本地 IP 地址和 TCP 端口号

$(MSGID) JDMail Message ID
$(MSGREF) SMTP Message ID
$(RCPT) RCPT TO: 指令的值

$(REMOTEADDR) 远程主机的IP地址和TCP端口号

$(RFROM) 别名表参照后的 MAIL FROM: 指令的值

$(RRCPT) 别名表参照后的 RCPT TO: 指令的值

$(USERAUTH) SMTP 认证时的用户名

$(FILE) 和 @@FILE 两种参数格式都可以使用。

实际要使用JDWA标准过滤器提供的功能,还需要将 [用户的管理] 和 [邮件列表的管理] 的各个帐户过滤器设为开启状态。

SMTP会话和过滤器 (示例)
--------------------------------------------------------------------------------

通过JDMail的过滤器系统,您可以添加其它的功能,从而构筑一个健康、坚固的通信系统。在这里,列出了Outlook等的 SMTP 客户端软件和 JDMail 服务器端会话的详细过程, JDMail过滤器系统在每个阶段的参与都附有具体例子说明。请您在创建自定义过滤器时参考。

某天的SMTP会话

以下是某天 zhangsan@mailer.cn 先生发给 lisi@chundi.com 先生电子邮件的时候,在他使用的Outlook和JDMail间的数据交换的简单说明。红色表示Outlook向JDMail发送的数据,蓝色表示从JDMail向Outlook发送的数据。同时,连接到JDMail不仅仅是客户端软件,也有其它的SMTP服务器,这个情况SMTP会话内容和上述情况基本一致。

(JDMail等待的IP地址的TCP端口和客户端建立连接)
(SMTP会话开始)
220 mailer.cn <1238906842.1660@mailer.cn> [JDMail 3.10 ESMTP Server] service ready; Sun, 5 Apr 2009 13:47:22 +0900
EHLO mailer.cn (Mailer->JDMail通知使用SMTP认证)
250-mailer.cn (JDMail->Mailer通知可以使用的认证方法和许可指令等。)
250-VRFY
250-ETRN
250-8BITMIME
250-PIPELINING
250-AUTH RSA-AUTH
250-SIZE
250 STARTTLS
AUTH LOGIN (Mailer->JDMail通知使用的认证类型)
334 VXNlcm5hbWU6 (JDMail->Mailer通知为了认证的一次性字符串(挑战))
Y29wOmh1bmV0Lm5lLmpw (Mailer->JDMail通知根据收到的一次性字符串生成编码后的用户名字符串(response))
334 UGFzc3dvcmQ6 (JDMail->Mailer通知用于加密口令的一次性字符串)
**** (Mailer->JDMail通知加密的字符串)
235 Authentication successful (JDMail->Mailer通知认证成功了)
MAIL From:<zhangsan@mailer.cn> (Mailer->JDMailer通知发送原地址)
250 OK (JDMail->Mailer通知收到发送原地址)
RCPT To:<lisi@chundi.com> (Mailer->JDMail通知收件人地址)
250 OK (JDMail->Mailer通知收到了收件人地址)
DATA (Mailer->JDMail通知开始消息实体的发送)
354 Start mail input; end with <CRLF>.<CRLF> (JDMail->Mailer通知可以开始消息实体的发送)
(开始向JDMail发送消息数据)
(Mailer到JDMail发送用只有一个点的行结束数据发送)
250 OK <S9305E> (JDMail->Mailer通知完成了消息实体的接收)
QUIT (Mailer->JDMail通知SMTP会话结束)
221 [JDMail 3.10 ESMTP Server] service closing transmission channel (JDMail->Mailer通知会话结束)
(SMTP会话结束)

会话阶段和JDMail的动作,过滤器的启动

与上述会话各阶段的JDMail的动作内容参照文件,对应的 JDWA 管理菜单如下。文件名单是按照拉丁字母顺序排序,不是按照 JDMail 实际调用顺序排序。

Session的阶段

JDMail的动作/参照文件/JDWA菜单

从Session开始
235 Authentication ...

进行对Mailer(SMTP客户端)的访问控制,认证。

mailusers.tab

[用户的管理]、[邮件列表的管理]

smtp.hnprop.tab [安全性]-[SMTP白名单的管理(基于域名)]
smtp.ipmap.tab [安全性]-[SMTP访问许可]
smtp.ipprop.tab [安全性]-[SMTP白名单的管理(基于IP)]
smtpauth.tab [安全性]-[SMTP认证帐号的管理]
smtpextauth.tab 没有对应菜单
spammers.tab [反垃圾邮件]-[垃圾邮件主机的管理]

MAIL From: ...
250 OK

进行对Mailer出示了的发送者地址的访问控制。

spam-address.tab

[反垃圾邮件]、[垃圾邮件地址管理]

RCPT To: ...
250 OK

进行对Mailer(SMTP客户端)的访问控制,认证。

aliasdomain.tab

[alias的管理]-[域alias]

aliases.tab [alias的管理]-[普通alias]
commandalias.tab [alias的管理]-[指令alias]-[指令alias]
domains.tab [域的管理]
extaliases.tab

[选择]-[扩展alias的管理]

mailusers.tab

[用户的管理],[名单的管理]

smtprelay.tab

[安全性]-[SMTP中继许可]

MailRoot/cmdaliases/ 内的设定文件

[alias的管理]-[指令alias]-[指令alias]

MailRoot/custdomains/ 内的设定文件

[alias的管理]-[指令alias]-[特别定做的域处理]

启动过滤器 [SMTP DATA预处理]

DATA
250 OK <S9305E>

从Mailer获取消息数据。
启动过滤器 [SMTP DATA后处理]

QUIT
221 [JDMail 3.10 ...

SMTP Session结束。

Session 结束后

启动过滤器 [SMTP Session结束后处理] - 如果是给本地用户的情况
启动过滤器 [SMTP Session开始前处理] - 如果出站的情况

用过滤器能做的事情,不能做的事情

利用JDMail提供的5种过滤器,可以追加各种功能。详细请参照「JDMail过滤器」。

可以是邮件的加工和外部命令的运行,数据库系统操作、OS操作等,总之都可以。命令的运行使用控制台方式能实行多个程序的调用。当然,您也可以调用自己编写的程序。

JDMail的过滤器系统不能运行的情况如下。

关于认证因为在过滤器被启动之前完成,而且不能干预。

正在与服务器进行会话的 SMTP 客户端和过滤器不能进行相互通讯。

有图行界面的程序通过过滤器不能运行。

     

    产品手册:http://www.mailer.cn/Download/JDmail_V3.10_Manual.pdf
    产品网站:www.mailer.cn
    公司网站:www.chundi.com
Copyright 1997-2017 北京春笛信息技术有限公司 地址:北京海淀区知春路23号863软件园量子银座九层