最近在研究qmail,找到几个管理的方法:
 
1,对于发送邮件的结果,目前我只会根据日志来判断。
可能有几种情况:
Remote_host_said:_450_Service_not_available  这种情况我认为是对方服务器拒收
Sorry,_I_wasn't_able_to_establish_an_SMTP_connection.  目前不知道是什么原因
Remote_host_said:_550_User_not_found  一般是由于账号是假的
Remote_host_said:_554_this_mail_is_rejected_by_antispam_system  被过滤
Remote_host_said:_553_Dynamic_pool.  不清楚,可能也是被拒绝了
Remote_host_said:_250_Mail_OK_queued  发送成功
Sorry,_I_couldn't_find_any_host_named  这是DNS的问题!过了很久才明白。换一个DNS。
 
 
2,关于邮件队列的管理。
如果邮件发送的请求速度超过了qmail发送的速度,邮件应该会被保存在队列中。并且发送失败的邮件也会被保存,一定时间以后再重新发送。这样队列就会越来越长。
 
清理队列的方法是这样:
安装qmail-remove,然后停掉qmail进程。建立一个目录/var/qmail/queue/yanked,运行qmail-remove -r
接下来又有个问题,yanked里面会有很多文件,用rm可能删不了。这时又要用到find了。
 find /var/qmail/queue/yanked -type f -exec rm {} \;
 
查看队列数量:/var/qmail/bin/qmail-qstat
 
如果你发现队列很长,就说明你设置的发送速度超过了服务器的能力,或者假的地址太多。
 
3,使服务器每天自动报告发送数量和发送成功数量的脚本
#!/bin/bash
DATE=$(date |cut -c5-10)
LOG1=/var/log/maillog
LOG2=/var/log/mailsend.log
REPORT=/root/mailreport
echo "$DATE send: $(cat $LOG1 |grep "$DATE" |grep "starting delivery" |awk '{print $14}'|sort |uniq |wc -l)" >> $LOG2
echo "$DATE success: $(cat $LOG1 |grep "$DATE" |grep success |awk '{print $8}' |sort |uniq |wc -l)" >> $LOG2
cat $LOG2 | grep "$DATE" > $REPORT
mail -s "$DATE mail statistics" 邮箱地址 < $REPORT
 
4,qmail的进程
qmail-smtpd 接收远程邮件并发送给qmail-queue
qmail-inject 接收本地邮件并发送给qmail-queue
qmail-queue 邮件队列
qmail-send 检查队列中的邮件并发送给qmail-rspawn,qmail-lspawn或qmail-clean
qmail-clean 清空队列中发送失败的邮件
qmail-rspawn 决定远程邮件的发送时间、顺序、目标主机,并调用qmail-remote
qmail-lspawn 决定本地邮件的发送时间、顺序、目标主机,并调用qmail-local
qmail-remote 发送远程邮件,一个进程只能连接一台目标主机
qmail-local 发送本地邮件
splogger 写日志
 
其中如果kill掉qmail send进程其他进程也会终止。当然最好还是用qmail stop