关于qmail发邮件故障的一些小问题
说这是小问题,其实也不小,折腾了我将近半年时间,那就是,服务器发送邮件到yahoo的邮箱,客户总是收不到邮件,所以一直建议客户不要使用yahoo的邮箱,今天坐下来,立志解决这个问题,一坐就坐到了凌晨三点钟。。。下面就来记录下我的解决过程
公司服务器给很多邮箱发邮件都正常,唯独yahoo的不正常,怀疑是yahoo把ip加入黑名单了,于是用telnet模拟了一下SMTP发信过程(网上教程很多,搜一下一大把,记得把消息全部写在记事本里面,然后只要复制粘贴就行了,不然手工输入很容易超时退出了),发现yahoo竟然能收到邮件,只不过是在垃圾箱里面,但是至少比收不到邮件强一点吧。这样的话,说明不是被yahoo加入黑名单。
然后我又在服务器上面tcpdump了一下
tcpdump -i eth0 -s 65535 -w /some/file
网上资料说,tcpdump默认dunp出来的数据只有200多个字节还是bit,所以要-s 65535一下,-w是写入结果到某文件,这样的话,可以用wireshark直接分析导出的数据,不然的话,分析数据累死你不偿命的。
tcpdump运行起来立即发送一封邮件到yahoo,然后重新运行tcpdump,再发一封到google邮箱,这样就得到了两个文件供分析。
分析结果令我大吃一惊,发送到google的邮件正常与服务器通讯,监控yahoo的那个文件,竟然没有发现任何一个smtp会话,于是乎,在网上找了一整天的资料,终于找到了qmail的日志,用下面的命令监控日志
tail -f /var/log/qmail/qmail-send/current
然后发信,发现了错误
@400000004e5933e615fe4984 delivery 2: deferral: CNAME_lookup_failed_temporarily._(#4.4.3)/
继续上网查资料,然后发现,这个错误产生的原因是qmail没打bigdns的补丁,补丁在这里下载 http://www.ckdhr.com/ckd/qmail-103.patch,虽然是1.03的补丁,可是到了1.06,这个问题依旧没有解决,真的要怀疑一下qmail的开发人员了,虽然是开源软件,但是也不要这样绝情吧,哎,还算不错的是,虽然是1.03的补丁,但是经过我测试,1.06版本依然适用
把这个文件下载到 /usr/portage/mail-mta/netqmail/files里面,然后编辑这个文件
/usr/portage/mail-mta/netqmail/netqmail-1.06.ebuild
在大约84行的地方找到
epatch "${FILESDIR}"/${PV}-exit.patch
epatch "${FILESDIR}"/${PV}-readwrite.patch
在下面加一行
epatch "${FILESDIR}"/qmail-103.patch
然后执行
ebuild /usr/portage/mail-mta/netqmail/netqmail-1.06.ebuild manifest
重新编译安装qmail,重启一些服务,/etc/init.d/svscan restart
再次测试,发送到yahoo成功!
您可以RSS 2.0订阅。 留言,或者引用 Trackback。