分类: LINUX
2006-08-26 00:33:38
本帖收集论坛内的Qmail相关的FAQ。 抄袭无双的话,“在论坛的回答中有许多好的回答,但是如果每一个都要写到精华的话 那么精华又未免太多了”;同时也为了避免各位重复讨论相同的小问题,我就整理了这篇文档。 另外,涉及的方面太多,我不可能一一尝试,如有谬误,请不吝赐教。 建议大家把自己认为好的回答写到这个帖子的回复中,并写上讨论的帖子连接 准备分几个部分。 第一部分:MTA 第二部分:igenus 第三部分: sqwebmail 第四部分: vpopmail + qmailadmin 各位还可以补充。 我们会定期将各位提供的FAQ和论坛上的好东西整理进去,并为各位作者署名。 第一部分:MTA 1: 怎么加快 qmail 投递邮件速度? A: /var/qmail/control下面是qmail的控制文件,这两个文件: Concurrentcylocal default: 10 最大本地同时传送数 Concurrencyremote default: 20 最大远程同时传送数 2: Qmail的主要配置文件有哪些? A: 3: qmail+LDAP安装配置方法? (netloafer) A: 4mail如何限制附件的大小呢?? A: 在/var/qmail/control/databytes 文件中设置附件的大小,可以实现对qmail附件大小的限制,一般安装完成后,这个文件是没有的,你可以自己创建。 smtp方式是以qmail的databytes作限制的 5: 用qmail怎么封mailfrom? (peng) A:使用qmail控制文件封整个域或邮件地址 vi/var/qmail/control/badmailfrom 这个控制文件实现拒收邮件功能的,每一个地址要单独一行。而且,不用重起qmail就能生效。 例如: peng@96633.net-----限制一个特定的用户 @sina.com----限制整个域中的邮件 B:使用tcprules规则文件封IP地址(gadfly)。 #网段 10.10.10.:deny #ip 10.10.10.1:deny 重新生成cdb文件就好了 6. 如何让队列中的邮件马上传递? (peng) A: # kill -HUP qmail-send 要删除队列中的邮件 1) 停止QMAIL 2) mv /var/qmail/queue/lock /var/qmail/;find /var/qmail/queue/ -type f -exec rm {} \; ;mv /var/qmail/lock /var/qmail/queue/ 3) 重启QMAIL. 队列中的邮件包含在以下目录中 /var/qmail/queue/{info,mess,remote,local}/hash/#number 7、在邮件队列中快速删除从一个地方发过来但又不存在的邮件? (peng) A: 设bad.jite.com是这个域。可以键入以下命令 # echo # >; ~alias/.qmail-baddomain-default # echo bad.jite.com:alias-baddomain>;>; /var/qmail/control/virtualdomains # echo bad.jite.com:127.0.0.1 >;>; /var/qmail/control/smtproutes 然后运行/var/qmail/bin/qmail-tcpok,给qmail-send 一个HUP信号 8、如何删除队列中的大量广告信息? (peng) A: 先停止QMAIL. 1) 停止qmail, qmail-smtpd 2) 在以下默认目录下 /var/qmail/queue/mess find . -type f -exec grep "^Subject:" {} \; -print -exec rm {} \; 3) 运行queue-fix清除相关文件, 4) 重启qmail. 9、rh9下编译qmail出错: ./load auto-str substdio.a error.a str.a substdio.a(substdo.o)(.text+0x43): In function `allwrite': : undefined reference to `errno' collect2: ld returned 1 exit status make: *** [auto-str] Error 1 什么问题?(microcao &linuxsky) A: errno 这个错误是因为 RH9 系统使用了新的 GLIBC 库 2.3.1 造成的 需要修改 QMAIL 的代码才能编译另外 DJB 的几乎所有程序都存在这个问题 QMAIL 官方已经提供了推荐的补丁 打个这个补丁就行了 至于tcpserver可能也有相同的问题,patch都可以在以下目录找到 10:Apr 7 17:52:15 www qmail: 1049709135.048259 delivery 38: deferral: Uh-oh:_home_directory_is_writable._(#4.7.0)如何解决? A:需要将用户的邮件目录修改为700 由于vpopmail利用的是wildcard方式匹配的,所以homedir必须从domain的目录开始。假设gadfly@test.com目录是/home/vpopmail/domains/test.com/gadfly/ 这样修改属性: cd /home/vpopmail/domains/;chmod 700 test.com test.com/gadfly test.com/gadfly/Maildir/ 11:.qmail file is writable错误如何解决?(xmy) A:用户目录下的.qmail文件组和其它用户属性不能可写。 至于vpopmail方式, 域目录下的.qmail-*必须去掉写属性 chmod go-w .qmail-* 或者 chmod 600 .qmail-* 此外还需注意的文件属性有libmysqlclient.so.10.0.0 chmod 755 /usr/lib/libmysqlclient.so.10.0.0 12: 每发完一封 邮件后都会自动回复一封内容大概就是说发不出去的意思。自动回复的信件内容是这样的 ..... Sorry, no mailbox here by that name. vpopmail (#5.1.1) A:你的qmail是用新的iceblood版本安装的吧。 这个版本的qmail,缺省情况下,每封出入的信件都会发到log用户。 如果想禁止这个动作,需要替换qmail-queue. 将extra.h中的 #define QUEUE_EXTRA "Tlog\0" #define QUEUE_EXTRALEN 5 改成 #define QUEUE_EXTRA "" #define QUEUE_EXTRALEN 0 重编译替换qmail-queue就好了。 具体见life with qmail 的E.3 如果想把进出的邮件都复制一份给一个特定的用户,反过来修改就行了. CODE:
将extra.h中的 把log改成你需要copy到的用户,重新编译qmail-queue就ok了。#define QUEUE_EXTRA "" #define QUEUE_EXTRALEN 0 改成 #define QUEUE_EXTRA "Tlog\0" #define QUEUE_EXTRALEN sizeof(QUEUE_EXTRA) 13.客户端发信,报错如下: 553sorry,that domain isn't in my list of allowed rcpthosts (5.7.1) 怎么解决? A: smtp server需要auth么? 判断方法如下: telnet localhost 25 ehlo gadfly 如果显示有Auth....,就是需要Auth的。 如果需要,客户端是否配置auth了。如果没有,发往外域,就是这个错。 如果不需要,客户端的mailfrom是否是/var/qmail/control/rcpthosts中配置的域,如果不是,就是这个错. 14.发信有问题?如何检查SMTP服务是否有问题?是否启动了? A:最好的办法就是直接连接smtp服务,如下: telnet your_server_ip 25 用smtp命令去测试,具体的命令使用,参见 15.每次客户端发信时,qmail总要试图连接客户端113端口,从而导致发现过程缓慢 在网上查到说,关掉Auther Idnet可以解决,但应该怎样做呢? A: tcpserver的命令行加上 -H -R就好了 16.配一台qmail服务器,不管to的地址是什么,都转发到另一台SMTP服务器这个时候Qmail该如何设置呢?? A:可以利用smtproutes rainbow.linuxfane.com:mail8.rainbow.jp :fw.rainbow.linuxfane.com:8088 第一行的存在会将发给rainbow.linuxfane.com的邮件重定向到mail8.rainbow.jp主机 第二行的存在会将任何不符合之前行条件的邮件重定向到fw.rainbow.linuxfane.com的8088端口,让 邮件安全的穿越防火墙 另外,注意,如果不想收任何域的信件,virtualdomains也必须置空。 17.smtp 使用auth patch后,出现以下一些问题: a.加认证报out of memory, 不加就过了。 b. 如果带域名,正常;不带,报auth failure c.随便输入什么用户名密码都能过。 怎么解决? A:参看 如果还是不行,建议换另外一个试试 18. qmail中如何清空队列(queue)中的所有消息? A:find /var/qmail/queue/ -type f -a -name [1-9]* -exec rm {} \; 19. solaris下编译ezmlm的时候,错误提示是/usr/include/time.h 出现getdate错误,请问因该如何解决?(agang) A: 这是ezmlm的一个bug,只在solaris下编译才出现: 把第885和第1869行的修改: 885 void getdate(struct msginfo *infop,int flagfail) 1869 getdate(infop,0); 为: 885 void ezmlmgetdate(struct msginfo *infop,int flagfail) 1869 ezmlmgetdate(infop,0); 就可以编译通过了。 20.在REDHAT9.0下安装qmail,POP3或smtp非常慢,为什么? A: pop或smtp的脚本中,tcpserver命令行中加上-H -R -l 0参数,防止客户端域名反查,用户indent反查和本地域反查。 21.这段日志是什么意思?第一列比如 “@400000003f53417b37a114cc ”代表什么意思啊? 我能直接转换成具体的时间吗?比如某年某月某日某分某秒吗?? 或者是像 messages 那样表示时间? QUOTE:
@400000003f304780381352e4 tcpserver: status: 0/40 A:@400000003f3631091d390694 tcpserver: status: 0/40 这是tai64格式的时间。 具体的描述见 你可以用 tai64nlocal 来显示可读的时间 22.sina的mail问题,给新浪发信出现一下错误,如何解决?(artxing) CODE:
553 Domain information in your 'HELO' dialog is not in the stadand format reque A:sted by RFC 821 and RFC 1035, please send your correct domain information accord ingly. 您的IP为国内IP,且与您的MTA服务器IP信息不符!Please contact our mail serv ice engineers on antispam@staff.sina.com.cn. if you have other problems, or anyt hing disallowed by our system.. --------------------------------------------您会 话中的helo没有按照RFC 821 RFC 1035的标准,发送您正确的domain信息。Your IP addres s belonging to domestic domain, and your IP informaiton dismatch with the inform ation provided by the MTA server 如果存在其他问题或者不符合我们屏蔽要求,请发信 到antispam@staff.sina.com.cn echo "我的邮件服务器的真实域名(A记录)" >; /var/qmail/control/helohost 23.qmail下smtp不能发信,telnet也不成? # telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. (wjger) A: 检查vchkpw, tcp.smtp.cdb文件的属性是否正确。 主要是在编译过程中,不知为何tcp.smtp.cdb 丢失。另外还有一个体会是 mysql 中的grantq权限设置中的域名(vpopmail@localhost)应该和vmysql.h中的mysql服务器名是一致的。否则会造成vadddomain 拒绝连接失败的现象!! 第三部分: sqwebmail 1. 升级sqwebmail的注意事项? (redfox) A: 升级好后最好把qmail停止,把authdaemond重启动 /usr/local/qmail/webmail/libexec/authlib/authdaemond stop /usr/local/qmail/webmail/libexec/authlib/authdaemond start 然后再启动qmail,不然会出现一些莫名其妙的问题 2.sqwebmail如何限制附件大小啊?(lovecelery) A: 我想把附件大小设成4M,但是默认是2M,方法如下: 在configure的时候指定 --with-maxformargsize=4194304 --with-maxmsgsize=4194304 就可以了 --with-maxformargsize是允许上传的附件大小,不包含邮件正文的, --with-maxmsgsize是全部邮件的大小,正文+附件的 3.如果我们有默认域,可以凭用户名和密码直接登陆,但是登录后往往出现 user@localhost.loacldomain,而不是你所想要的user@yourdomain.com, 怎么解决?(oranger2001) A: 在/usr/local/share/sqwebmail下面建立一个hostname文件,默认情况下好像无此文件,文件里面加入 yourdomain 这样以用户名进入就可以正常显示你的后缀啦!! 4.请问我如何设定sqwebmail上页面的空闲停留时间? 因为我登陆sqwebmail后,如果超过一定时间就会要求我重新登陆,我想把这个时间值改大一些。 A:两个办法, 1、sqwebmail编译的时候,指定 --enable-hardtimeout=7200 Hard session timeout (2hrs default)" --enable-softtimeout=1200 Inactivity timeout (20 min default)" 后者是没有活动下的session timeout, 前者是有活动,也强制timeout。 2、也可以给cgi指定环境变量SIGWEBMAIL_TIMEOUTSOFT,SIGWEBMAIL_TIMEOUTHARD来取代configure时缺省指定的时间。 但是注意,这种方式一定要和cleancache.pl中的时间一致。 第四部分: vpopmail + qmailadmin 1: 如何通过vpopmail实现qmail邮件账户的数据库管理?(netloafer) 2:能不能修改默认的域名?(peng) A: 要更改haohao.com为默认域。 方法: 更改~qmail/control/ defaultdomain me plusdomains 逐一更改启动pop3和 smtp的启动脚本: 修改:email.3sk.com为haohaoo.com 在最上边添加:export VPOPMAIL_DOMAIN=haohaoo.com 只要你的dns server给虚拟域做好了设置。 你的outlook and foxmail里的用户输入用户的全名,就没问题阿! 不要用:master ,系统默认认为是master@email.3sk.com了 要用master@haohaoo.com ,这样才可以的。 2.如何做Qmail用户的备份?也就是如何将一个系统的Qmail用户完整地转移到另一个系统?(peng & netloafer) A: a.cdb配置的?那么请把/home/vpopmail/domains这个文件夹备份好就可以了。用户和密码文件,还有用户信件都在这个目录下。 还应该备份/var/qmail/control下的相关配置文件。 b.如果是以MYSQL数据库方式来存储用户认证信息的 只需要备份 ~vpopmail/domain下的所有邮件 /var/qmail/control的配置文件 MYSQL数据库目录下的vpopmail库目录。一般是/var/lib/mysql(RPM)、/usr/local/mysql/data、/usr/local/mysql/var下面。 3.以下错误怎么解决? warning: file name is symbolic link header.html warning: file name is symbolic link show_login.html warning: file name is symbolic link footer.htm. (xmy) A: 出错原因应该是htmlibdir目录不能正确读取,重新编译qmailadmin: ./configure 的时候带option--with-htmllibdir=.... 注意目录的属主uid和gid:vpopmail vchkpw 4.安装VPOPMAIL以后发现MYSQL里还是没有VPOPMAIL的DB啊? A: vadddomain第一个域,才有vpopmail db 5. 我用vadddomain时时提示: #/home/vpopmail/bin/vadddomain xxx.com Please enter password for postmaster: enter password again: Error: Domain already exists 但是mysql里的确没有vpopmail这个库,怎么回事? A: 原因是如果你先前用vadddomains加过域,后来又手工删除数据库,后来vadddomain加相同的域,就加不了,报 "Error: Domain already exists " 这是因为在/var/qmail/control/virtualdomains和/var/qmail/users/assign及cdb包含相应的域,vaddaddomains时会检查这些文件,有就报这个错。 所以解决方法如下: 1.删除/var/qmail/control/virtualdomains和/var/qmail/users/assign相应的域信息 2.运行/var/qmail/bin/qmail-newu重新生成cdb 3.vaddadomains your.domain 就好了 所以为了避免这种麻烦,以后尽量用vdeldomain删除域,而不是手工的删除数据库中的数据,容易造成不一致。 4.编译qmailadmin和vpopmail的时候报找不到mysql的头文件或库文件。(nicosoft) A: 1.如果是rpm方式安装的mysql,方法如下 rpm -qa|grep -i mysql 看看有没有开发包,如果有,一般再devel中 rpm -ql mysql-devel 2。如果是源码安装 --prefix=/usr/local/mysql 的话那么你的 indir=/usr/local/mysql/include/mysql libdir=/usr/local/mysql/lib/mysql 如此类推 5.能不能更改域的默认管理账号?在qmail+vpopmail中,能不能更改域的默认管理账号,怎么更改。默认是postmaster,能不能改成如,webmaster? A: vmoduser有个-a参数,可以赋予用户管理权限。 如果想全面禁用postmaster的特殊权限话,就只能改源代码了。 6.如何成批添加/导入用户 第一种方法(garfy): a.在home目录下建立文件adduser.sh touch adduser.sh b.编辑adduser.sh ee adduser.sh 加入一下内容: while read line do echo $line /home/vpopmail/bin/vadduser $line $line done < user c.建立文件user,并输入用户 touch user ee user 11 22 33 d.执行adduser.sh ./adduser.sh 这样user文件中输入的用户就添加到默认域中了,用户名和密码都是一样的。 第二种方法(gadfly): CODE:
#!/bin/sh 文件内容的格式 #batchadduser.sh: batch add mail user. #install step. #chmod u+x batchadduser #./batchadduser.sh domain datafile if [ $# -lt 2 ] then echo "usage: $0 domain datafile" exit 1 fi domain=$1 datafile=$2 addcmd=/home/vpopmail/bin/vadduser while read username passwd do $addcmd $username@$domain $passwd done < $datafile username1 passwd username2 passwd2 ............ 把内容保存到datafile文件中 执行 ./batchadduser.sh localhost.com datafile 7、vpopmail make Error , [root@localhost vpopmail-5.2.1]# make make all-recursive make[1]: Entering directory `/root/download/qmail/vpopmail-5.2.1' Making all in cdb make[2]: Entering directory `/root/download/qmail/vpopmail-5.2.1/cdb' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/root/download/qmail/vpopmail-5.2.1/cdb' make[2]: Entering directory `/root/download/qmail/vpopmail-5.2.1' gcc -I. -I/usr/local/mysql/include -g -O2 -Wall -c vpopmail.c vpopmail.c:26:20: string.h: 没有那个文件或目录 ... make[2]: *** [vpopmail.o] Error 1 make[2]: Leaving directory `/root/download/qmail/vpopmail-5.2.1' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/download/qmail/vpopmail-5.2.1' make: *** [all-recursive-am] Error 2 ? A: 把glibc-devel安装上先。 告诉你们一个好办法,以后缺什么文件,这样找原因。 例如我的机器没问题,我就可以这样找到原因, 1. string.h这类的头文件,一般都在/usr/include下 find /usr/include -name string.h /usr/include/string.h 2. rpm -qf /usr/lib/bcc/include/string.h pm -qf /usr/include/string.h 这样你就知道缺什么了。 找的方法只是针对linux系统的情况,其它os都有相应的找软件包的办法。 但是错误的原因的是一样的,就是缺软件包。 有的时候make报ld .... -lz之类的错误,也是这个原因。 可以用类似的办法找错误 8.把一邮件域的名字比如a.com更改为b.com,如何实现?(beck2000) A:以下几个步骤: 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才是实际的数据文件。 |