qmail-1.03的编译出现问题:
../load auto-str substdio.a error.a str.a
/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss
mismatches non-TLS reference in substdio.a(substdo.o)
/lib/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [auto-str] Error 1
后来搜了一下,在哪说的忘记了,是因为gcc版本高了以后对extern int errno这种写法不自动修正了。解决办法:
grep “extern int errno”
把所有grep出来的地方的”extern int errno”换成 #include
试了一下,果然解决。
原文找到了:http://www.webservertalk.com/archive66-2006-3-1441516.html
[bianbian补注]:其实这个错误再打个errno的patch就可以解决的。。。
■ Sorry,_message_has_wrong_owner._(#4.3.5)
queue队列损坏,删除/var/qmail/queue目录,重新make setup check生成目录
■ Sorry,_no_mailbox_here_by_that_name._(#5.1.1)
修改了/var/qmail/control/locals文件,所以,虚拟域名就无效了。
把locals文件清空,就不会出现这个问题了。
■ qmail能发不能收, qmail_has_prog_delivery_but_has_x_bit_set
连自己域内发给自己的都收不到。一般是.qmail-default的权限问题。查看日志会发现:
deferral: Uh-oh:_.qmail_has_prog_delivery_but_has_x_bit_set._(#4.7.0)
前面我抱怨过了,给我的网站恢复数据居然是NTFS的,导致所有文件权限丢失。详见抱怨贴
一定要去掉 /home/vpopmail/domains/域名/.qmail-default 的x权限
即 chmod -x /home/vpopmail/domains/域名/.qmail-default
■ 454 oops, unable to write pipe and I can’t auth
详见:[原] qmail打了smtpd-auth补丁后454 oops, unable to write pipe and I can’t auth
■ pop3 遇到 -ERR this usr has no $HOME/maildir
supervise/qmail-pop3d/run里启动pop3d的脚本可能有错,应该是:
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
exec tcpserver -H -R -v -c100 -u “$QMAILDUID” -g “$NOFILESGID” 0 110 qmail-popup nju.org.cn \
/home/vpopmail/bin/vchkpw \
/var/qmail/bin/qmail-pop3d Maildir 2>&1
■ 解决qmail经常收到投递失败的邮件
这一段部分来自:http://blog.5ilinux.com/archives/2006/04/qmailerror.html
首先说明一下<>和<#@[]>都是系统bouce信件信封(envelope)上的寄信人地址
这两种信都是系统产生的,区别在于<>往往是系统single bouce的地址,而<#@[]>则是系统double bounces或者triple bouces的地址
系统用这两种地址是为了避免邮件回路(mail loops)
来自<#@[]>一般都是系统的double bounces
要去掉这些double bounces可以有一种简单的办法
其原理是产生一个nobody的地址,发往这里的信件都会被丢弃,这样double bouces就不会烦你的postmaster了
具体步骤如下:
echo “#” > /var/qmail/alias/.qmail-doublebounceto (或者直接丢弃:echo “| cat > /dev/null” … )
echo “doublebounceto” > /var/qmail/control/doublebounceto
■ 垃圾邮件太多
1)装上发信黑名单 CBL: http://anti-spam.org.cn
2)装上maildrop和垃圾邮件过滤器 SpamAssassin: http://spamassassin.apache.org/
简单点,直接用perl的cpan安装:cpan Mail::SpamAssassin
这里有具体方法:
Getting SpamAssassin, MailDrop, VPopmail and qmail to play friendly
用 qmail + vpopmail + maildrop + spamassassin 实现邮件过滤的方案
其实我觉得老外的那个办法更好,直接改.qmail-default一个文件就行了。结合两者长处,我写了一个又支持用户自定义黑白名单,又不需要到处放.mailfilter的方法:
.qmail-default
|/usr/local/bin/maildrop ./.mailfilter
.mailfilter
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 >> $VHOME/Maildir/maildirsize`
to “$VHOME/Maildir/.Trash/”
}
else
{
exception {
to “$VHOME/Maildir/”
}
exception {
to “$VPOP”
}
}
■ 加入maildrop作为投递程序后的可能错误
maildrop:_Cannot_have_world/group_permissions_on_the_filter_file_-_for_your_own_good./
.mailfilter必须是0600属性
failure: Unable_to_execute_/sbin/nologin/Unable_to_execute_/sbin/nologin/
或者
Sorry,_no_mailbox_here_by_that_name._(#5.1.1)
如果编译maildrop的时候设置了vpopmail作为uid来跑,即
./configure –enable-maildrop-uid=vpopmail \
–enable-maildrop-gid=vchkpw –enable-maildirquota –without-db \
–with-trashquota
则必须给vpopmail一个shell,默认好像是/sbin/nologin,修改/etc/passwd,改为/bin/bash即可
.
TAG: 编译 QMAIL