免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 58755 | 回复: 50
打印 上一主题 下一主题

[Mail] qmail常见问题及解决办法(更新中[12-23]....) [复制链接]

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-10-11 06:20:00数据库技术版块每日发帖之星
日期:2015-10-12 06:20:00数据库技术版块每日发帖之星
日期:2015-10-15 06:20:00数据库技术版块每日发帖之星
日期:2015-10-30 06:20:00综合交流区版块每月发帖之星
日期:2015-12-02 14:59:01数据库技术版块每日发帖之星
日期:2015-12-15 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-23 09:51 |只看该作者 |正序浏览
Qmail常见问题解决办法:
1.不能给sina发信

进入qmail/control创建helohost
echo serverip >; helohost

2. |/usr/local/bin/autorespond 10000 5
|表示调用一个程序来处理该邮件这里是调用autorespond来处理;10000表示允许处理信
件的总时间;5表示在这段时间内的最大邮件
3.限制你的邮件列表被滥用
你需要在邮件列表文件头加入一个过滤程序。一种选择是使用qmail的补丁程序 qlist ,你可以在官方站点qmail.org找到它。它会使用 pgp 来标记你的邮件信息,一个包含pgp标识的过滤的邮件列表大致如下:
|if grep "^-----BEGIN PGP MESSAGE-----$"; then exit 0; else exit 100; fi
|if grep "^-----END PGP MESSAGE-----$"; then exit 0; else exit 100; fi
|if pgp -f; then exit 0; else exit 100; fi
+list
&address
&address
...
  只有邮件列表允许的用户(假定是别名)才拥有pgp的密钥。或者为需要的用户指定一个密钥文件。  另外一种过滤器通过检查邮件,判断是否来自本地用户或者来自最近的qmail-smtpd进程。如果是本地用户就允许通过,远程站点的就退回该信件。它的形式如下:  |if grep Received: | tail +1l | grep network; then echo
    "This is a moderated list"; exit 100; fi
  +list
  &address
  &address
  ...

如果不是本地系统的用户,你可以分配一个别名(记得chmod 700 ~alias),使它能投递到邮件列表。运行:
  
  |grep -v '^Delivered-To:' | forward LISTNAME

必须删除 Delivered-To: 这行,否则将它放弃这个别名
4. 如果你不想让一份无法投递的邮件在队列里呆太久
你可以在 queue/info 目录里运行
  touch -d '1 week ago'
来结束它的队列生命周期。这样,如果再次投敌不成功,这份邮件就会被退回
5.用telnet my.domain 25时返回:   
    Trying xx.xx.xx.14.....
    Connected to www.xxx.com
    Escape character is '^]'.   
    220 www.xxx.com ESMTP  
    502 unimplemented (#5.5.1)
此现象是密码验 证的包checkpasswd没有装好。
6.装完qmail后,用本地的信箱或外面的信箱发信过来都显示错误:
delivery 12: failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/
没有创建用户的Maildir目录.请记住,创建maildir目录的组和用户权限必须正确
7. maillog里面出现:
     "Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)/"
在修改rc里的./Mailbox 改成 ./Maildir/时出错
8. maillog里面出现:
oh:_.qmail_has_file_delivery_but_has_x_bit_set._(#4.7.0)/

.qmail文件多了个x标志位,  运行chmod a-x .qmail  

9.maillog里面出现:
"Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)/"
用户的.qmail所在地方不对,此文件必须存在于用户的HOME里面
10.tcpserver執行qmail-smtpd 时默认的为40个进程,
要想修改更多的话,例:200个
tcpserver -c 200
tcpserver -v -u uid -g gid 0 smtp /var/qmail/bin/qmail-smtpd \
2>;&1 | /var/qmail/bin/splogger smtpd 3 &
&不要省略,
11.如何清除90天前的邮件find /home/vpopmail/domains/ -ctime +90 -type f -path '*Maildir/cur*' | xargs -i --verbose rm '{}' 2>;&1
12. Qmail拒收某个IP或网段的邮件
编辑你的tcp.smtp文件,加入:
对方的IP:deny
或者:
某个网段.:deny
例:2.82.34.:deny
来禁止2.82.34的整个网段的访问。
然后使用tcprules重新生成tcp.smtp.cdb文件。
13.qmail自动删除发给系统上不存在的邮件帐号的信,而且不产生系统退信echo'|/var/vpopmail/bin/vdelivermail' 'delete'>; /var/vpopmail/domains/yourdomain.com/.qmail-default
这会把发给不存在的用户的信直接删除掉.
14. 清除qmail的邮件队列
安装qmail-remove
qmail-remove -r
这步会把所有队列内容移动到/var/qmail/queue/yanked目录下。
接下来可以决定如何处理该目录的内容了,垃圾邮件
15. Q: 有没有简单的方法可以阻止某些用户发邮件到外部地址 (或内部服务器)?
A: 可以.注意NO_RELAY标志,它可以对任何用户起作用:
vmoduser -r email@domain
Q: 有没有方法可以拒绝整个域的POP连接,而不单是某个邮件地址?A: 当然.vmodeuser可以帮你解决问题:

vmoduser -p domain.com
16.把一邮件域的名字比如a.com更改为b.com,如何实现
以下几个步骤:
1、cd /home/vpopmail/domains
mv a.com b.com
2、把vpopmail数据库的vpopmail表导出把所有a.com改为b.com,然后删除vpopmail表,再导入.
3、把把vpopmail数据库的dir_control表的a.com改为b.com
4、在/home/qmail/control 目录下把 virtualdomains和rcpthosts下的的a.com改为b.com.
5、在/home/qmail/users目录下把assign文件的a.com改为b.com
6、需要运行qmail-newu重新生成cdb。assign只是配置文件,cdb才是实际的数据文件。
加快 qmail 投递邮件速度
17. spamd调用maildrop方法
在youreal.com下修改.qmail-default
为:
| /usr/local/bin/maildrop ./.mailfilter
创建.mailfilter
内容如下:
VHOME=`/var/qmail/vpopmail/bin/vuserinfo -d $EXT@youreal.com`

if ( $SIZE < 262144 )
{
        exception {
                xfilter "/usr/bin/spamc -f -u $EXT@youreal.com"
        }
}

if (/^X-Spam-Flag: *YES/)
{
      

   
to "$VHOME/Maildir/.Trash/" ##使符合垃圾邮件特征的邮件放到垃圾箱里

}
else
{
      exception {
                to "$VHOME/Maildir/."
        }
修改.mailfilter的属性
chown vpopmail:vchkpw .mailfilter
chmod 600  .mailfilter

qmail控制文件的作用
qmail-inject

qmail-inject接受本地邮件消息后检测邮件头是否符合RFC822标准,并传送给qmail-queue排进队列
defaultdomain 用来向那些没有使用正确的username@hostname.domain格式的邮件中增加邮件地址的,默认情况下,如果主机地址中没有结束符".",qmail-inject将给主机名后添加defaultdomain的内容,如果该文件不存在,将使用me文件中的值代替.例如:defaultdomain值为yourdomain.com本地产生了一封发送给xxxx@xxxx的邮件,那么qmail-inject将用yourdomain.com来补全这个后缀,变成xxxx@xxxx.yourdomain.com
defaulthost 用来定义主机名,用来向地址中不含主机名的邮件补足邮件地址的。类似于defaultdomain。例如:defaulthost值为yourdomain.com那么发送给 xxxx的消息,将被qmail-inject用defaulthost的值来补足为xxxx@yourdomain.com,以便于qmail-send快速分辨是否属于本地地址。
idhost 用来指定邮件中Message-ID:头字段的主机名例如:idhost值为yourdomain.com那么邮件头中如下:
Message-ID:<1234567890.12345.qmail@yourdomain.com>;
如果idhost值为xxxx.yourdomain.com 那么邮件头中如下:
Message-ID:<1234567890.12345.qmail@xxxx.yourdomain.com>;
plusdomain
用来将其值添加在任何一个以一个+号结尾的地址
qmail-qmqpc qmail-qmqpc是快速邮件排队协议(QMQP)使用的程序,QMQP是一个QMAIL专用协议,用在工作站级QMAIL服务器向中心服务器发送队列。
qmqpservers 用来指定qmail-qmqpc使用的上级服务器
通常该功能应用很少,我认为qmail-qmqpc用法就是代替qmail-queue来直接传给上级服务器。
qmail-remote
qmail-remote通过SMTP协议向远程主机传送邮件。
helohost 该文件用来指定qmail-remote程序与远程邮件主机SMTP会话中的主机名。
smtproutes 用来指定到固定目的的静态SMTP路线。
例子:smtproutes内容如下
xxxx.yourdomain.com:mail8.xxxx.jp
:fw.xxxx.yourdomain.com:8088
第一行的存在会将发给xxxx.yourdomain.com的邮件重定向到mail8.xxxx.jp主机
第二行的存在会将任何不符合之前行条件的邮件重定向到fw.xxxx.yourdomain.com的8088端口,让邮件安全的穿越防火墙
qmmail-remote将按照smtproutes中的行序来进行处理
timeoutconnect 用来指定qmail-remote尝试同一个远程邮件主机建立一个SMTP会话的时间。默认值状态下如果超出60秒没有得到远程邮件主机的回应,那么将断开连接。
timeoutremote 用来指定qmail-remote在一个SMTP连接已经建立后,远程邮件主机的每一个回应的时间数。默认值为1200秒。

qmail-send

qmail-send用来检测队列中每一个邮件的状态,并调用相应的程序进行处理。例如一个目的为本地的邮件将会被qmail-send调用qmail-lspawn处理。
bouncefrom | bouncehost 默认情况下,退回给原始发送方的邮件的发件人地址为MAILER-DAEMON@HOSTNAME,如果你想修改MAILER-DAEMON这段,那么就修改bouncefrom文件吧。如果想修改MAILER-DAEMON@HOSTNAME中HOSTNAME这段,那么就修改bouncehost文件。例如:bouncefrom内容为SERVER-MANAGER | bouncehost文件内容为mail8.xxxx.jp那么一封因为邮件地址不存在而被退回的通知邮件的发件人将是 SERVER-MANAGER@mail8.xxxx.jp
concurrencylocal 用来决定qmail可以同时运行的本地投递进程的数目,默认值是10,标准安装的qmail最大可设值是120。安装的时候可以通过修改conf-spawn来将其变为255以下任何数目。
concurrencyremote 用来决定qmail可以同时运行的远程投递进程的数目,默认值是20,就是说,qmail可以在同一时间内同时发送20封邮件,标准安装的qmail最大可设值是120。安装的时候可以通过修改conf-spawn来将其变为255以下任何数目。
doublebouncehost | doublebounceto 这两个控制文件类似于bouncefrom和bouncehost的关系,也是doublebouncehost指定主机名,doublebounceto指定用户名。
他们的功能是为一个被退回两次的邮件制定一条出路。例如:doublebouncehost内容为xxxx.yourdomain.com | doublebounceto内容为xxxx那么一个被退回2次的邮件将被发送给xxxx@xxxx.yourdomain.com
没有这两个文件的时候,那么发送给postmaster@me文件中的域名
envnoathost
qmail-send用来给没有主机名的邮件收件人制定一个主机名的,通常这个文件并没有必要,qmail-send总是使用me文件中的域名。
locals
用来为qmail指明位于本地的邮件地址。qmail-send利用此文件来判断收件人地址是否是一个本地地址。
例如:locals文件中写有xxxx.yourdomain.com
那么qmail-send检测到队列中有发送给@xxxx.yourdomain.com的邮件的时候,就会调用qmail-lspawn来进行本地投送。
me 如果没有me文件,那么你的qmail将拒绝执行。me文件用来指定本地邮件服务器的主机名。以上列出的许多控制文件在没有被创建的时候,qmail都会用me中的值来代替。
percenthack 在UUCP协议中带有%并在该文件中列出的地址将会被转换为一个标准的DNS格式主机名。
queuelifetime 用来指定一个邮件在队列中的最大存活时间,默认是604800秒,当一个邮件达到这个时间线后,qmail将最后一次尝试发送这封邮件,如果依然失败,会将其从队列中删除。
virtualdomains
让qmail接受本地邮件以外,还接受该文件中指定的域或者邮件地址,就是常说的虚拟域支持。
qmail-smtpd
qmail-smtpd接受远程主机的邮件并转交给队列处理程序qmail-queue来处理。
badmailfrom 用来指定不喜欢的发件人的邮件地址或者是域名
例如:badmailfrom中写有
advt@msn.com
@hotmail.com
如果advt@msn.com给该邮件主机送信时,将得到code 553,告知其是一个不受欢迎的发件人。而所有来自hotmail.com的发件人也将得到同样的code 553。
databytes 用来指定该邮件服务器可以接受邮件的最大字节数。
例如:databytes指定为8000000
那么如果有人给该主机发送的邮件字节数超过了这个商业上默认的最大容忍限度,将得到code 552,告知其邮件大小超出了该邮件主机所能容忍的限度。恐怖的是,默认状态下,这个文件并没有,如果有人用你服务器上的两个不存在的地址作为FROM/TO发一个100M的邮件 :o
localiphost
用来为使用ip来标示目的主机的邮件消息指定本地主机名的例如:xxxx.yourdomain.com的ip地址为198.17.1.2 | localiphost内容为xxxx.yourdomain.com那么一封发送给xxxx@[198.17.1.2]的邮件的地址会被转换为xxxx@xxxx.yourdomain.com
rcpthosts | morercpthosts
这两个文件用来指定qmail可以接收的除本地主机名外的其他域名他们的作用是相同的,不过因为rcpthosts中的域名不能超过50行,所以才出现了morercpthosts文件
timeoutsmtpd 用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。默认的情况下,如果连接建立后1200秒内没有接受到远程SMTP主机的任何信息,那么将关闭这个连接。
smtpgreeting 用来指定SMTP连接的欢迎标志
例如:smtpgreeting值为 welcome connect to out open relay mail server - ad.xxxx.yourdomain.com那么建立一个smtp连接的时候将会看到如下信息:
Trying 198.17.x.x...
Connected to ad.xxxx.yourdomain.com.
Escape characteris ^].
220 welcome connect to out open relay mail server - ad.xxxx.yourdomain.com ESMTP
delivery 1: deferral: Uh-oh:_home_directory_is_writable._(#4.7.0)/
It's actually pretty clear: qmail refuses to deliver mail to that account
because its home directory is world-writable, because that's a security risk.

Remove the world-writable permissions on the user's home directory

论坛徽章:
0
51 [报告]
发表于 2008-12-05 17:14 |只看该作者
总结得不错,收藏了!

论坛徽章:
0
50 [报告]
发表于 2007-06-26 15:48 |只看该作者
我改完了重编译后也不成啊

论坛徽章:
0
49 [报告]
发表于 2007-06-26 15:43 |只看该作者
原帖由 zjtrendy 于 2005-1-17 13:40 发表
增加两个:
1。错误信息:the smtp server reply:qq crashed (#5.1.1)
  修改stmp启动脚本,改大smtp的softlimit
  
2.Sorry. Although I'm listed as a best-preference MX or A for that host,it isn't in ...



改qmail源码>?
改完了重编译qmail?

论坛徽章:
0
48 [报告]
发表于 2006-10-23 18:15 |只看该作者
原帖由 love100 于 2004-12-23 09:51 发表
Qmail常见问题解决办法:
1.不能给sina发信

进入qmail/control创建helohost
echo serverip >; helohost

2. |/usr/local/bin/autorespond 10000 5
|表示调用一个程序来处理该邮件这里是调 ...

我按你的做时提示:
[root@localhost info]# touch -d '1 week ago'
touch: 缺少了文件参数
请尝试执行‘touch --help’来获取更多信息。
请问怎么会事啊

论坛徽章:
0
47 [报告]
发表于 2006-09-30 10:49 |只看该作者
4 451 qq write error or disk full (#4.3.0)

通常产生这个可能有2个原因:(1)你的qmail queue所在的磁盘空间不足。(2)qmail-queue的权限设置不正确或者文件有问题。


说说解决方法

论坛徽章:
0
46 [报告]
发表于 2006-09-24 21:09 |只看该作者
关于楼主文中有段:
6.装完qmail后,用本地的信箱或外面的信箱发信过来都显示错误:
delivery 12: failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/没有创建用户的Maildir目录.请记住,创建maildir目录的组和用户权限必须正确
,我现在也是被这个问题难倒了,哪位前辈能够指点一下,这个Maildir是我们再添加用户时自已触发,自动生成的,还是什么时候生成这个Maildir的,把我弄得很晕,

论坛徽章:
0
45 [报告]
发表于 2006-09-19 22:19 |只看该作者
我用的也是许靖 <Linux qmail安装指南> 版本2.9
第五节:安装vpopmail  TOP
#现在打上qmail的补丁:
cd /home/pkg/netqmail-1.05/netqmail-1.05
bunzip2 -c /home/pkg/qmail-toaster-0.7.2.patch.bz2 | patch -p0
make clean
make
到这里就是过不去,请编译过的指点!
提示:
=======================
make:*** [qmail-smtpd] Error 1
=======================

论坛徽章:
0
44 [报告]
发表于 2006-08-02 15:16 |只看该作者

收下了,多谢!!!

收下了,多谢!!!

论坛徽章:
0
43 [报告]
发表于 2006-07-28 17:44 |只看该作者
老兄:
   smtp的启动脚本是哪个文件?我用的是许靖 <Linux qmail安装指南> 版本2.9。现在对qmail不熟悉。不知道怎么找。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP