qmail排错集锦

qmail排错集锦

1.虚拟域用户无法收信?

Q:虚拟域为qmail.com,向fish@qmail.com用户发送邮件,邮件接收失败。查看/var/log/qmail/send/current,发现”_no_mailbox_here_by_that_name”的错误提示。

A:进入/var/qmail/control/目录,编辑locals文件,将qmail.com条目删除即可。

当locals和virtualdomains这两个文件同时记录了一个相同域名时,虚拟域将接收不了邮件,因为locals文件优先级高。

另外,如果/var/qmail/control/rcpthosts文件内的格式不正确也会发生此问题。

正确格式:”domain.com”

2.使用ps –ef | grep svscan命令后,发现该svscan服务没有运行?

A:进入/package/admin/daemontools/common/目录,运行一下命令./svscanboot 手动启动svscan服务。

3.单独运行各个服务的run脚本,出现”softlimit:fatal:unable to run:file doesn’t exist”

A:确保所有run脚本没有多余空格

4. qmail-send服务启动失败

Q:启动qmail,发现qmail-send服务没有起来。进入/var/qmail/supervise/qmail-send/目录,运行./run命令,发现”cannot start:unable to open mutex” 错误

A:可能出现的原因就是sendmutex文件丢失。所以执行下列2个命令重新创建该文件。

touch /var/qmail/queue/lock/sendmutex Chown qmails:qmail /var/qmail/queue/locks/sendmutex

5.Squirrelmail的配置失效

Q:检测squirrelmail配置是否正确时,提示下列错误信息:

> “ERROR:Required PHP PEAR DB support is not available。IS PEAR installed and is DB.PHP?the include path is now:/usr/share/pear”

A:检查以下包是否已经安装:

1. php
2. php-pear
3. php-mysql
4. php-pdo
5. httpd
6. mysql
7. mysql-server
8. mysql-devel
9. openssl
10. openssl-devel
11. gdbm
12. gdbm-devel
13. stunnel
14. krb5-level
安装完上述所有软件后,进入/usr/share/pear/目录,执行该命令:”pear insall DB”

6.Squirrelmail无法连接到25端口或143端口?

A:尝试关闭SElinux服务

编辑 vi /etc/selinux/config

修改SELINUX=enforcing 为 SELINUX=disable

保存退出,重启机器。

7.Error:couldn’t connect to PSN for preferences?

A:可以尝试重新给MYSQL用户赋予权限,使用以下命令:

Grant select,insert,update,delete,on squirrelmail.* to squirrelmailuser@localhost identified by “squirrelpassword”

8.Tcpserver;fatal:temporarily unable to figure out IP address for 0.0.0.0:file does not exist?

A:touch /etc/dnsrewrite

9. 无法发送邮件,查看/var/log/qmail/send/current日志,报如下错误:

“deferral:uh-oh:.qmail_has_prog_delivery_but_has_x_bit_set.

A:找到所有.qmail文件,去除执行位”x”即可

10.登录squiirelmail后,出现如下错误:

“Error:couldn’t complete request query CREATE ”INBOX SENT” Reason Given invalid mailbox name”

A.出现这样的错误说明squirrelmail配置错误

编辑 perl conf.pl

选3 FOLDER DEFAULTS

1. Default Folder Prefix :INBOX。

3. Trash Folder :Trash

4. Sent Folder :Sent

5. Drafts Folder :Drafts

11.用squirrelmail登录时,出现如下错误:

“you must be loged into access this page”

A:chown –R root.vchkpw /var/lib/php/session

Chmod 777 /var/lib/php/session

12.为QMAIL安装stmtpd补丁包,操作流程(vpopmail安装后再打补丁)

A:进入netqmail安装目录

Cd /usr/local/src/netqmail-1.05/netqmail-1.05

Patch < /usr/local/src/netqmail-1.05-tls-smtpauth-20070417.patch

Make

qmailctl stop

make setup check

或者

Cd /usr/local/src/netqmail-1.05/netqmail-1.05

Bunzip2 –c /usr/local/src/qmail-toaster-0.82.patch.bz2 | patch –p0

Make clean

Make

Qmailctl stop

Make setup check

Chown –R vpopmail.vchkpw /var/qmail/spam

13. 451 qq write error or disk full

A.qmail queue 所在磁盘空间不足

Qmail-queue的权限设置不正确或文件有问题

14.The smtp server reply:qq crashed

A.修改smtp启动脚本,改大smtp的softlimit

15.IGENUS登录后显示空白页面,查看日志提示:”call to undefined function”:mysqlconnect()

A.出现以上错误是”php-mysql”包没有安装导致

尝试 chgrp -R vchkpw /var/lib/php/session

16. vpopmail用户的ID和vchkpw组的ID要与/var/qmail/user/assign文件中的邮件地址域的ID号要相同。

vpopmail

17. 安装“uscpi-tcp-0.88”遇到下列错误:

Install:fatal:unable to write …/bin/tcpserver:text busy

A:说明tcpserver还在运行,杀掉进程再安装

18. 增加某个虚拟域时,提示“Error-no authentication database connection initial open”

A:如果是用源代码安装的mysql,通常vpopmail找不到“/var/lib/mysql/mysql.sock“文件,需要做个连接:
ln –s /tmp/mysql.sock /var/lib/mysql/mysql.sock

19. qmail-smtpd服务启动失败,运行其脚本出现如下错误:

> “QMAILUID,NOFILESGID,MAXSMTPD,or LOCAL is unset in /var/qmail/supervise/qmail-smtpd/run“

A:说明其中一个变量值为空,确保每个变量都有正确的值,确保/var/qmail/control/目录下的“me , rcpthosts , defaultdomain , plusdomain“这四个文件有正确的域名,域名格式如下:

domain.com:domain.com

20. tcpserver:warning:droping connecting , unable to read /home/vpopmail/etc/tcp.smtp.cdb file does not exist .

A:chmod 755 /home/vpopmail

chown root.root /home/vpopmail

chown root.root /home/vpopmail/etc

chown root.root /home/vpopmail/etc/tcp.smtp

chown root.root /home/vpopmail/etc/tcp.smtp.cdb

重启机器。

21. 客户端无法收取邮件,错误日志如下:

> Vchkpw-pop3:vpopmail user not found xxx@:192.168.0.5

A:将客户端的帐号改为:user@domain.com

确保该帐号确实存在。

22. 邮件发生失败,提示下列错误:

> Delivery 2:deferral:unable to_switch_to
/home/vpopmail/domain/xxx.com:_access_denied

A:出现此错误可能的原因是修改了vpopmail和vchkpw的uid和gid

cd /var/qmail/users

qmail-pw2u &lt; /etc/password &gt;&gt; assign

qmail-newu

23. 运行smtp脚本时报错:bad interpreter . No such file or directory

A:原因不是找不到文件,而是脚本的文件格式不对,很可能是DOS格式,可以用下列方法查看文件格式

打开smtp的脚本:vi run

查看文件格式: : set ff?

可以看到dos或unix字样,若是dos,即可用 : set ff=unix转换格式,存盘退出

24. 客户端连接Qmail超时

A:大多数原因是smtp脚本设置不正确少了一个“-H“参数,

将 “tcpserver –v –R –l 0 –x /home/vpopmail/etc/tcp.smtp.cdb“

改成 “tcpserver –v –H –R –l 0 –x /home/vpopmail/etc/tcp.smtp.cdb“

其原因是当连接25端口时,QMAIL会查询远端主机的信息,加了“-H “就可以解决此问题

25. 发送信件时报错:“SMTP Server reply 451 SPF lookup failure“

A:原因是在/var/qmail/control/目录下有个“spfbehavior“文件,可以临时性的将此文件移除该目录即可

26. 打完SMTP验证补丁后,验证失败报错:“unable to write pipe and I can’t auth“

A:出现这种原因是,在打完补丁后,没有对其SMTP脚本做如下修改:

将“QMAILUID=id –u qmaild

“NOFILESGID=id –u qmaild

改成“QMAILUID=id –u vpopmail

“NOFILESGID=id –u vpopmail

27. 删除邮件队列里的邮件

A:qmailctl stop

mv /var/qmail/queue/lock /tmp

find /var/qmail/queue –type f | xargs rm –f

mv /tmp/lock /var/qmail/queue/

qmailctl start

28. telnet localhost 25 失败,日志如下:

> “warning:droping connecting, unable to read /home/vpopmail/etc/tcp.smtp.cdb::access denied“

A: chmod 755 /home/vpopmail

29. 由于各种原因,在添加虚拟域的时候,提示该错误“Error: Domain already exists ”

A:通过以下步骤排除错误:

1. 重新启动qmail服务

2. 尝试删除该域:vdeldomain domain.com

3. 如果上述操作失败,进入数据库,看该域是否存在,如果存在就把它删除

4. 进入/var/qmail/control/目录,尝试清除如下文件里的域:

virtualdomains

me

locals

rcpthosts

defaultdomain

plusdomain

5. 进入/var/qmail/users/目录,查看assign文件,清除相应域的记录,并执行下列命令刷新

qmail-newu

30. 发送邮件失败,出现下列错误日志信息:

“delivery 8: failure: Connected_to_24.24.24.2_but_sender_was_rejected./Remote_host_said:_554_5.1.0_Sender_Denied/”

原因分析:Qmail试图向远端的24.24.24.2的邮件系统发送邮件,但是却遭到了对方的拒绝。

A:

1. 如果您是向合伙人或者分支机构间发送邮件时遇到此类问题,请与对方的管理员取得联系,查明是否设置过滤将自己给挡在了外面。
2. 如果是将邮件发送于此类hotmail.com邮件系统却遭到了同样的问题,请确保自己的邮件服务器的IP地址没有被列入黑名单。
 

31. 实现邮件监控目的:当用户在发送或收取邮件的同时,会将邮件的副本发送到另一个邮箱中以实现邮件备份的方式

A:要实现这个目的,就需要进入Qmail的源目录(netqmail-1.05/netqmail-1.05),编辑extra.h文件。假设建立一个monitor邮件账户,该账户就是用来转存所有用户发送或收取邮件的同时将副本发送到此邮箱。编辑内容如下:

> define QUEUEEXTRA “Tmonitor\0”

> define QUEUEEXTRALEN 9
QUEUEEXTRA是这样设置的,大写字母T,然后是用户名,最后是空字符“\0”。QUEUEEXTRALEN表示是QUEUE_EXTRALEN的程度,上面算下来是九个字符,所以它为9。

然后生成~alias/.qmail-log,在此文件里面添加:./logmaildir/

最后重新编译Qmail

32. 重复收取同一封邮件的问题。当A给B发邮件,B会收取A的多个邮件副本。

A:尝试删除用户邮件目录下的.qmail文件可以解决该问题。

33. 阐述Qmail控制文件特性,这些控制文件位于/var/qmail/control/目录下

badmailfrom:拒绝接收邮件,可以防范垃圾邮件,每一个条目占一行。

例如,要拒绝abc@sohu.com和hotmail.com域的邮件,格式如下:

abc@sohu.com

@hotmail.com

concurrencylocal:用来决定qmail可以同时运行的本地投递进程的数目,默认值是10,标准安装的qmail最大可设值是120。

concurrencyremote:用来决定qmail可以同时运行的远程投递进程的数目,默认值是20,就是说,qmail可以在同一时间内 同时发送20封邮件,标准安装的qmail最大可设值是120。要使其生效必须重新启动Qmail进程。

locals:用来为qmail指明位于本地的邮件地址。qmail-send利用此文件来判断收件人地址是否是一个本地址。

me:如果没有me文件,那么你的qmail将拒绝执行

virtualdomains:让qmail接受本地邮件以外,还接受该文件中指定的域或者邮件地址,就是常说的虚拟域支持。

databytes:该文件控制着邮件本身的大小,该大小指的是邮件全文大小,包含邮件头、正文、附件内容等

如果要控制邮件大小再10M,其计算公式就是(1010241024=10485760)

rcpthosts:这个文件用来指定qmail可以接收的除本地主机名外的其他域名

34. 安装Qmail可视化管理界面—Qmailadmin

A:要安装qmailadmin之前,必须要安装Autorespond和Ezmlm

安装Autorespond步骤:

tar -xvzf autorespond-2.0.2.tar.gz

cd autorespond-2.0.5

make

make install

安装Ezmlm步骤:

tar -xvzf ezmlm-0.53.tar.gz

tar -xvzf ezmlm-idx-0.443.tar.gz

cp -rf ezmlm-idx-0.443/* ezmlm-0.53/

cd ezmlm-0.53

patch &lt; idx.patch

make

make man

make setup

最后安装qmailadmin

tar -xvzf qmailadmin-1.2.11.tar.gz

cd qmailadmin-1.2.11
1
./configure --enable-htmldir=/var/www/html --enable-cgibindir=/var/www/cgi-bin --enable-vpopuser=vpopmail --enable-autoresponder-bin=/usr/bin --disable-ezmlm-mysql --enable-modify-quota  --enable-domain-autofill

make

make install-strip

cd /usr/local/share/qmailadmin/lang

mv en en.bak

cp zh-cn en

要注意的是:访问该管理界面的URL是通常是http://x.x.x.x/cgi-bin/qmailadmin

登陆名必须是postmaster

35.安装Clam AntiVirus之后,启动该进程失败。

A:原因是系统中没有swap分区。

只要在现有的硬盘里分配一个swap分区或者在安装系统时安装swap分区就可以解决此问题。

36. 更改Qmail默认连接端口为587

A:默认情况下,Qmail用户通过25端口来连接邮件服务器发送邮件,但为了提升安全性可以更改Qmail的默认端口为587。这样的一个行为,仅仅影响到MUA客户端连接邮件服务器,并不会影响到邮件服务器与邮件服务器之间的连接,他们之间的连接仍然用的是25端口。

步骤一:

复制qmail-smtpd(位于/var/qmail/bin目录)为qmail-smtpd-auth

步骤二:

使用十六进制编辑器(hex editor)打开qmail-smtpd-auth并查找关键字rcpthosts

步骤三:

用rcptempty替换rcpthosts

步骤四:

在/var/qmail/control目录下,创建rcptempty文件

步骤五:

修改端口为587

编辑/var/qmail/supervise/qmail-smtpd/run文件,原始配置(贴出一部分)

qmail_587port

将上述红色部分,按如下修改:

qmail_587port

步骤六:

重新启动Qmail服务,并尝试使用587端口进行连接。

37.“Sorry,message_has_wrong_owner.(#4.3.5)”

A:原因是queue队列损坏,删除/var/qmail/queue目录,重新make setup check生成目录

38.经常收到来自<>和<#@[]>的邮件

A:这两种信件都是系统产生的,区别在于<>是系统single bounce的地址,而<#@[]>是系统double bounce或者triple bouces的地址。系统用这两种地址是为了避免邮件回路。

用下列方式解决此问题:

echo “#” > /var/qmail/alias/.qmail-doublebounceto

echo “doublebounceto” > /var/qmail/control/doublebounceto

编辑/etc/profile文件,添加如下变量

QMAILUSER=”admin”

QMAILHOST=”sinotex.cc”

编辑/usr/share/logwatch/default.conf/logwatch.conf文件,找到如下条目做相应修改:

MailTo = admin@sinotex.cc

39.Maildrop报错“Cannothave_world/group_permissions_on_the_filter_file-_for_your_own_good./

A:mailfilter必须是600属性,脚本样板如下:

该脚本支持用户自定义黑白名单,又不需要到处放.mailfilter的方法:

来自于白名单中的邮件直接跳过该脚本的处理,将邮件发到收件人邮箱中

来自于黑名单中的邮件将直接被删除。

如下修改.qmail-default

vi .qmail-default

|/usr/local/bin/maildrop ./.mailfilter

创建mailfilter邮件过来脚本
```
vi .mailfilter

SHELL=/bin/sh

import EXT

import HOST

VPOP=”| /home/vpopmail/bin/vdelivermail ‘’ bounce-no-mailbox”

VHOME=/home/vpopmail/bin/vuserinfo -d $EXT@$HOST

check dir

test -d $VHOME/Maildir/

if( $RETURNCODE != 0 )

{

echo “Sorry,_no_mailbox_here_by_that_name.”

EXITCODE=77

exit

}

blacklist

#

test -f $VHOME/.blacklist

if ($RETURNCODE==0)

{

$DOMAIN=expr $SENDER : '.*@\(.*\)'

if ($SENDER ne ‘’ && (lookup($SENDER, “$VHOME/.blacklist”) || lookup($DOMAIN, “$VHOME/.blacklist”)))

{

to “$VHOME/Maildir/.Trash/“

to /dev/null

}

}

whitelist

#

test -f $VHOME/.whitelist

if ($RETURNCODE==0)

{

if ($SENDER ne ‘’ && lookup($SENDER, “$VHOME/.whitelist”))

{

to “$VHOME/Maildir/“

}

}

spamassassin

#

if ($SIZE < 262144)

{

exception {

xfilter “spamc -f -u $EXT@$HOST”

}

}

else

{

exception {

to “$VHOME/Maildir/“

}

exception {

to “$VPOP”

}

}

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

{

ADDQUOTA = “ $SIZE 1”

echo $ADDQUOTA &gt;&gt; $VHOME/Maildir/maildirsize

to “$VHOME/Maildir/.Trash/”

}

else

{

exception {

to “$VHOME/Maildir/”

}

exception {

to “$VPOP”

}

}`

40.Maildrop**报错“Unableto_execute/sbin/nologin/Unableto_execute/sbin/nologin/”或“sorry,no_mailbox_here_by_that_name.”**

A:如果编译maildrop的时候设置了vpopmail做为uid来跑,即:

./configure –enable-maildrop-uid=vpopmail –enable-maildrop-gid=vchkpw –enable-maildirquota

则必须给vpopmail一个shell,默认是/sbin/nologin,修改/etc/passwd ,改为/bin/bash即可。

41. 无论是本地用户还是国外寄来的邮件都无法对其处理即无法收邮件,也无法发送邮件?

A:所有要发送的邮件或是要接收的邮件都处在队列里,但是并没有处理在队列里的邮件,通过使用qmHandle –l命令发现:messages in queue but not yet preprocessed:x。

显然qmail不知道如何去处理队列中的邮件,可以尝试如下步骤排除:

a:qmailctl stop

b:再运行qmailctl stat,重点查看qmail-send的状态,若出现如下状况那么就是qmail-send的问题:

/service/qmail-send:up(pid xxx)xxxx second,want down

上述状态说明,qmail-send没有正确运行

c:cd /var/qmail/supervise/qmail-send

./run 若出现下列状况,那么可以肯定是qmail-send出错导致无法处理邮件:

Alert:cannot start: qmail-send is already running

d:ps –aux | grep qmail-send 若出线下列进程将其杀掉:

qmails xxx 0.0 0.0 xxx xxx ? S 23:11 0:00 qmail-send

由于在第一步已经将qmail停用,所以不应该出现上述qmail-send的进程

f:将上述进程杀掉,在重新启动qmail

42. qmail-scanner**无法对本地用户发来的邮件实施垃圾邮件过滤?日志提示如下信息**:

      SA: don’t scan as RELAYCLIENT implies this was sent by a local user


A:给tcp.smtp规则文件中添加一条QS_SPAMASSASSIN=”on”的记录,如下

vi ~vpopmail/etc/tcp.smtp

:allow,QS_SPAMASSASSIN=”on”

加载tcp.smtp的db文件

qmailctl cdb

43. 再重装qmail**系统之后无法正常运行,错误如下:**

运行qmailctl stat错误如下,即使重新启动服务器也无济于事

/service/qmail-send: unable to open supervise/ok: file does not exist

/service/qmail-send/log: unable to open supervise/ok: file does not exist

/service/qmail-smtpd: unable to open supervise/ok: file does not exist

/service/qmail-smtpd/log: unable to open supervise/ok: file does not exist

/service/qmail-pop3d: unable to open supervise/ok: file does not exist

/service/qmail-pop3d/log: unable to open supervise/ok: file does not exist

停止qmail系统,单独运行qmail-smtpd的run脚本仍然报错:

qmailctl stop

cd /var/qmail/supervise/qmail-smtpd && ./run 出现如下错误:

tcpserver: fatal: unable to bind: address already used

A:首先停止qmail:qmailctl stop

查询25端口是否启动:netstat –atulnp 若出现如下显示,请将其进程杀掉:

tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2606/tcpserver

杀掉上述进程2606:kill -9 2606

启动qmail:qmailctl start