- 论坛徽章:
- 1
|
本帖收集论坛内的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: http://chinaunix.net/forum/viewtopic.php?t=1126
3: qmail+LDAP安装配置方法? (netloafer)
A: http://chinaunix.net/forum/viewtopic.php?t=1119
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 官方已经提供了推荐的补丁
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才是实际的数据文件。 |
|