更多精彩内容,请访问云邮科技官方网站:http://www.yunrelay.com
现在位置:首页 » 邮件技术 »

qmail相关FAQ

作者:山坛兄弟 ⁄ 时间:2014年05月03日 ⁄ 分类: 邮件技术 评论:0 第一部分:MTA 

1: 怎么加快 qmail 投递邮件速度? 

A: /var/qmail/control下面是qmail的控制文件,这两个文件: 
  Concurrentcylocal default: 10 最大本地同时传送数  
  Concurrencyremote default: 20 最大远程同时传送数 

2: Qmail的主要配置文件有哪些? 
A: http://chinaunix.net/forum/viewtopic.php?t=1126 

3: qmail+LDAP安装配置方法? (netloafer) 
A: http://chinaunix.net/forum/viewtopic.php?t=1119 

4:Qmail如何限制附件的大小呢?? 
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 官方已经提供了推荐的补丁  

http://www.qmail.org/top.html#patches 

打个这个补丁就行了 
http://qmail.mirrors.space.net/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch  
至于tcpserver可能也有相同的问题,patch都可以在以下目录找到 
http://qmail.mirrors.space.net/moni.csi.hu/pub/glibc-2.3.1/  

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: 每发完一封  
邮件后都会自动回复一封内容大概就是说发不出去的意思。自动回复的信件内容是这样的  
..... 
<log@yourdomain>;:  
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  

如果想把进出的邮件都复制一份给一个特定的用户,反过来修改就行了. 

将extra.h中的 

#define QUEUE_EXTRA "" 

#define QUEUE_EXTRALEN 0 



改成 

#define QUEUE_EXTRA "Tlog\0" 

#define QUEUE_EXTRALEN sizeof(QUEUE_EXTRA) 



把log改成你需要copy到的用户,重新编译qmail-queue就ok了。 


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命令去测试,具体的命令使用,参见 
http://www.chinaunix.net/forum/viewtopic.php?t=77544 

 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:参看http://www.chinaunix.net/forum/viewtopic.php?t=68469 
如果还是不行,建议换另外一个试试 

 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 那样表示时间?
 
引用: 
@400000003f304780381352e4 tcpserver: status: 0/40  
@400000003f3631091d390694 tcpserver: status: 0/40  


A: 
这是tai64格式的时间。 具体的描述见http://cr.yp.to/daemontools/tai64n.html 

你可以用  

tai64nlocal <log  

来显示可读的时间  

22.sina的mail问题,给新浪发信出现一下错误,如何解决?(artxing) 
553 Domain information in your 'HELO' dialog is not in the stadand format reque 

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

A: 
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) 
http://chinaunix.net/forum/viewtopic.php?t=1147 

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):  

 
#!/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才是实际的数据文件。
本文由山坛兄弟原创或编辑,转载请保留链接【qmail相关FAQ】http://www.030904.net/email/119.html
本文标签: LINUX qmail
上一篇: Qmail邮件服务器更改默认smtp/pop端口号
下一篇:AMH支持PHP-5.2.17p1 解决方案
目前有 0 条评论