﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-分享ｊａｖａ带来的快乐-文章分类-sendmail</title><link>http://www.blogjava.net/lyjjq/category/36891.html</link><description>我喜欢ｊａｖａ新东西</description><language>zh-cn</language><lastBuildDate>Mon, 30 Apr 2012 09:07:41 GMT</lastBuildDate><pubDate>Mon, 30 Apr 2012 09:07:41 GMT</pubDate><ttl>60</ttl><item><title>postfix 邮件维护</title><link>http://www.blogjava.net/lyjjq/articles/377033.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sun, 29 Apr 2012 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/377033.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/377033.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/377033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/377033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/377033.html</trackback:ping><description><![CDATA[<a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/newversion/articles/1490910.html">postfix 如何删除队列中的邮件</a><div class="clear"></div><div class="postBody"><div id="cnblogs_post_body"><h2># <a title="Permanent Link to postfix 如何删除队列中的邮件" href="http://yoozhu.com/?p=650" rel="bookmark">postfix 如何删除队列中的邮件</a></h2><div class="date"><a title="查看 linux 的全部文章" href="http://yoozhu.com/?cat=3" rel="category">linux</a> @ 06 二月 2009, </div><div class="entry"><p>[root@mail ~]# mailq 查看队列邮件</p><p>postsuper -d ALL  这样就删除所有邮件啦</p><p>[注意：大小写有区别，请注意大小写！]</p><p>网上看到，Postfix 邮件队列管理的几个 Perl 小程序，pfdel.pl 是用来删除队列中指定用户的邮件的，luserdel.pl 是用来删除队列中无效用户的邮件的，moqdel.pl 是用来删除队列中邮箱配额已满的用户的邮件的，jmoqdel.pl 是删除邮箱配额已满的用户的垃圾邮件箱的。我装的是EMOS1.3，找不到这几个小程序。</p><p>用外面的邮件服务器发点EDM，一直有问题，成功太少，干脆用自己的邮件服务器发送，谁知道3W多封邮件是发出去了，全部堵在我们自己的服务器上，邮件服务器给堵死了<img class="aligncenter size-medium wp-image-651" title="spool" alt="spool" src="http://yoozhu.com/wp-content/uploads/2009/02/spool-300x139.jpg" width="300" height="139" />只好删除队列中的垃圾邮件了，网上说是 mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } / chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; | postsuper -d </p><p>参考官网写个脚本也不行，应该多研究下还可以的，脚本如下：</p><p>Q: 删除邮件队列</p><p>A: mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } / chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; </p><p>| postsuper -d -</p><p><span style="color: rgb(51, 102, 255);">[root@linuxas3 root]# vi mailqueue<br />#!/bin/bash<br /># </span><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#107;&#105;&#108;&#108;&#101;&#114;&#64;&#57;&#56;&#49;&#50;&#46;&#110;&#101;&#116;"><span style="color: rgb(51, 102, 255);">netkiller@9812.net</span></a><span style="color: rgb(51, 102, 255);"><br />queue=$1<br /># echo ${queue}<br />DELETE=&#8221;mailq | tail +2 | awk&nbsp; &#8217;BEGIN { RS = \&#8221;\&#8221; } /${queue}$/ { print \$1 }&#8217; | tr -d &#8216;*!&#8217; </span></p><p>| postsuper -d -&#8221;<br />echo ${DELETE} &gt; queue<br />chmod 755 queue<br />./queue<br />[root@linuxas3 root]# chmod 755 mailqueue<br />[root@linuxas3 root]# ./mailqueue chen@example\\.org<br />mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } /chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; | </p><p>由于邮件中有一些正常邮件，所以只能删除特定字符的垃圾邮件，通过mailq显示出来邮件队列：2AB97F815E* 2749 Thu Feb 5 15:48:38 web1@shequsz.com</p><p>szmaxoni@public.szptt.net.cn&nbsp;&nbsp; 删除邮件只需要命令postsuper -d 2AB97F815E即可。应该通过管道可以简单实现，但是我对使用管道不熟悉，只好多走两步了&#8230;&#8230;</p><p>[root@mail ~]# mailq |grep shequsz\.com &gt;&gt;/home/maillist 到出包含shequsz.com的垃圾邮件到maillist</p><p>[root@mail home]# awk &#8216;{print $1}&#8217; maillist &gt;&gt;/home/mywang/dellist 把邮件ID导出来，查看下如果带*，需要编辑替换下</p><p>[root@mail mywang]# cat delmail.sh&nbsp; 编辑一个脚本，把文件里面ID逐个匹配然后删除邮件</p><p>for i in `cat dellist`; </p><p>do&nbsp; postsuper -d $i;</p><p>done</p><p>[root@mail mywang]# sh delmail.sh </p><p><span style="color: rgb(51, 102, 255);">postfix有四种不同的邮件队列，并且由队列管理进程统一进行管理：</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">　　1． maildrop：本地邮件放置在maildrop中，同时也被拷贝到incoming中。</span></p><p><span style="color: rgb(51, 102, 255);">　　2． incoming：放置正在到达或队列管理进程尚未发现的邮件。</span></p><p><span style="color: rgb(51, 102, 255);">　　3． active：放置队列管理进程已经打开了并正准备投递的邮件，该队列有长度的限制。</span></p><p><span style="color: rgb(51, 102, 255);">　　4． deferred：放置不能被投递的邮件。</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">postfix日常维护</span></p><p><span style="color: rgb(51, 102, 255);">启动postfix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; postfix start</span></p><p><span style="color: rgb(51, 102, 255);">停止postfix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; postfix stop</span></p><p><span style="color: rgb(51, 102, 255);">重新读取postfix配置文件&nbsp;&nbsp;&nbsp;&nbsp; postfix reload</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">立即投递队列中所有邮件(慎用)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; postfix flush</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">查看队列邮件&nbsp;&nbsp;&nbsp; postqueue -p 或 mailqpostqueue -p |tail</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">使用postsuper 来维护队列。一般是先用mailq查看队列里的邮件，找到对应的id，然后用postsuper -d来删除。例如id是0EAF3A9B 那么postsuper -d 0EAF3A9B</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">Q: 删除邮件队列</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">A: mailq | tail +2 | awk &#8216;BEGIN { RS = &#8220;&#8221; } / chen@example\.org$/ { print $1 }&#8217; | tr -d &#8216;*!&#8217; | postsuper -d</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">详细要看mailq和postsuper的用法</span></p><p><span style="color: rgb(51, 102, 255);"><br /></span></p><p><span style="color: rgb(51, 102, 255);">修复队列以及任何权限错误</span></p><p><span style="color: rgb(51, 102, 255);">postfix check</span></p><p><span style="color: rgb(51, 102, 255);">查看邮件系统日志</span></p><p><span style="color: rgb(51, 102, 255);">tail -f /var/log/maillog</span></p></div></div></div><img src ="http://www.blogjava.net/lyjjq/aggbug/377033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-04-29 18:38 <a href="http://www.blogjava.net/lyjjq/articles/377033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Postfix的配置详解 </title><link>http://www.blogjava.net/lyjjq/articles/366100.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sun, 11 Dec 2011 11:36:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/366100.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/366100.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/366100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/366100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/366100.html</trackback:ping><description><![CDATA[<div id="appShareOpt"></div>
<div id="app-share-content">4.1 postfix的配置文件结构<br /><br />postfix的配置文件位于/etc/postfix下，安装完postfix以后，我们可以通过ls命令查看postfix的配置文件：<br /><br />[root@mail postfix]# ls<br /><br />install.cf main.cf master.cf postfix-script<br /><br />这四个文件就是postfix最基本的配置文件，它们的区别在于：<br /><br />mail.cf：是postfix主要的配置文件。<br /><br />Install.cf：包含安装过程中安装程序产生的postfix初始化设置。<br /><br />master.cf：是postfix的master进程的配置文件，该文件中的每一行都是用来配置postfix的组件进程的运行方式。<br /><br />postfix-script：包装了一些postfix命令，以便我们在linux环境中安全地执行这些postfix命令。<br /><br />4.2 postfix的基本配置<br /><br />postfix大约有100个配置参数，这些参数都可以通过main.cf 指定。配置的格式是这样的，用等号连接参数和参数的值。如：<br /><br />myhostname ＝ mail.mydomain.com<br /><br />等号的左边是参数的名称，等号的右边是参数的值； 当然，我们也可以在参数的前面加上$来引用该参数，如：<br /><br />myorigin = $myhostname<br /><br />虽然postfix有100个左右的参数，但是 postfix为大多数的参数都设置了缺省值，所以在让postfix正常为你服务之前，你只需要配置为数不多的几个参数。下面我们一起来看一看这些基本的postfix参数。需要注意的是，一旦你更改了main.cf文件的内容，则必须运行 postfix reload命令使其生效。<br /><br />1． myorigin<br /><br />myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。缺省地， postfix使用本地主机名作为myorigin，但是建议你最好使用你的域名，因为这样更具有可读性。比如：安装postfix的主机为 mail.domain.com则我们可以这样指定myorigin:<br /><br />myorigin = domain.com<br /><br />当然我们也可以引用其他参数，如：<br /><br />myorigin = $mydomain<br /><br />2． mydestination<br /><br />mydestination参数指定postfix接收邮件时收件人的域名，换句话说，也就是你的postfix系统要接收什么样的邮件。比如：你的用户的邮件地址为user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。与myorigin一样，缺省地，postfix使用本地主机名作为 mydestination。如：<br /><br />mydestination = $mydomain<br /><br />mydestination = domain.com<br /><br />3． notify_classes<br /><br />在postfix系统中，必须指定一个postfix系统管理员的别名指向一个用户，<br /><br />只有这样，在用户遇到问题时才有报告的对象，postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别：<br /><br />bounce：将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故，该邮件的拷贝不包含信头。<br /><br />2bounce：将两次不可投递的邮件拷贝发送给postfix管理员。<br /><br />delay：将邮件的投递延迟信息发送给管理员，仅仅包含信头。<br /><br />policy：将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员，包含整个SMTP会话的内容。<br /><br />protocol：将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP会话的内容。<br /><br />resource：将由于资源错误而不可投递的错误信息发送给postfix管理员，比如：队列文件写错误等等。<br /><br />software：将由于软件错误而导致不可投递的错误信息发送给postfix管理员。<br /><br />缺省值为：<br /><br />notify_classes = resource, software<br /><br />4．myhostname<br /><br />myhostname 参数指定运行postfix邮件系统的主机的主机名。缺省地，该值被设定为本地机器名。你也可以指定该值，需要注意的是，要指定完整的主机名。如：<br /><br />myhostname = mail.domain.com<br /><br />5．mydomain<br /><br />mydomain参数指定你的域名，缺省地，postfix将myhostname的第一部分删除而作为mydomain的值。你也可以自己指定该值，如：<br /><br />mydomain = domain.com<br /><br />6．mynetworks<br /><br />mynetworks 参数指定你所在的网络的网络地址，postfix系统根据其值来区别用户是远程的还是本地的，如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址，也可以用CIDR（无类域间路由）地址来表示,如：<br /><br />192.168.1.0/24<br /><br />192.168.1.0/26<br /><br />7．inet_interfaces<br /><br />inet_interfaces 参数指定postfix系统监听的网络接口。缺省地，postfix监听所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上，则必须指定其监听的地址。如：<br /><br />inet_interfaces = all<br /><br />inet_interface = 192.168.1.1<br /><br />4.3 postfix的UCE（unsolicited commercial email）控制<br /><br />所谓UCE控制就是指控制postfix接收或转发来自于什么地方的邮件。<br /><br />缺省地，postfix转发符合以下条件的邮件：<br /><br />* 来自客户端ip地址符合$mynetworks的邮件。<br /><br />* 来自客户端主机名符合$relay_domains及其子域的邮件。<br /><br />* 目的地为$relay_domains及其子域的邮件。<br /><br />缺省地，postfix接受符合以下条件的邮件：<br /><br />* 目的地为$inet_interfaces的邮件。<br /><br />* 目的地为$mydestination的邮件。<br /><br />* 目的地为$virtual_maps的邮件。<br /><br />但是我们也可以通过下面的规则来实现更强大的控制功能。<br /><br />1． 信头过滤<br /><br />通过header_checks参数限制接收邮件的信头的格式，如果符合指定的格式，则拒绝接收该邮件。可以指定一个或多个查询列表，如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。如：<br /><br />header_checks = regexp:/etc/postfix/header_checks<br /><br />header_checks = pcre:/etc/postfix/header_checks<br /><br />缺省地，postfix不进行信头过滤。<br /><br />2．客户端主机名/地址限制<br /><br />通过smtpd_client_restrictions参数限制可以向postfix发起SMTP 连接的客户端的主机名或ip地址。可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />reject_unknown_client：如果客户端的ip 地址在DNS中没有PTR记录则拒绝转发该客户端的连接请求。可以用 unknown_client_reject_code参数指定返回给客户机的错误代码（缺省为450）。如果你有用户没有作DNS记录则不要启用该选项。<br /><br />permit_mynetworks：如果客户端的ip地址符合$mynetworks参数定义的范围则接受该客户端的连接请求，并转发该邮件。<br /><br />check_client_access maptype:mapname：根据客户端的主机名、父域名、ip地址或属于的网络搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求，并转发该邮件。。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为 554）。<br /><br />reject_maps_rbl：如果客户端的网络地址符合$maps_rbl_domains参数的值则拒绝该客户端的连接请求。可以用maps_rbl_reject_code参数指定返回给客户机的错误代码（缺省为554）。<br /><br />示例：<br /><br />smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl<br /><br />smtpd_client_restrictions = permit_mynetworks, reject_unknown_client<br /><br />该参数的缺省值为：<br /><br />smtpd_client_restrictions =<br /><br />也即接收来自任何客户端的SMTP连接。<br /><br />3. 是否请求HELO命令<br /><br />可以通过smtpd_helo_required参数指定客户端在SMTP会话的开始是否发送一个HELO命令。你可以指定该参数的值为yes或no。缺省值为：<br /><br />smtpd_helo_required = no<br /><br />4. HELO主机名限制<br /><br />可以通过smtpd_helo_restrictions参数指定客户端在执行HELO命令时发送给postfix的主机名。缺省地， postfix 接收客户端发送的任意形式的主机名。可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />reject_invalid_hostname：如果HELO命令所带的主机名参数不符合语法规范则拒绝客户机的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码（缺省为501）。<br /><br />permit_naked_ip_address：RFC要求客户端的HELO命令包含的ip地址放在方括号内，你可以用permit_naked_ip_address参数取消该限制。因为有的mail客户端不遵守该RFC的规定。<br /><br />reject_unknown_hostname：如果客户端执行HELO命令时的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码（缺省为450）。<br /><br />reject_non_fqdn_hostname：如果客户端执行HELO命令时的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码（缺省为504）。<br /><br />check_helo_access maptype:mapname：根据客户端HELO的主机名、父域名搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为554）。<br /><br />示例：<br /><br />smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname<br /><br />5. RFC 821信头限制<br /><br />RFC 821对邮件的信头做了严格的规定，但是广泛使用的sendmail并不支<br /><br />持该规定，所以对于该参数我们只能说不，即：<br /><br />strict_rfc821_envelopes = no<br /><br />6. 通过发件人地址进行限制<br /><br />可以用smtpd_sender_restrictions参数通过发件人在执行MAIL FROM命令时提供的地址进行限制。可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />reject_unknown_sender_domain：如果MAIL FROM命令提供的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码（缺省为450）。<br /><br />check_sender_access maptype:mapname：根据MAIL FROM命令提供的主机名、父域搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为554）。可以通过该参数过滤来自某些不受欢迎的发件人的邮件。<br /><br />reject_non_fqdn_sender：如果MAIL FROM命令提供的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用non_fqdn_reject_code 参数指定返回给客户机的错误代码（缺省为504）。<br /><br />缺省地，postfix接受来自任何发件人的邮件。<br /><br />示例：<br /><br />smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain<br /><br />7. 通过收件人地址进行过滤<br /><br />可以用smtpd_recipient_restrictions参数通过发件人在执行RCPT TO命令时提供的地址进行限制。缺省值为：<br /><br />smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains<br /><br />可以指定一个或多个参数值，中间用逗号隔开。限制规则是按照查询的顺序进行的，第一条符合条件的规则被执行。可用的规则有：<br /><br />check_relay_domains：如果符合以下的条件，则接受SMTP连接请求，否则拒绝该连接，可以用relay_domains_reject_code 参数指定返回给客户机的错误代码（缺省为504）。<br /><br />* 客户端主机名符合$relay_domains及其子域<br /><br />* 目的地为$inet_interfaces、$mydestination或$virtual_maps<br /><br />permit_auth_destination：不管客户端的主机名，只要符合以下的条件，就<br /><br />接受SMTP连接请求：<br /><br />* 解析后的目标地址符合$relay_domains及其子域<br /><br />* 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps<br /><br />reject_unauth_destination：不管客户端的主机名，只要符合以下的条件，就拒绝该客户端SMTP连接请求：<br /><br />* 解析后的目标地址符合$relay_domains及其子域<br /><br />* 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps<br /><br />check_recipient_access：根据解析后的目标地址、父域搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求；如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码（缺省为554）。<br /><br />reject_unknown_recipient_domain：如果收件人的邮件地址在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码（缺省为450）。<br /><br />reject_non_fqdn_recipient：如果发件人在执行RCPT TO命令时提供的地址<br /><br />不是完整的域名则拒绝其SMTP连接请求。可以用The non_fqdn_reject_code参数指定返回给客户机的错误代码（缺省为504）。<br /><br />4.4 posftfix的性能控制<br /><br />之所以对postfix的性能进行控制，是为了在遇到邮件风暴时保证postfix可以正常运行。通常，我们可以通过对下列postfix 参数的配置来调节postfix的性能，这些参数都是通过mail.cf配置文件进行配置的，修改以后不要忘了运行postfix reload命令来使配置生效。<br /><br />1． 进程数限制<br /><br />可以通过default_process_limit 参数来控制postfix系统同时可以运行的最大进程数目。缺省值是50个。<br /><br />2． 对同一目标主机的并发连接限制<br /><br />当向同一目标主机发出SMTP连接时，postfix初始化发出两个SMTP连接，如果投递成功则增加并发的SMTP连接数目，遇到拥塞时又减少并发连接的数目。postfix中通过以下的参数对同一目标主机的并发连接进行控制：<br /><br />* initial_destination_concurrency：控制对同一目标主机的初始化并发连接数目。缺省值为2。<br /><br />* default_destination_concurrency_limit：控制初始化连接后对同一目标主机的最大并发连接数目。缺省值为10。<br /><br />* local_destination_concurrency_limit：控制对同一本地收件人的最大同时投递的邮件数目。缺省值为2，因为对本地同一收件人投递邮件时投递工作只能一个接一个的进行，所以设得在大也没用。<br /><br />3． 对同一封邮件的收件人数目限制<br /><br />通过default_destination_recipient_limit参数来控制postfix的投递代理（如<br /><br />smtp进程）可以将同一封邮件发送给多少个收件人。缺省值为50。也可以用明确指出该投递代理的参数来覆盖该缺省值。如用smtpd_recipient_limit来指定smtp投递代理可以将同一封邮件发送给多少个收件人，该参数的缺省值为1000。<br /><br />4． 推迟投递控制<br /><br />通过defer_transports参数，我们可以推迟投递该参数指定的邮件直到postfix明确的提出投递要求。下面我们看一个例子：<br /><br />有一个小型的局域网，用户都将邮件发送给局域网内部的一台postfix邮件服务器，然后通过在该服务器上拨号将邮件发送出去。这时我们可以这样指定该参数的值：<br /><br />defer_transports = smtp<br /><br />该语句表示postfix推迟投递所有的邮件直到执行sendmail -q命令，这样我们就可以在ppp的脚本中加上sendmail -q，以便在拨号成功后让postfix开始投递邮件。 </div> <img src ="http://www.blogjava.net/lyjjq/aggbug/366100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2011-12-11 19:36 <a href="http://www.blogjava.net/lyjjq/articles/366100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sendmail 8.9.3中的Mail Relay规则简介</title><link>http://www.blogjava.net/lyjjq/articles/311322.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Sat, 30 Jan 2010 05:24:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/311322.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/311322.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/311322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/311322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/311322.html</trackback:ping><description><![CDATA[<p class="m_l_cont_note1_r">&nbsp;</p>
<div class="m_l_cont_text">
<p>
<p><strong>一.什么是第三方的Mail&nbsp;Relay?&nbsp; <br />
</strong>当一台邮件服务器处理一封邮件时，该封邮件的发送者(the&nbsp;sender)和接收者(the&nbsp;recipient)都不是本地用户（local&nbsp;user),即发送者和接收者都处于本地域之外，该邮件服务器对于这封邮件的传送完全属于不相关的第三方，因此Mail&nbsp;Relay被sedmail默认禁止了。这阻止了Spammer利用你的服务器发送垃圾邮件。&nbsp; <br />
<strong>二.为什么你要停止第三方的Mail&nbsp;Relay?&nbsp; <br />
</strong>如果你的邮件服务器不能有效地控制第三方的mail&nbsp;relay，你应该立刻着手解决这个问题，不要等待spammer&nbsp;来攻击你的邮件主机，主要是因为：&nbsp; <br />
a.大量的垃圾邮件（junk&nbsp;email）可能会使你的邮件系统崩溃。它们占用你的磁盘空间，CPU资源，还可能引发Dos类型攻击（denial&nbsp;of&nbsp;&nbsp;service&nbsp;attack).&nbsp; <br />
b.你的组织可能被列入黑名单（backlist)。由于大量垃圾邮件从你的主机发出，其它一些组织或公司可能会不做任何更深的调查就更改设置阻止了从你的主机来的任何邮件，这也将同时阻止从你的站点发到它们的所有正常的商业性邮件,损失不可估量.&nbsp; <br />
c.意识到这种攻击将会发生在你身上。不要因为它没有发生就意味着你是安全的。他们每天正用一些自动扫描的工具去扫描网络而寻找那些对他们打开relay功能的邮件主机。他们可能自己写了某个程序正每刻地进行扫描，如果你的邮件主机是易受攻击的，那么扫描到你就是迟早的事情。&nbsp; <br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;三.&nbsp;Sendmail(8.9.3)如何relay你的邮件？&nbsp;&nbsp;<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果发送者和接收者都不属于本地域，sendmail将默认禁止mail&nbsp;relay.&nbsp;要想使得sendmail&nbsp;relay&nbsp; <br />
你的邮件，可以有下面两种途径，你必须确保发送者或者接收者其中至少有一个属于本地域.&nbsp; <br />
a.&nbsp;本地发送者到外部接收者(local&nbsp;sender&nbsp;to&nbsp;external&nbsp;recipient)&nbsp; <br />
b.&nbsp;外部发送者到本地接收者(external&nbsp;sender&nbsp;to&nbsp;local&nbsp;recipient)&nbsp; <br />
==========&nbsp; <br />
c.&nbsp;何为本地发送者（local&nbsp;sender)?&nbsp; <br />
当邮件服务器接收到一封从其它机器（如windows&nbsp;pc)发来的邮件时，它首先检查连接进来的主机的域名和&nbsp;IP地址，注意：&nbsp; <br />
决不是检查这封邮件的信封里的发送者地址（not&nbsp;based&nbsp;on&nbsp;the&nbsp;envelope&nbsp;MAIL&nbsp;FROM&nbsp;address!)&nbsp; <br />
(要了解一封邮件的全部信封头信息，参考（http://www.stopspam.org/email/headers/headers.html）)&nbsp; <br />
如果你是拨号用户，IP地址当然是你拨到ISP所得到的动态IP地址，然后你的主机名/域名是由你的ISP对你的IP&nbsp; <br />
地址作反向DNS解析出来的主机名/域名，&nbsp; <br />
不过大多数ISP不作这个，因此，sendmail将仅仅记录你连接进来的IP地址，由此判断是否这个地址被允许relay&nbsp;mail.对sendmail&nbsp; <br />
8.9.3来说，最通常的用来检查是否relay邮件的配置文件是/etc/mail/relay-domains,它能对IP地址或域名进行判断是否允许relay.&nbsp; <br />
如果这一步不允许，再检查/etc/mail/access（它能被通过加FEATURE(access_db)到.mc文件再用m4生成/etc/sendmail.cf所激活&nbsp; <br />
附:本文讨论的所有设置都是基于M4宏命令生成的/etc/sendmail.cf）&nbsp; <br />
d.&nbsp;何为本地接收者（local&nbsp;recipient&nbsp;）？&nbsp; <br />
决定接收者邮件地址是否为本地的不是件轻松的事情，sendmail认为类w中的所有主机/域为本地接收者，也就是/etc/mail/sendmail.cw文件或者/etc/sendmail.cf中的Cw类定义后面列出的所有主机或域名。为了激活对/etc/mail/sendmail.cw的检查,使用特性Feature(use_cw_file)。但是这还不够，因为这个能被愚弄的，如.&nbsp; <br />
因此sendmail用规则集(ruleset)先移走这个地址的本地部分(&nbsp; <br />
@local.site)后，如果仍有一些域，则考虑是否能通过relay检查，另外，sendmail也还检查/etc/mail/access&nbsp; <br />
决定是否有项目匹配接收者地址所在的域，根据相应标记确定是否被允许接收。&nbsp; </p>
<p><strong>四.&nbsp;Sendmail&nbsp;8.9.3:&nbsp;anti-relaying（拒绝传递）怎么工作？ <br />
</strong>a.&nbsp;如果Mail&nbsp;From:行有下面的参数，sendmail拒绝mail&nbsp;relay: <br />
1.发送者的域名不能被解析。这个能用FEATURE(accept_unresolvable_domains)被禁止。&nbsp; <br />
2.非全称的域名。能被用FEATURE(accept_unresolvable_domains)禁止。&nbsp; <br />
3.与access&nbsp;map（&nbsp;/etc/mail/access）中的一项匹配。 <br />
域名：如spammer.domain&nbsp;&nbsp;reject <br />
全称email地址：如spammer@domain&nbsp;reject <br />
邮件地址的用户名部分：如spammer@&nbsp;&nbsp;reject <br />
或者不用'reject'用'error&nbsp;code&nbsp;error&nbsp;text' <br />
spammer.domain "501&nbsp;No&nbsp;e-mail&nbsp;from&nbsp;this&nbsp;domain." <br />
spammer@domain "501&nbsp;No&nbsp;e-mail&nbsp;from&nbsp;your&nbsp;address." <br />
spammer@ "501&nbsp;Get&nbsp;a&nbsp;real&nbsp;address." <br />
甚至用DISCARD&nbsp;（接收并安静地删除掉，让发送者感觉象被接收） <br />
b.检查接收者。 <br />
用FEATURE(blacklist_recipients)允许指定access&nbsp;map中不应该接收email的用户。 <br />
如： <br />
badlocaluser 550&nbsp;Mailbox&nbsp;disabled&nbsp;for&nbsp;this&nbsp;username <br />
host.mydomain 550&nbsp;That&nbsp;host&nbsp;does&nbsp;not&nbsp;accept&nbsp;mail <br />
user@otherhost.mydomain 550&nbsp;Mailbox&nbsp;disabled&nbsp;for&nbsp;this&nbsp;recipient <br />
这将禁止发到你本地域中的用户邮件地址badlocaluse@mydomain和在主机 <br />
host.mydomain中的任何用户和单个地址&nbsp;user@otherhost.mydomain.&nbsp;<br />
注：关于access&nbsp;map的说明： <br />
它的默认位置是/etc/mail/access.&nbsp;每次更新后你必须运行 <br />
makemap&nbsp;hash&nbsp;/etc/mail/access.db&nbsp;&lt;&nbsp;/etc/mail/access&nbsp;，不需要重启用Sendmail. <br />
它可以有以下入口： <br />
1.域名 <br />
2.email地址 <br />
3.本地用户名部分 <br />
4.IP地址（完整的或者子网） <br />
和以下操作标记： <br />
1.OK&nbsp; <br />
接收email，即使被其它规则拒绝了 <br />
2.RELAY&nbsp; <br />
允许通过该邮件主机relay的域。relay意味着OK <br />
3.REJECT&nbsp; <br />
拒绝email并显示内部通用的错误提示 <br />
4.DISCARD&nbsp; <br />
安静地接收随后取消掉这封邮件 <br />
5.XYZ&nbsp;some&nbsp;other&nbsp;text <br />
XYZ是&nbsp;RFC&nbsp;821兼容的错误代码后面跟上一段自定义的错误信息 <br />
<strong>五.常见的两种检查规则 <br />
</strong><br />
1.&nbsp;check_relay&nbsp;规则（发送者检查）： <br />
检查主机名和IP地址，当无论什么时候，一台客户通过(E)SMTP连到邮件服务器时该规则被调用。&nbsp;&nbsp; <br />
2.&nbsp;check_rcpt&nbsp;规则（接收者检查）： <br />
用于RCPT命令(用来禁止未被授权的relay).该规则禁止了所有的已知的relay诡计。 <br />
你能#tail&nbsp;-f&nbsp;/var/log/maillog检查是否某个邮件被运用了上述规则。 <br />
<strong>六.&nbsp;Why&nbsp;"550&nbsp;Relaying&nbsp;Denied"?&nbsp; <br />
</strong><br />
如果你从你自己的邮件服务器得到了一个错误说"550&nbsp;Relaying&nbsp;Denied"，你需要弄清楚为什么，甚至可能你认为这决不应该发生，但是你可能忽略了某些细节，看上去是应该被Relay，但实际上不。看下面的几个例子： <br />
1.正确的DNS数据&nbsp; <br />
QAA02454:&nbsp;...&nbsp;we&nbsp;do&nbsp;not&nbsp;relay <br />
QAA02454:&nbsp;ruleset=check_rcpt,&nbsp;arg1=, <br />
relay=170-51-209.ipt.aol.com&nbsp;[152.170.51.209],&nbsp;reject=550 <br />
...&nbsp;we&nbsp;do&nbsp;not&nbsp;relay <br />
QAA02454:&nbsp;from=,&nbsp;size=0,&nbsp;class=0,&nbsp;pri=0,&nbsp;nrcpts=0, <br />
proto=SMTP,&nbsp;relay=170-51-209.ipt.aol.com&nbsp;[152.170.51.209] <br />
这里，主机名为170-51-209.ipt.aol.com的机器IP地址为152.170.51.209&nbsp;试着交付一封邮件给，然而，这个被拒绝了，因为接收者不是本地接收者并且发送者的机器170-51-209.ipt.aol.com（152.170.51.209）也不是本地发送者。 <br />
2.错误的DNS数据&nbsp; <br />
QAA02454:&nbsp;...&nbsp;Relaying&nbsp;denied <br />
QAA02454:&nbsp;ruleset=check_rcpt,&nbsp;arg1=,&nbsp;relay=[134.245.85.93], <br />
reject=550&nbsp;...&nbsp;Relaying&nbsp;denied <br />
QAA02454:&nbsp;from=,&nbsp;size=0,&nbsp;class=0,&nbsp;pri=0,&nbsp;nrcpts=0, <br />
proto=SMTP,&nbsp;relay=[134.245.85.93] <br />
这个其实与上面的情况相同，对于IP地址134.245.85.93没有PTR记录被找到，关于这一点有个问题就是：万一你的邮件主机的relay功能仅仅是基于主机/域名进行检查是否为本地发送者，(e.g.,&nbsp;FEATURE(relay_entire_domain)，那样的话，如果该IP地址是属于你的本地域之内，仍将被你拒绝relay.解决办法是为这个IP地址加PTR记录，也就是反向DNS解析，或者添加到/etc/hosts文件中，再或者添加该IP地址到access&nbsp;map 中去（/etc/mail/access）。 <br />
3.不一致的DNS数据 <br />
QAA02454:&nbsp;...&nbsp;Relaying&nbsp;denied <br />
QAA02454:&nbsp;ruleset=check_rcpt,&nbsp;arg1=, <br />
relay=some.domain&nbsp;[10.0.0.1]&nbsp;(may&nbsp;be&nbsp;forged), <br />
reject=550&nbsp;...&nbsp;Relaying&nbsp;denied <br />
QAA02454:&nbsp;from=,&nbsp;size=0,&nbsp;class=0,&nbsp;pri=0,&nbsp;nrcpts=0, <br />
proto=SMTP,&nbsp;relay=some.domain&nbsp;[10.0.0.1]&nbsp;(may&nbsp;be&nbsp;forged) <br />
这儿,(may&nbsp;be&nbsp;forged)是个很重要的部分：它说明对于该主机的DNS数据是不一致的，并且主机名不被用来检查是否被允许relay,而仅仅检查IP地址，因此这和第二种情况相同。 <br />
<strong>七.&nbsp;动态Relay授权控制简介：（DRAC） <br />
</strong><br />
DRAC是一个后台程序，它动态地为Sendmail更新access&nbsp;map文件，它提供一种方法，就是允许合法的用户通过你的SMTP邮件主机relay&nbsp;mail,同时仍然阻止其它人用它作为Spam&nbsp;Relay.当用户被POP/IMAP服务器认证后其IP地址被立即加入/etc/mail/access允许mail&nbsp;relay.默认地，该IP地址在access&nbsp;map的入口在30分钟后被终止了。 <br />
这种功能特别是对那些公司有用，它们在各个地方有办事处，外地办事处或出差在外的笔记本用户通过拨入当地ISP，且设置了发送邮件服务器为本公司的SMTP邮件主机时。 <br />
一般地，Sendmail所能看见的唯一可靠的信息是客户机的主机/域名或IP地址，并且当一个用户是通过拨本地ISP连接到其本公司总部的SMTP邮件服务器时，Sendmail不能分辩你的用户是spammer还是本公司合法员工，如果拨号用户有固定的IP地址/域名，你可以配置sendmail允许他们relay&nbsp;mail.但是大多数情况，特别在中国，拨号用户每次得到的是不同的变化多端的IP地址，因此你不得不告诉用户通过他们本地ISP提供的邮件主机发送邮件. <br />
DRAC所用的方法是叫做POP-before-SMTP,&nbsp;既然POP服务器知道每一个接收邮件的客户机的IP地址,这些IP地址能被收集起来动态构建access&nbsp;map,你可能需要写一个程序来收集这些地址,象上面说的一样,默认保留30分钟然后取消这些IP地址的mail&nbsp;relay.&nbsp;一般地定期运行makemap程序更新access&nbsp;map. <br />
这有两种情况: <br />
1.&nbsp;拨到ISP后先收后发. <br />
2.&nbsp;在发件信(outbox)中有信,拨号后先发后收. <br />
第一种情况没有问题,对于第二种情况,需要在连到POP3信箱收信之后邮件才能被发送, <br />
第一次发送将被拒绝. <br />
第二种情况在被POP3取得认证后，随即access&nbsp;map被更新允许SMTP&nbsp;Mail&nbsp;Relay. </p>
</div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/311322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2010-01-30 13:24 <a href="http://www.blogjava.net/lyjjq/articles/311322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>管理 sendmail 的邮件队列</title><link>http://www.blogjava.net/lyjjq/articles/247806.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Mon, 22 Dec 2008 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/247806.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/247806.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/247806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/247806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/247806.html</trackback:ping><description><![CDATA[<p>邮件队列是存储 <span class="bold">sendmail</span> 命令传送的邮件消息数据和控制文件的目录。缺省情况下，邮件队列是 <span class="bold">/var/spool/mqueue</span>。</p>
<p>邮件消息可能由于很多原因而排入队列。</p>
<p>例如：</p>
<ol type="1">
    <li><span class="bold">sendmail</span> 命令可以配置成按一定的时间间隔处理队列，而不是立即处理。如果这样，邮件消息必须临时存储。
    <li>如果一个远程主机不响应一个邮件连接的请求，邮件系统会将这些消息排入队列，稍后再作尝试。</li>
</ol>
<a id="idx86" name="idx86"></a><a id="idx87" name="idx87"></a><a id="idx88" name="idx88"></a><a id="idx89" name="idx89"></a><a name="a2a5b395879joyc"></a>
<h3 id="a2a5b395879joyc">打印邮件队列</h3>
<p>队列内容可以使用 <span class="bold">mailq</span> 命令打印（或通过指定 <span class="bold">sendmail</span> 命令的 <span class="bold">-bp</span> 标志）。</p>
<p>这些命令产生队列标识、消息大小、消息进入队列的日期以及发送方与收件人的列表。</p>
<a id="idx90" name="idx90"></a><a name="a213x995e2"></a>
<h3 id="a213x995e2">邮件队列文件</h3>
<p>队列中的每条消息都与一定数量的文件相关联。这些文件按以下约定命名：</p>
<p>&nbsp;</p>
<pre class="xmp"><span class="italic">Type</span>f<span class="italic">ID</span></pre>
<p>其中 <span class="italic">ID</span> 是一个唯一的消息队列标识，而 <span class="italic">Type</span> 是以下表示文件类型的字母中的一个：</p>
<a name="wq55"></a>
<table id="wq55" rules="none" width="100%" summary="" border="0" frame="void">
    <tbody valign="top">
        <tr>
            <td width="5%"><a id="a213x995e7" name="a213x995e7"></a><span class="bold">d</span></td>
            <td width="95%">包含消息正文但无标题信息的数据文件。</td>
        </tr>
        <tr>
            <td><a id="a213x995ea" name="a213x995ea"></a><span class="bold">q</span></td>
            <td>队列控制文件。该文件包含处理作业所需要的信息。</td>
        </tr>
        <tr>
            <td><a id="a213x995eb" name="a213x995eb"></a><span class="bold">t</span></td>
            <td>临时文件。该文件是 <span class="bold">q</span> 文件重建时的一个映象。它快速重命名为 <span class="bold">q</span> 文件。</td>
        </tr>
        <tr>
            <td><a id="a213x995ec" name="a213x995ec"></a><span class="bold">x</span></td>
            <td>在会话过程中存在并显示该次会话中发生的任何事件的记录文件。</td>
        </tr>
    </tbody>
</table>
<p>例如，如果一条消息的队列标识为 AA00269，当 <span class="bold">sendmail</span> 命令尝试传送消息时，在邮件队列目录中创建和删除以下文件：</p>
<a name="wq56"></a>
<table id="wq56" rules="none" width="100%" summary="" border="0" frame="void">
    <tbody valign="top">
        <tr>
            <td width="15%"><a id="a213x995ee" name="a213x995ee"></a><span class="bold">dfAA00269</span></td>
            <td width="85%">数据文件</td>
        </tr>
        <tr>
            <td><a id="a213x995f1" name="a213x995f1"></a><span class="bold">qfAA00269</span></td>
            <td>控制文件</td>
        </tr>
        <tr>
            <td><a id="a213x995f2" name="a213x995f2"></a><span class="bold">tfAA00269</span></td>
            <td>临时文件</td>
        </tr>
        <tr>
            <td><a id="a213x995f3" name="a213x995f3"></a><span class="bold">xfAA00269</span></td>
            <td>记录文件</td>
        </tr>
    </tbody>
</table>
<a name="bae2a45286dada"></a>
<h4 id="bae2a45286dada">q 控制文件</h4>
<p><a id="idx91" name="idx91"></a></p>
<p><span class="bold">q</span> 控制文件包括一系列行，每一行都以一个代码字母开始：</p>
<a name="wq57"></a>
<table id="wq57" rules="none" width="100%" summary="" border="0" frame="void">
    <tbody valign="top">
        <tr>
            <td width="5%"><a id="a2a5b396529joyc" name="a2a5b396529joyc"></a><span class="bold">B</span></td>
            <td width="95%">指定 <tt>body type</tt>。该行其余部分是定义 <tt>body type</tt> 的文本字符串。如果缺失该项字段，则缺省情况下 <tt>body type</tt> 是 7 位的，而且不会尝试特殊的处理。合法值是 <span class="bold">7BIT</span> 和 <span class="bold">8BITMIME</span>。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396555joyc" name="a2a5b396555joyc"></a><span class="bold">C</span></td>
            <td>包括控制用户。对于以文件或程序作收件人的地址，<span class="bold">sendmail</span> 作为该文件或程序的所有者来执行传送。控制用户被设置为文件或程序的所有者。由 <span class="bold">.forward</span> 或 <span class="bold">:include:</span> 文件读取的收件人地址也将使控制用户被设置为文件所有者。当 <span class="bold">sendmail</span> 传送邮件到这些收件人时，sendmail 作为控制用户传送，然后转换回 root 用户。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396581joyc" name="a2a5b396581joyc"></a><span class="bold">F</span></td>
            <td>包括信包标志。标志是以下的任意组合：<span class="bold">w</span>（设置 <span class="bold">EF_WARNING</span> 标志）、<span class="bold">r</span>（设置 <span class="bold">EF_RESPONSE</span> 标志）、<span class="bold">8</span>（设置 <span class="bold">EF_HAS8BIT</span> 标志）和 <span class="bold">b</span>（设置 <span class="bold">EF_DELETE_BCC</span> 标志）。其它字母则被忽略而无提示。</td>
        </tr>
        <tr>
            <td><a id="a213x995f7" name="a213x995f7"></a><span class="bold">H</span></td>
            <td>包括一个标题定义。此类行的数量任意。<span class="bold">H</span> 行出现的顺序确定了它们在最终消息里的出现顺序。这些行使用的语法与 <span class="bold">/etc/mail/sendmail.cf</span> 配置文件中的标题定义相同。（对于早于 AIX 5.1 的版本，该文件是 <span class="bold">/etc/sendmail.cf</span>。）</td>
        </tr>
        <tr>
            <td><a id="a2a5b396609joyc" name="a2a5b396609joyc"></a><span class="bold">I</span></td>
            <td>为 <span class="bold">df</span> 文件指定内节点和设备信息；这可以在磁盘崩溃后用来恢复邮件队列。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396635joyc" name="a2a5b396635joyc"></a><span class="bold">K</span></td>
            <td>指定上一次传输尝试的时间（以秒为单位）。</td>
        </tr>
        <tr>
            <td><a id="a213x995f8" name="a213x995f8"></a><span class="bold">M</span></td>
            <td>当一条消息由于在传送尝试中出现了错误而放入队列时，错误的性质就存储在 <span class="bold">M</span> 行。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396660joyc" name="a2a5b396660joyc"></a><span class="bold">N</span></td>
            <td>指定传送尝试的总数。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396688joyc" name="a2a5b396688joyc"></a><span class="bold">O</span></td>
            <td>指定 ESMTP 的消息传输系统（MTS）的原始值。它只用于传送状态通知。</td>
        </tr>
        <tr>
            <td><a id="a213x995f9" name="a213x995f9"></a><span class="bold">P</span></td>
            <td>包括当前消息的优先级。优先级用来对队列排序。数字越大表示优先级越低。当消息位于队列中时优先级增加。初始优先级取决于消息的类和消息的大小。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396714joyc" name="a2a5b396714joyc"></a><span class="bold">Q</span></td>
            <td>包含初始收件人，由 ESMTP 事务中的 <tt>ORCPT=</tt> 字段指定。仅用于传送状态通知。只应用于紧接着的 <span class="bold">R</span> 行。</td>
        </tr>
        <tr>
            <td><a id="a213x995fa" name="a213x995fa"></a><span class="bold">R</span></td>
            <td>包含收件人地址。每个收件人占一行。</td>
        </tr>
        <tr>
            <td><a id="a213x995fb" name="a213x995fb"></a><span class="bold">S</span></td>
            <td>包含发送方地址。此类行只有一行。</td>
        </tr>
        <tr>
            <td><a id="a213x995fc" name="a213x995fc"></a><span class="bold">T</span></td>
            <td>包含消息创建时间，用来计算何时消息超时。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396739joyc" name="a2a5b396739joyc"></a><span class="bold">V</span></td>
            <td>指定队列文件格式版本号（该队列文件格式用来允许新的 <span class="bold">sendmail</span> 二进制文件读取旧版本创建的队列文件）。缺省时指版本 <span class="bold">0</span>。如果存在，必须是文件的第一行。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396764joyc" name="a2a5b396764joyc"></a><span class="bold">Z</span></td>
            <td>指定原始信包标识（从 ESMTP 事务中）。只用于传送状态通知。</td>
        </tr>
        <tr>
            <td><a id="a2a5b396790joyc" name="a2a5b396790joyc"></a><span class="bold">$</span></td>
            <td>包含宏定义。某些宏（<span class="bold">$r</span> 和 <span class="bold">$s</span>）的值会传递到队列运行阶段。</td>
        </tr>
    </tbody>
</table>
<p>传送到 <tt>amy@zeus</tt> 的消息的 <span class="bold">q</span> 文件类似于：</p>
<p>&nbsp;</p>
<pre class="xmp">P217031
T566755281
MDeferred: Connection timed out during user open with zeus
Ramy@zeus
H?P?return-path: &lt;geo&gt;
Hreceived: by george (0.13 (NL support)/0.01)
id AA00269; Thu, 17 Dec 87 10:01:21 CST
H?D?date: Thu, 17 Dec 87 10:01:21 CST
H?F?From: geo
Hmessage-id: &lt;8712171601.AA00269@george&gt;
HTo: amy@zeus
Hsubject: test</pre>
<p>其中：</p>
<a name="wq58"></a>
<table id="wq58" rules="none" width="100%" summary="" border="0" frame="void">
    <tbody valign="top">
        <tr>
            <td width="50%"><a id="a2a5b397078joyc" name="a2a5b397078joyc"></a><tt>P217031</tt></td>
            <td width="50%">消息的优先级</td>
        </tr>
        <tr>
            <td><a id="a2a5b397103joyc" name="a2a5b397103joyc"></a><tt>T566755281</tt></td>
            <td>提交时间（秒）</td>
        </tr>
        <tr>
            <td><a id="a2a5b397129joyc" name="a2a5b397129joyc"></a><tt>MDeferred: Connection timed out during user open with zeus</tt></td>
            <td>状态消息</td>
        </tr>
        <tr>
            <td><a id="a2a5b397152joyc" name="a2a5b397152joyc"></a><tt>Sgeo</tt></td>
            <td>发送方标识</td>
        </tr>
        <tr>
            <td><a id="a2a5b397176joyc" name="a2a5b397176joyc"></a><tt>Ramy@zeus</tt></td>
            <td>收件人标识</td>
        </tr>
        <tr>
            <td><a id="a2a5b397206joyc" name="a2a5b397206joyc"></a><tt>H<span>lines</span></tt></td>
            <td>消息的报头信息</td>
        </tr>
    </tbody>
</table>
<a name="a213x995d9"></a>
<h3 id="a213x995d9">在 sendmail 中指定时间值</h3>
<p><a id="idx92" name="idx92"></a></p>
<p>要设置消息超时和队列处理间隔，必须用特定的时间值格式。时间值的格式是：</p>
<p>&nbsp;</p>
<pre class="xmp">-q<span class="italic">NumberUnit</span></pre>
<p>其中 <span class="italic">Number</span> 是一个整数值，<span class="italic">Unit</span> 是单位字母。<span class="italic">Unit</span> 可以是以下值中的一个：</p>
<a name="wq59"></a>
<table id="wq59" rules="none" width="100%" summary="" border="0" frame="void">
    <tbody valign="top">
        <tr>
            <td width="5%"><a id="a213x995db" name="a213x995db"></a><span class="bold">s</span></td>
            <td width="95%">秒</td>
        </tr>
        <tr>
            <td><a id="a213x995dc" name="a213x995dc"></a><span class="bold">m</span></td>
            <td>分</td>
        </tr>
        <tr>
            <td><a id="a213x995dd" name="a213x995dd"></a><span class="bold">h</span></td>
            <td>小时</td>
        </tr>
        <tr>
            <td><a id="a213x995de" name="a213x995de"></a><span class="bold">d</span></td>
            <td>天</td>
        </tr>
        <tr>
            <td><a id="a213x995df" name="a213x995df"></a><span class="bold">w</span></td>
            <td>周</td>
        </tr>
    </tbody>
</table>
<p>如果没有指定 <span class="italic">Unit</span>，<span class="bold">sendmail</span> 守护程序使用分（<span class="bold">m</span>）作为缺省值。下面三个示例说明时间值的规范：</p>
<p>&nbsp;</p>
<pre class="xmp">/usr/sbin/sendmail -q15d</pre>
<p>该命令使得 <span class="bold">sendmail</span> 守护程序每 15 天处理一次队列。</p>
<p>&nbsp;</p>
<pre class="xmp">/usr/sbin/sendmail -q15h</pre>
<p>该命令使得 <span class="bold">sendmail</span> 守护程序每 15 小时处理一次队列。</p>
<p>&nbsp;</p>
<pre class="xmp">/usr/sbin/sendmail -q15</pre>
<p>该命令使得 <span class="bold">sendmail</span> 守护程序每 15 分钟处理一次队列。</p>
<a name="a213x99614"></a>
<h3 id="a213x99614">强制邮件队列</h3>
<p><a id="idx93" name="idx93"></a></p>
<p>在某些情况下，您可能发现队列由于某种原因阻塞。您可以使用 <span class="bold">-q</span> 标志（没有值）强制一个队列运行。您也可以用 <span class="bold">-v</span> 标志（详细）来观察发生了什么：</p>
<p>&nbsp;</p>
<pre class="xmp">/usr/sbin/sendmail -q -v</pre>
<p>使用一个队列修饰符，您也可以将作业限制在具有特定队列标识符、发送方或收件人的范围中。例如，<span class="bold">-qRsally</span> 将队列运行限制为收件人地址之一中有字符串 <span class="bold">sally</span> 的作业。同样，<span class="bold">-qS</span><span class="italic"> 字符串</span>会将运行限制为特定的发送方，而 <span class="bold">-qI</span><span class="italic"> 字符串</span>将它限制为特定的队列标识。</p>
<a name="a213x995cc"></a>
<h3 id="a213x995cc">设置队列处理时间间隔</h3>
<a id="idx94" name="idx94"></a>
<p>守护程序启动时 <span class="bold">-q</span> 标志的值确定 <span class="bold">sendmail </span>守护程序处理邮件队列的时间间隔。</p>
<p><span class="bold">sendmail</span> 守护程序通常由 <span class="bold">/etc/rc.tcpip</span> 文件在系统启动时启动。<span class="bold">/etc/rc.tcpip</span> 文件包含一个称为队列处理间隔（QPI）的变量，该变量在该文件启动 <span class="bold">sendmail</span> 守护程序时用来指定 <span class="bold">-q</span> 标志的值。缺省情况下，<span class="bold">qpi</span> 的值是 30 分钟。要指定不同的队列处理间隔：</p>
<ol type="1">
    <li>用您喜欢的编辑器编辑 <span class="bold">/etc/rc.tcpip</span> 文件。
    <li>查找给 <span class="italic">qpi</span> 变量指定值的行，例如：
    <p>&nbsp;</p>
    <pre class="xmp">qpi=30m</pre>
    <li>将指定给变量 <span class="italic">qpi</span> 的值更改为希望的时间值。</li>
</ol>
<p>这些变化会在下一次系统重新启动时生效。如果您想让这些变化立刻生效，请停止并重新启动 <span class="bold">sendmail</span> 守护程序，指定新的 <span class="bold">-q</span> 标志值。更多相关信息，请参阅<a href="http://publib16.boulder.ibm.com/pseries/zh_CN/aixbman/commadmn/ml_queue.htm#a2a5b399043joyc">停止 sendmail 守护程序</a>和<a href="http://publib16.boulder.ibm.com/pseries/zh_CN/aixbman/commadmn/ml_queue.htm#c15fd1b790atla">启动 sendmail 守护程序</a>。</p>
<a name="a213x99608"></a>
<h3 id="a213x99608">移动邮件队列</h3>
<p><a id="idx95" name="idx95"></a></p>
<p>当一个主机长期关闭时，路由到（或通过）该主机的很多消息可能存储在邮件队列中。结果 <span class="bold">sendmail</span> 命令要花费很长时间对队列排序，这严重降低了系统性能。如果您移动队列到一个临时空间并创建一个新的队列，旧队列可以稍后在该主机恢复服务后运行。要移动队列到一个临时空间并创建一个新的队列，请：</p>
<ol type="1">
    <li>按<a href="http://publib16.boulder.ibm.com/pseries/zh_CN/aixbman/commadmn/ml_queue.htm#a2a5b399043joyc">停止 sendmail 守护程序</a>中的指示信息停止 <span class="bold">sendmail</span> 守护程序。
    <li>输入以下内容移动整个队列目录：
    <p>&nbsp;</p>
    <pre class="xmp">cd /var/spool
    mv mqueue omqueue</pre>
    <li>按<a href="http://publib16.boulder.ibm.com/pseries/zh_CN/aixbman/commadmn/ml_queue.htm#c15fd1b790atla">启动 sendmail 守护程序</a>中的指示信息重新启动 <span class="bold">sendmail</span> 守护程序。
    <li>输入以下内容处理旧邮件队列：
    <p>&nbsp;</p>
    <pre class="xmp">/usr/sbin/sendmail -oQ/var/spool/omqueue -q</pre>
    <p class="indatacontent"><span class="bold">-oQ</span> 标志指定一个备用队列目录。<span class="bold"> -q</span> 标志指定运行队列中的每一项作业。要获取操作过程的报告，请使用 <span class="bold">-v</span> 标志。</p>
    <a name="wq62"></a>
    <div class="notetitle" id="wq62">注:</div>
    <div class="notebody">此操作可能要花些时间。</div>
    <li>当队列为空时，输入以下内容除去日志文件和临时目录：
    <p>&nbsp;</p>
    <pre class="xmp">rm /var/spool/omqueue/*
    rmdir /var/spool/omqueue</pre>
    </li>
</ol>
<a id="idx96" name="idx96"></a><a id="idx97" name="idx97"></a><a name="c15fd1b790atla"></a>
<h3 id="c15fd1b790atla">启动 sendmail 守护程序</h3>
<p>要启动 <span class="bold">sendmail</span> 守护程序，请输入以下命令中的一个：</p>
<p>&nbsp;</p>
<pre class="xmp">startsrc -s sendmail -a "-bd -q15"</pre>
<p>&nbsp;</p>
<pre class="xmp">/usr/lib/sendmail -bd -q15</pre>
<p>如果 <span class="bold">sendmail</span> 守护程序在输入这些命令中的一个时已经激活，请参阅屏幕上的以下消息：</p>
<p>&nbsp;</p>
<pre class="xmp">sendmail 子系统已经激活。不支持多实例。</pre>
<p>如果 <span class="bold">sendmail</span> 守护程序没有被激活，您将会看到一条消息表示 <span class="bold">0sendmail</span> 守护程序已经启动。</p>
<a id="idx98" name="idx98"></a><a id="idx99" name="idx99"></a><a name="a2a5b399043joyc"></a>
<h3 id="a2a5b399043joyc">停止 sendmail 守护程序</h3>
<p>要停止 <span class="bold">sendmail</span> 守护程序，请运行 <span class="bold">stopsrc -s sendmail</span> 命令。</p>
<p>如果 <span class="bold">sendmail</span> 守护程序没有随 <span class="bold">startsrc</span> 命令启动，请：</p>
<ul>
    <li>查找 <span class="bold">sendmail</span> 进程标识。
    <li>输入 <span class="bold">kill</span> <span class="italic">sendmail_pid</span> 命令。（其中 <span class="italic">sendmail_pid</span> 是 <span class="bold">sendmail</span> 过程的处理标识）。</li>
</ul>
<img src ="http://www.blogjava.net/lyjjq/aggbug/247806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2008-12-22 18:46 <a href="http://www.blogjava.net/lyjjq/articles/247806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置Sendmail</title><link>http://www.blogjava.net/lyjjq/articles/154028.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Thu, 18 Oct 2007 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/154028.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/154028.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/154028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/154028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/154028.html</trackback:ping><description><![CDATA[<h1 class="firstHeading">&nbsp;</h1>
<div id="bodyContent">
<h2>要生成sendmail.cf文件</h2>
<p>一般是编译sendmail.mc来生成sendmail.cf,这样的好处是通过编译，会查看出一些sendmail的设置错误和漏洞。 </p>
<pre># cd /etc/mail
# vi sendmail.mc
</pre>
<p>(1)找到： </p>
<pre>TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
</pre>
<p>打开注解，启用相应的认证机制，主要是为了支持Outlook。 </p>
<p>(2)找到： <br />
<br />
DAEMON_OPTIONS(`Port=25, Name=MSA,M=Ea')dnl 这样sendmail将在25端口进行强制身份认证<br />
dnl DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl<br />
dnl DAEMON_OPTIONS(`Port=587, Name=MSA,M=a')dnl<br />
</p>
<pre>define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
</pre>
<p>打开注解，启用相应的认证机制，主要是为了支持Outlook。 </p>
<p>(3)在(2)后添加两行： </p>
<p><br />
<br />
设置MTA和MSA端口。 </p>
<p>(4)找到： </p>
<pre>dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
</pre>
<p>将该行注释掉，以允许通过网络连接Sendmail。 </p>
<p>(5)找到： </p>
<pre>dnl FEATURE(`accept_unresolvable_domains')
</pre>
<p>禁止不可解析域名的转发邮件。 </p>
<p>最后保存退出。 </p>
<div class="editsection" style="float: right; margin-left: 5px">[<a title="配置Sendmail" href="http://kb.discuz.net/index.php?title=%E9%85%8D%E7%BD%AESendmail&amp;action=edit&amp;section=2">编辑</a>]</div>
<a name=".E7.BC.96.E8.AF.91sendmail.mc.E7.94.9F.E6.88.90sendmail.cf.E6.96.87.E4.BB.B6"></a>
<h2>编译sendmail.mc生成sendmail.cf文件</h2>
<pre># m4 /etc/mail/sendmail.mc &gt; /etc/mail/sendmail.cf
# /etc/rc.d/init.d/sendmail restart --重起sendmail服务。
</pre>
<p>如果在执行m4 /etc/mail/sendmail.mc &gt; /etc/mail/sendmail.cf 报错的话，那么检查是否安装sendmail-cf.*.rpm是否安装： </p>
<pre># rpm -qa | grep sendmail-cf
</pre>
<p>如果没有安装，则需要在安装光盘中找到sendmail-cf包，并安装： </p>
<pre># rpm -ivh sendmail-cf*.rpm
</pre>
<div class="editsection" style="float: right; margin-left: 5px">[<a title="配置Sendmail" href="http://kb.discuz.net/index.php?title=%E9%85%8D%E7%BD%AESendmail&amp;action=edit&amp;section=3">编辑</a>]</div>
<a name=".E6.A3.80.E6.B5.8B.E7.BC.96.E8.AF.91.E7.BB.93.E6.9E.9C"></a>
<h2>检测编译结果</h2>
<p>1、检测SASL被编译到sendmail中。 </p>
<pre>#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
</pre>
<p>输出类似如下： </p>
<pre>NETUNIX NEWDB NIS PIPELINING SASL SCANF STARTTLS TCPWRAPPERS
</pre>
<p>保证你看到SASL就是正确的。 </p>
<p>2、检测25端口： </p>
<pre># telnet localhost 25
<br />
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fyhtest.163.net ESMTP Sendmail 8.12.5/8.12.5; Thu, 10 Apr 2003 16:35:42 -0400
ehlo test
250-fyhtest.163.net Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
<br />
quit ---退出
<br />
</pre>
<p>只要输出有LOGIN PLAIN就可以了。 </p>
<p>到这里，sendmail就配置完了，你可以添加一个用户进行测试： </p>
<pre>#useradd test
#passwd test 设置密码
</pre>
<p>把你服务器的域名添加到/etc/mail/local-host-names中。 </p>
<div class="editsection" style="float: right; margin-left: 5px">[<a title="配置Sendmail" href="http://kb.discuz.net/index.php?title=%E9%85%8D%E7%BD%AESendmail&amp;action=edit&amp;section=4">编辑</a>]</div>
<a name=".E5.85.B6.E4.BB.96.E8.AE.BE.E7.BD.AE"></a>
<h2>其他设置</h2>
<p>要想更好的使用sendmail，常用到的一些设置： </p>
<p>1、限制最大邮件。 </p>
<pre># vi /etc/mail/sendmail.cf
# maximum message size
MaxMessageSize=5000000 (注：5M)
</pre>
<p>2、最大的群发数目。 </p>
<pre># vi /etc/mail/sendmail.cf
# maximum number of recipients per SMTP envelope
MaxRecipientsPerMessage=20 （注：20个）
</pre>
<p>3、域名文件----local-host-name 可以用他来实现虚拟域名或多域名支持。 </p>
<pre># vi /etc/mail/local-host-name
test.com
test1.com
</pre>
<p>4、mail别名文件--aliases。 </p>
<pre># vi /etc/aliases
系统内部别名：discuz:bbsadmin
discuz是我的用户名，其他的是别名，用逗号隔开。
转发到其他的邮箱：discuz:bbsadmin@discuz.com
# newaliases --写到库中
</pre>
<p>5、邮件控制文件 </p>
<p>relay、ok、reject和discard。 </p>
<p>relay: 可以实现转发。 </p>
<p>ok: 是用来允许用户的任意访问，它会覆盖任何其它已建立的检查（实际设置中，最好不要设为这项，除非你对该用户是绝对信任的）； </p>
<p>reject: 可以实现对来访地址的拒绝，它根本就不容许该地址与你的邮件服务器进行连接通信； </p>
<p>discard: 的作用是在接收到传输的邮件消息后，把它丢弃掉。在发送者看来，他的邮件的确是接收了，但他并不知道，发送的目的地址根本不可能接收到他的邮件，服务器巧妙地欺骗了他。 </p>
<pre># vi /etc/mail/access
<br />
localhost.localdomain RELAY ---允许
localhost RELAY
127.0.0.1 RELAY
peng@sina.com ok
@sexgirl.net reject
211.77.22.45 discard
<br />
# makemap hash /etc/mail/access.db &lt; /etc/mail/access --写到库中</pre>
<pre></pre>
<strong>6、Sendmail环境下的防止邮件relay</strong>&nbsp; <br />
从8.9版本开始，缺省的是不允许邮件转发(mail&nbsp;relay)的。最简单的允许邮件转发的方法是在文件/etc/mail/relay-domains中进行设置。该文件中列出的域名内的信件都允许通过本地服务器进行邮件转发。&nbsp; <br />
为了更精确的设置，可以在sendmail.mc中添加如下几个参数允许被用来设置邮件转发：&nbsp; <br />
&#183;&nbsp;FEATURE(relay_hosts_only).&nbsp;通常情况下，在文件/etc/mail/relay-domains中列出的域名的主机都允许通过本地机转发，而该设置指示指定必须罗列出每个允许通过本机转发邮件的主机。&nbsp; <br />
&#183;&nbsp;FEATURE(relay_entire_domain).&nbsp;该参数指示允许所有本地域通过本机进行邮件转发。&nbsp; <br />
&#183;&nbsp;FEATURE(access_db).&nbsp;该参数指定利用哈希数据库/etc/mail/access来决定是否允许某个主机通过本地进行邮件转发。&nbsp; <br />
&#183;&nbsp;FEATURE(blacklist_recipients).若该参数被设置，则在决定是否允许某个主机转发邮件时同时察看邮件发送着地址和邮件接受者地址。&nbsp;<br />
&#183;&nbsp;FEATURE(rbl).允许基于maps.vix.com由黑名单(Realtime&nbsp;Blackhole&nbsp;List)进行邮件拒绝，以防范垃圾邮件。&nbsp; <br />
&#183;&nbsp;FEATURE(accept_unqualified_senders).允许接受发送者地址不包括域名的邮件，例如user，而不是user@B.NET。&nbsp; <br />
&#183;&nbsp;FEATURE(accept_unresolvable_domains).通常来讲，sendmail拒绝接受发送者邮件地址指定的主机通过DNS不能解析的邮件，而该参数允许接收这种邮件。&nbsp; <br />
&#183;&nbsp;FEATURE(relay_based_on_MX).该参数允许转发邮件接受者地址的MX记录指向本地的的邮件，例如，本地接收到一个发送目的地址为user@b.com的邮件，而b.com域名的MX记录指向了本地机器，则本地机器就允许转发该邮件。&nbsp; <br />
下面几个特性可能会有安全漏洞，一般当邮件服务器位于防火墙后时才应该使用，因为这些参数可能导致你的系统易于被垃圾邮件发送者利用。&nbsp; <br />
<table style="width: 647px; height: 57px" cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="647" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>&#183;FEATURE(relay_local_from).该参数指定若消息自称源于本地域，则允许转发该邮件。<br />
            &#183;FEATURE(promiscuous_relay).打开对所有的邮件的转发。</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
7.设置完成后outlook发送邮件要求验证时，出现错误<br />
<br />
Jan 30 14:45:57 qiuding sendmail[13908]: o0U6jvs1013908: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA<br />
Jan 30 14:45:58 qiuding sendmail[13909]: o0U6jw4h013909: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA<br />
Jan 30 14:47:38 qiuding sendmail[13918]: o0U6lcCc013918: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA<br />
Jan 30 14:47:41 qiuding sendmail[13919]: o0U6lefW013919: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA<br />
Jan 30 14:47:42 qiuding sendmail[13920]: o0U6lfoF013920: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA<br />
Jan 30 14:47:43 qiuding sendmail[13921]: o0U6lgtZ013921: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA<br />
Jan 30 14:47:43 qiuding sendmail[13922]: o0U6lh53013922: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA<br />
Jan 30 14:47:44 qiuding sendmail[13923]: o0U6li7I013923: [116.230.242.136] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA <br />
大量查找资料原来是<br />
认证进程没有启动&nbsp; SASLAUTHD服务一定要启动否则无法进行用户验证<br />
etc/rc.d/init.d/saslauthd start<br />
<a href="http://www.blogjava.net/Files/lyjjq/sendmail_dovecot.rar">配置下载</a><br />
<br />
sendmail -bd -q1h<br />
<br />
　　Sendmail的命令参数的含义如下：<br />
<br />
　　-b：指定Sendmail在后台运行，并且监听端口25的请求。<br />
<br />
　　-d：指定Sendmail以Daemon方式运行(守护进程)。<br />
<br />
　　-q：当Sendmail无法将邮件成功地发送到目的地时，它会将邮件保存在队列里。该参数指定邮件在队列里保存的时间。例子里的1h表示保留1小时。<br />
<br />
　　在终端命令窗口运行以下命令来重新启动Sendmail服务：<br />
<br />
　　[root@ahpeng root]#/etc/rc.d/init.d/sendmail restart<br />
<br />
　　在终端命令窗口运行以下命令来关闭Sendmail服务：<br />
<br />
　　[root@ahpeng root]#/etc/rc.d/init.d/sendmail stop<br />
<br />
　　我们还可以在终端命令窗口运行以下命令来检测Sendmail服务器的运行状态：<br />
<br />
　　[root@ahpeng root]# /etc/rc.d/init.d/sendmail status<br />
<br />
　　系统应该显示：<br />
<br />
　　sendmail (pid 3251) 正在运行&#8230;<br />
<br />
/etc/mail目录下操作<br />
makemap hash access.db&lt;access<br />
killall -9 sendmail<br />
etc/rc.d/init.d/saslauthd start<br />
sendmail -bd -q30m<br />
</div>
<img src ="http://www.blogjava.net/lyjjq/aggbug/154028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2007-10-18 23:26 <a href="http://www.blogjava.net/lyjjq/articles/154028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>