ORF反垃圾邮件系统

邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 6379|回复: 0

安装与设置FAX传真服务器(2)

[复制链接]
发表于 2006-1-9 11:33:36 | 显示全部楼层 |阅读模式
  现在国内调制解调器市场上山头林立,不禁使人缅怀当年Hayes公司风光一时的日子。那时该公司垄断了调制解调器市场,你只须到市场上要求购买一个Hayes牌传真调制解调器即可确保软件可以很好地识别、支持它。<br>
除了必须支持AT命令外,我们主要关心调制解调器的接口类型。常见类型包括<br>
<br>
  1)外置串行调制解调器<br>
  这一类调制解调器历史悠久,从2400 bps一路行来,普通常见,因此支持最好,不失为最稳妥的选择,而且可保证不会有WinModem这类鱼目混珠的坏分子掺杂其中。这里有个限制,就是一般AT体系结构机器只有两个串行接口可用。如果你已经有一部UPS的监控电缆接在COM2上,就只剩下唯一的一个接口了。<br>
适用于1-2根线路的传真系统。<br>
<br>
  2)内置ISA硬件调制解调器<br>
  老骥伏枥,志在千里,虽然速度低了点,ISA总线用于传真还是绰绰有余的。具体的用法就和内置PCI硬件调制解调器差不多,只是由于IRQ的缘故,仅适用于1-2根线路的传真系统。 <br>
<br>
  3)内置PCI硬件调制解调器<br>
  这一类也不错,而且不会额外占用地方,也没有各种连线一大堆,机架会很清爽,PCI总线的自配置特性对于防止资源分配错误有很大的帮助。只是它一般只有唯一一个位于板卡挡片上的LED指示灯,对查错没有什么贡献。系统的最大规模取决于系统的PCI插槽数目,一般在六个以下。<br>
<br>
  4)外置USB调制解调器<br>
  目前相当流行的调制解调器接口形式,据说工作得不错,能够同时支持很多的线路。注意USB电缆比较容易滑落。<br>
<br>
  5)内置多端口卡/调制解调器<br>
  很贵,但是,如果你需要支持更多的线路,这可能是唯一的途径。例如Moxa公司Intelligent系列的 C320Turbo/PCI高密度串行接口卡,提供有Linux版本的驱动程序,每片卡支持的端口总数从基本配置1 UART模块 8端口到4 UART模块级联32端口,同一部机器上可安装达惊人的四片共128端口之多!高档板卡上通常集成有CPU和缓存,自身有一定处理能力,对主机CPU的要求不高。<br>
  多端口调制解调器进一步将传真功能集成到板卡上,不必象多端口卡那样外接调制解调器,不过端口密度一般不如多端口卡。<br>
<br>
  6)ISDN和其它高带宽数字调制解调器<br>
<br>
  ISDN有专用的传真协议:Group 4,即所谓G4传真。G4传真速度较快,图像分辨率也高,但并没有得到广泛应用。通过语音类型的呼叫,运行在ISDN上的G4传真设备可以同Group 3传真设备通信,但其速度被降低到G3的水平。个人认为没有这个必要。<br>
<br>
  有了一堆串口之后,你可能需要使用setserial命令(或者厂商提供的工具程序)来设置串行口参数,其范围之广泛,从速率、奇偶校验到UART类型无所不包。需要说明的是,内置PCI/ISA调制解调器中有一类*名在外的WinModem,一般称之为软调制解调器/软猫的,需要设备驱动程序配合实现部分功能,因而大多数只能在Windows下工作,罕见的几种可以在Linux或其它Unix系统中工作的也强差人意而已。因此,忠告是:避之则吉。<br>
<br>
  另外随着ADSL的大范围普及,有一个常见的疑问,在ADSL线路上运行传真服务可以吗?答案是可以,只要是按照ADSL的安装要求连接在信号分离器后面。<br>
<br>
  有时候,某些调制解调器的行为很奇怪。例如我现下用来上网兼传真的调制解调器,Acer出品,支持class 1传真。它能够响应AT命令,但是有时并不象我们期望的那样。例如,正常的ATI0命令会报告产品代码,但这个调制解调器对ATI0命令的返回代码很奇怪:"57600 - DSP PATCH:001.65"。后来发现它与众不同地使用ATI9报告产品代码"Acer Modem 56 Surf"!你知道,大公司都有不遵循标准的癖好,对此我们早已见怪不怪了--好在发送传真倒是没有大问题。稳妥起见,对待此类坏孩子最好小心些--不兼容就是这样造成的。<br>
<br>
  class 1、class 2还是class 2.0?<br>
<br>
  class 1调制解调器比较便宜,但它有两个缺陷。如前所述,class 1调制解调器将大部分工作推给CPU做,这就要求:<br>
<br>
  a)电脑系统必须及时处理串口上源源而来的数据,大的串口延迟将导致数据丢失。<br>
  b)实时系统响应。出于同样的理由,系统调度算法必须保证HylaFAX能够不受干扰地获得CPU时间片。这个问题在Linux系统中通常采用临时提高HylaFAX服务器进程优先级的方法加以解决,但此路在有些系统上行不通。<br>
<br>
  所以,class 1调制解调器较适合小规模系统。 <br>
<br>
  class 2调制解调器对实时性的要求不太严格,但它也有弱点,那就是不兼容性。同为class 2调制解调器,可能一个一切正常,另一个则总是莫名其妙地中断传输过程,必须借助特别的设定。<br>
<br>
  所以,请尽可能使用class 2.0调制解调器。当然,也不必过于担心,这只是理论情形而已。我为公司运行的传真服务器用的就是两个废弃的class 1杂牌调制解调器,取其价廉,迄今为止发送6447份/接收12173份的传真,没见有什么问题――毕竟极端的运行条件是少数。<br>
<br>
  提醒你一下,个别情况中调制解调器声称支持较高的级别,但是并不能正常地运行,这时候你可以选择较低的级别试试--当然,效能也会随之打个折扣。<br>
<br>
  6.日志和报告<br>
<br>
  HylaFAX的日志保存在标准日志文件/var/log/messages中,通过修改/var/spool/hylafax/etc/config文件中ServerTracing的级别可以调整日志的详细程度。除此之外,每次会话的详细记录则保存在/var/spool/hylafax/log目录下。运行xferfaxstats会生成相当详尽的统计报告。<br>
<br>
  你也可以对sendfax/faxalter使用-vv参数,可以将协议执行过程输出到文件中,这对调试客户端与服务器的联接问题很有用。<br>
<br>
  7.发送和接收<br>
<br>
  1)从用户端提交传真<br>
  从用户端提交传真有两种方法<br>
<br>
  A)通过虚拟的传真打印机<br>
  基本的想法是通过把文件打印到虚拟的传真打印机,使用PostScript打印机驱动程序作为过滤器,将文件转化为HylaFAX服务器理解的PostScript格式,然后由客户端程序向HylaFAX传真服务器提交此文件及有关信息即可。<br>
<br>
  对此我有五点看法,<br>
<br>
  a)Windows下客户端程序当中,我感觉whfc不错,你不妨试试。作者Ulrich Eckhardt是德国人,注意安装的时候要去掉默认的德语支持,否则界面是德语的。在Windows NT/98下和Windows 2000下的行为稍有不同。过去的1.08版本由于使用了专有的库文件,因此不是开放源码的,我一直有点担心后续支持问题。但作者似乎解决了这个问题,今天察看主页的时候才发现目前1.09版本已经使用GPL许可,还有了简体中文支持!恭喜!<br>
<br>
  b)并不是所有的PostScript打印机驱动程序都表现优异。历史上看,Apple公司是PostScript的积极支持者。80年代中期,Adobe出PostScript、Aldus出PageMaker,Apple出MacOS和LaserWriter系列打印机,三剑客携手桌上排版革命,对PostScript成为印前行业事实上的工业标准功不可没。所以大多数人选择使用高品质的Apple LaserWriter 16/600 PS驱动程序不是没有道理的。<br>
<br>
  c)有些方案要求你在要传真的文件中插入有特殊意义的字符序列,比如sambafax要求 <br>
  Fax-Nr:<br>
<br>
  委婉一点说,这种方式不象听起来那么好;换句话,这种方式也太差劲了。首先,这是一个肮脏的解决方案,把传真和它的元信息搞混了,其次,若你的文档是一张图片,这种方法会失效,最后,当然了,你的自由被剥夺了――这个特定的字符序列将成为传真正文中永远的禁忌字眼。颇不光明正大。建议在采用此类方案之前三思。<br>
<br>
  d)正如上面已经提到的,通常我们将需要传真的文档打印到设定的PostScript传真打印机即可通过HylaFAX发送出去。这真是一个绝妙的好点子,简单又易行,只是还有一个小小问题需要注意――很多时候我们的文件是分多次打印到打印机的,尽管看起来好像是一次。说句题外话,我很喜欢举这个例子来说明什么是编程中意想不到的副作用。 <br>
<br>
  举例来说,你收到同事发来的电子邮件,正文中和你讨论了替换公司Web服务器磁带机的进度,附带一份Acrobat PDF格式的进度报告和一份Word DOC格式的供应商报价。为防止眼睛过度疲劳,你决定打印到网络上的激光打印机上以便阅读。当发出打印指令后,你的Outlook首先打印正文,然后激活Acrobat Reader打印进度报告,最后激活Word打印供应商的报价单。从打印机上看,三者将依次打印,间隔不过数秒钟,几乎不太可能有另一份打印作业插入到它们中间(尽管繁忙时不排除这个可能性,实际中也确实会发生),效果上和一次性打印没有两样。<br>
<br>
  但是对于传真,你的正文和进度报告之间相隔2、3分钟,进度报告和报价单又相隔3、4分钟,这种情况并非不常见。由于以上原因,在你的进度报告和报价单中间有时会插入一份来自其他发送者的会议邀请函再加一份内部会议议程表。我们对此几乎无能为力。打印机上万一出现了插队现象,由于打印者对文档的内容很清楚,可以轻易挑出自己的文件;位于电话线那头传真机边上的接收人可没有这个便利条件,我们唯一可以做的就是为相关联的多份传真做好标记,比如在封面页上标上Part 1 of 3、Part 2 of 3、Part 3 of 3等等。<br>
<br>
  希望对面是位认真负责的伙计(A型血尤佳:)<br>
<br>
  e)HylaFAX服务器试图将IP地址转换为域名。如果你的主机没有域名的话,反向解析将导致漫长的等待。解决办法不值一提:给它所要求的。你有两个选择,或者维护一份hosts文件,或者运行一个DNS服务器。<br>
<br>
  B)email to fax<br>
<br>
  首先要说的是,此项功能并不完善,因此不要期望过高。其次,它相当复杂。最后,也是最致命打击,它目前只支持us-ascii和iso-8859-1编码,所有中文被解码为一堆天书。请所有用户注意练习英文,不要出有损公司形象的语法和拼写错误。<br>
<br>
  faxmail从标准输入读取数据,从头行当中,也就是From、To、Cc和Subject,解析出发送传真的必要信息。头行的写法好似史前人类图腾上描摹的巫咒,复杂程度几乎够得上一个微型标记语言,你要在里面指定发送人、接收人、传真号码等信息,设置Tab字符宽度、字体路径等诸多细节。<br>
<br>
  这听起来不错,理论也说得通,可是正所谓知易行难,执行起来根本不是那一回事。问题在于,情况不象7位 ASCII字符的控制台时代那么单纯----我们有了HTML邮件和MIME编码。单独一个已经挺难对付的了,何况两者一起兴风作浪。考虑一下一个混合了JavaScript脚本、JPEG和GIF图片、ActiveX控件、使用魏碑体的电子邮件,上面嵌入了一张Excel电子表格,该表格的部分数据存放在另一部电脑的关系数据库里!真够瞧的。<br>
显然我们的传真服务器不可能大包大揽,同时身兼HTML渲染引擎、脚本解释器、Excel和SQL查询引擎(以及其它各种知名或不知名的应用程序)的功能,更不要说字体这类细节。既然faxmail不可能打中移动的靶子,此项功能对邮件内容的范围有严格的限制。首先,要求是纯文本邮件,其次,所有不可显示的MIME编码的内容,包括音频、视频、二进制数据等,都被舍弃了。faxmail内建仅可以识别text/plain、multipart/mixed、multipart/digest、message/rfc822、applica-tion/postscript和 application/x-faxmail-prolog MIME类型。也就是说,附带的Excel表格、PDF文档甚至TIFF图片全部都会被不动声色地清理掉。<br>
<br>
  结果,真糟糕,被传送的传真往往出乎不了解技术细节的用户的意料,完全走了调。<br>
<br>
  诸位,相信我,这不是事前的精心设计,而是事后无奈的修补,其方法就是每发现一个接不上榫的地方就得有个新标记加入进来处理――毕竟传真和电子邮件的设计是独立进行的,不能很好地交互虽然让人沮丧,倒也在意料之中。<br>
<br>
  总之,这玩艺颇不光明正大,有鸡鸣狗盗之风,非处常之法,君子所不取。因此请原谅,我决定在开始讨论讨论这项用处不大、麻烦不小的功能之前尽快结束掉这一节。执意不听者请自行察看man page。注意安全。<br>
<br>
  接收传真<br>
<br>
  faxgetty会把刚接收到的传真(TIFF格式)放入recvq队列并调用faxrcvd脚本加以处理。常见的方式有两种:<br>
<br>
  A)fax to email<br>
  最常用的传真处理手段是将收到的传真以指定的格式作为电子邮件的附件传送给传真管理员FaxMaster的电子邮箱。传真管理员初步查看和分拣传真,然后转发给适当的人员。因为缺乏足够的信息,传真并不能象电子邮件那样自动分发。HylaFAX服务器手上所有的只是一幅TIFF图片,发送/接收人信息齐全,就在那儿,但没有方法加以利用。希望随着图像识别技术的进步这一问题能够解决。<br>
<br>
  B)直接传送到到打印机<br>
  一般来说,PostScript打印机是最易使用的。在faxrcvd中添加打印功能即可,具体的命令取决于你所采用的打印软件。例如我常用HP LaserJet 2100TN网络打印机和行式打印机守护进程lpd,因此修改faxrcvd为<br>
/usr/bin/tiff2ps -a $FILE | lpr<br>
<br>
  当然,在此之前需要先配置好你的打印机。<br>
<br>
  8.访问控制和传真路由<br>
<br>
  在加以说明之前,有几个在HylaFAX文档中反复提及的名词需要略加解释,它们是CID、DNIS和TSI。<br>
什么是CID?喜欢看港产警匪片的读者可能想起了Criminal Investigation Department,不过这里的意义就是Caller IDentification的缩写,一个代表联接另一方的标识符。Caller ID大致相当于来电显示服务,可查知拨叫者的电话号码,该功能需要PSTN网络支持。该信息由电信服务商提供,可能需要申请开通和/或付费。由于拨叫者的电话号码理论上属于隐私,并不一定总能获得此项服务,具体情况取决于所处的国家和地区。<br>
<br>
  什么是DNIS?它是Dialled Number Identification Service的缩写,也由电信服务商提供,同样可能需要申请开通和/或付费。此服务可查知拨叫者正在拨叫的--也就是我们自己的--电话号码。一般情况下我们当然清楚自己的电话号码,但如果有多条线路且有遇忙自动转线功能,DNIS也是有一定作用的。对运行HylaFAX服务器来说,DNIS用处不大,这里提到它主要是为了防止读者把它和CID混淆。<br>
<br>
  什么是TSI?它是Transmission Subscriber Identification的缩写,又一个代表联接另一方的标识符。和CID、DNIS不同,TSI由用户设置,通常是可打印字符的组合。<br>
<br>
  1)访问控制有两方面的含义:<br>
  a)只接收期望的传真。<br>
<br>
  实际当中收到垃圾传真的可能性不大,其危害程度远远没有泛滥成灾的垃圾邮件那么严重。这主要是因为传真系统不如电子邮件系统便宜和快捷。一个垃圾邮件制造者可以以极低的成本向无辜的人们发送数以百万计的电子邮件,但一百万份传真则几乎是不可能的任务――通信费用高昂,时间上也不允许。另外,传真运行在传统的面向虚电路的电话交换网络上,不太容易抹去发送者的信息,难以象垃圾邮件制造者那样保持匿名。警方根据电话号码按图索骥,很快就会找上门来,发送者将会面临法律上的麻烦。<br>
<br>
  无论如何,你可以通过在hfaxd.conf中指定QualifyTSI、QualifyCID来排除不速之客。通过设置/var/spool/hylafax/etc/cid和/var/spool/hylafax/etc/tsi文件,你可以指定想要和不想要的传真,faxgetty在建立联接之前会根据这些文件盘查拨入的电话,给不受欢迎的*客一个清脆的闭门羹,不亦快哉!<br>
<br>
  b)不多不少只有已授权的人可以从已授权的机器上发送传真。<br>
  访问控制在新版本的HylaFAX服务器中得到了很大改进――较老的版本中只能指定哪些主机可发送传真,并没有基于用户/密码的机制。<br>
<br>
  在hosts.hfaxd中指定客户端的访问控制。默认情形下,该文件包含以下两行<br>
  localhost<br>
  127.0.0.1<br>
<br>
  这时HylaFAX仅接受本机的联接请求。如果我们有一个IP子网192.168.1.0/24,运行命令<br>
  [/] echo "192.168.1.0" >> hosts.hfaxd<br>
<br>
  将允许子网内的所有电脑/用户联接到HylaFAX服务器。再一次地,我们可以运行命令 <br>
  [/] echo "alan@192.168.2.8" >> hosts.hfaxd<br>
<br>
  以允许192.168.2.8/24主机上的用户alan访问HylaFAX服务器。<br>
<br>
  你也可以为用户指定密码,并且正则表达式同样可应用在这里。<br>
<br>
  2)传真路由<br>
<br>
  前面提到传真不支持自动分发(即路由)。虽说如此,我们倒也不是完全束手无策,因为我们手上多少还是有几张牌的。当传真接收完毕之后,faxgetty会把它和相关的会话信息,包括对方的TSI、CSI、支持的分辨率、传输速率14400、图像压缩方式等等,传递给faxrcvd脚本。faxrcvd脚本根据这些信息对收到的传真作初步的粗粒度分类,读取/var/spool/hylafax/etc/FaxDispatch配置文件来决定具体的路由规则。路由规则一般是一个长长的case语句。借助正则表达式大强大威力,我们可以构造相当复杂的选择条件。在faxrcvd的手册页中有一个非常详尽的脚本范例,可作为量身定制脚本的出发点。 <br>
<br>
  现在也可以指定附件的格式为TIFF、PDF或PostScript。例如要指定为TIFF格式,只须简单地在FaxDispatch中加上一行即可:<br>
<br>
  FILETYPE=tif<br>
<br>
  要知道,在过去的黑暗日子里,管理员们必须自己动手编制不同的脚本来生成不同的附件格式。<br>
<br>
  这里有一种稍加变化的方式。你可以选择可以在邮件中指明一个URL,然后通过运行在HylaFAX服务器上的FTP或Web服务器提供下载服务,优点是可以大大减小电子邮件的尺寸。对于那些惯于动辄cc给10多人的用户,这会大大减轻企业电子邮件系统的压力。<br>
<br>
  有件事要牢记在心:电信公司一般在第一/二次振铃之间发送CID或DNIS信息,因此如果你设置在三声振铃后faxgetty才接受拨叫,就会错失良机,这时CID或DNIS为空值。<br>
<br>
  附带说一句,我最常见到的TSI是""--非常遗憾,大家都很忙,以至大多数传真设备并没有适当地设置TSI。我也见过各种稀奇古怪的TSI,诸如空白、电话号码、110,以及:you are pig。很有幽默感,嗯?<br>
<br>
  请检查你的传真机/传真服务器并正确设置TSI为贵公司名称或缩写。<br>
<br>
  9.查看收到的传真<br>
<br>
  传真主要以TIFF格式或PDF格式呈现给用户,少数情况下也使用PostScript格式。这些都是应用非常广泛的格式,根据平台的不同,我们有不同的查看器。<br>
<br>
  Windows附带的Imagimg for Windows(在不同的Windows上名称稍有不同)完美地支持TIFF文件。Adobe Acrobat Reader用于察看PDF文件,PostScrip文件可用GSView配合Ghostscript察看。需要指出的是,有些图像软件,例如著名的Acd See的某些版本并不能正确地察看多页TIFF文件,导致只能看见封面页。<br>
Unix和Mac也有相应的察看器可用。<br>
<br>
  有一个小细节需要指出:HylaFAX支持1-D MR、2-D MR、2-D MMR压缩格式,默认情况下HylaFAX使用传输过程中和对方商定的格式保存收到的传真,因此recvq目录下的TIFF文件可能采用了不同的压缩格式。少数时候会碰到2-D MMR格式的TIFF文件,某些查看器对此种格式的支持没有1-D MR、2-D MR完善,可能会导致无法查看。为此我们可以使用/var/spool/hylafax/etc/config.ttySx中的RecvDataFormat参数指定一种标准的格式保存所有的传真,通常是2-D MR。<br>
<br>
  10.制作传真封面页<br>
<br>
  当今社会注重包装(有时甚至到了本末倒置的程度),因此传真封面页作为内容的脸面不可小视。<br>
<br>
  传真封面页通常包括收/发双方传真号码、公司名称、人员、主题以及内容提要。因此制作要点在于生成一页这些内容可动态改变的传真并在正确的时间,正确的位置,填上正确的内容。它当然和我们的传真一样,是PostScript格式。<br>
<br>
  制作传真封面页有不同的方法,这里介绍我常用的latex-cover包。在动手之前,我们先介绍必备工具LaTeX。<br>
<br>
  何谓 LaTeX?无它,一种排版用标识语言而已,由L.B.Lamport对D.E.Knuth(没错,就是写《计算机程序设计艺术》的那个D.E.Knuth)发明的TEX作了外层宏包装,最初的用途是数学论文排版(Knuth写的,你还能指望它做什么呢)。就其精神实质而言,LaTeX和XML相近,它描述元素的属性而不是格式化信息。<br>
<br>
  我们用普通的文本编辑器,比如说vi,创建一个扩展名为tex的LaTeX源文件faxcover.tex。latex尚未支持直接输出PostScript格式,因此我们先转换到dvi格式。输入以下命令<br>
  [/] latex faxcover.tex<br>
<br>
  这会输出一个faxcover.dvi文件,然后运行dvips把此dvi文件转化为PostScript格式。 <br>
  [/] dvips -o faxcover.ps faxcover.dvi<br>
<br>
  做法并不复杂,难度在于LaTeX本身颇不简单。对大多数人来说,这是一种闻所未闻的新语言。既然如此,直接写PostScript岂不爽快?之所以兜这么个圈子,是因为PostScript远比LaTeX更复杂、更低级。要知道,PostScript 3 Language Reference有912页,编程手册更不用说,而文末列出的LaTeX教程一般不多于50页。现在你明白,选择LaTeX也是不得已而为之,所谓两害相权取其轻罢了。<br>
<br>
  当然,若你能直接用文本编辑器编写一个PostScript封面页出来,记住在简历上列出这一条,肯定能使人对你刮目相看:)<br>
<br>
  后面附有我制作的传真封面页,使你可以对此有个概念。在这个范例文件中,公司logo是使用Peter Kadal的TEXdraw包中的Bezier曲线函数画出的。偷懒的法子是用AutoCAD绘制出DWG图然后保存为EPS文件,然后导入到目标文件中。这样做的得到的是位图格式,目标文件较大,缩放时效果也较差。<br>
<br>
  生成的faxcover.ps文件还不能直接在GSView中打印或察看,因为它还包含着某些未定的域,导致渲染出错。
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2024-4-19 04:52

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表