发出去的邮件被当成垃圾邮件
sendmail很容易安装和运行,起先,向我的gmail邮箱发送邮件时,总是要到垃圾邮件中找,检查发现发件人的地址是 xxx@localhost.localdomain。显然是邮件服务器的主机名配置不合理。经过研究,结论是sendmail启动时会从多个地方获得本机名和别名,他们是:
1. RedHat操作系统的/etc/hosts文件
2. RedHat操作系统的/etc/sysconfig/network
3. sendmail的配置文件/etc/mail/sendmail.cf中Cw的值
4. sendmail的配置文件/etc/mail/local-host-names(如果在sendmail.cf中声明使用该文件)
这些名字既用在发送过程,也用在接收过程。接收过程后面说明。
如果,使用sendmail命令向外发送一个邮件,例如:
/usr/sbin/sendmail who@domain.com < message-in-file
服务器要决定在发送的邮件中的From头应该怎样填写,它的格式是account@hostname,account就是当前Linux用户的帐号,容易确定,hostname部分我感觉到它是这样确定的:系统判断这是本地用户发起的邮件,所以在/etc/hosts中将127.0.0.1行中的首个名字选定为hostname。如果首个名字是localhost或者localhost.localdomain,对方一般会认为这是垃圾邮件。
于是有个办法,将真是的邮件服务器名字放在127.0.0.1这行的首个位置,这个方法有效解决了From头的地址问题。
但是,这种解决方法仍然是不正确的,将会在http://cbl.abuseat.org的CBL上有个很不好的评级,后来,我根据http://cbl.abuseat.org/hostname.html的建议,将127.0.0.1这行恢复成只有localhost和localhost.localdomain两个名字,而另加一行,说明实际地址和实际主机名字的对应关系。参见http://cbl.abuseat.org/hostname.html。同时在sendmail.cf中声明Dj的值为真正的主机名。
使用以下方法检验主机名配置是否合理:
/usr/sbin/sendmail helocheck@cbl.abuseat.org < message-in-file
即给上述地址发个邮件,看它返回的信息里面是否包含了真正的IP地址或者真正的主机名,不应该是127.0.0.1或者localhost之类。