分类: LINUX
2010-05-05 16:02:09
由于公司内部电话系统上的sendmail邮件服务器使用的IP地址是动态的,所以发送出去的邮件有80%被对方邮件服务器上的反垃圾邮件机制退回或者直接丢弃。为了能够将邮件成功发送到目的邮件服务器上,我们需要借助公司的邮件服务器来将邮件成功的转发到目的邮件服务器!在转发到公司邮件服务器的同时,为了公司邮件服务器的安全,我们还需要在转发的过程中加上SMTP认证!
以下是我在电话系统上测试过的通过SMART_HOST + SMTP认证成功转发邮件的详细步骤:
1. 检查sendmail是否支持SASL认证
SMTP认证的实现需要sendmail集成了SASL认证支持。检查邮件服务器是否有SASL认证支持,如果没有的话需要再安装。幸运的是电话系统上的Sendmail
2. 备份sendmail.mc 文件并修改
1) 在修改配置文件前,备份是个好的习惯。运行以下命令备份配置文件sendmail.mc
cp sendmail.mc sendmail.mc.bak
2) 打开sendmail.mc文件并做如下修改
修改以下两行:
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun,goaway')dnl
define(`SMART_HOST',`[64.78.160.80]')dnl
添加以下四行:
define(`confAUTH_OPTIONS', `A')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/authinfo.db')dn
3) 生成sendmail.cf文件
m4 sendmail.mc > sendmail.cf
3. 修改认证文件,告诉sendmail用哪个邮箱用户和密码来完成SMTP认证。
1) 打开认证文件/etc/mail/authinfo并编辑下面一行:
AuthInfo: "U:smtp" "P:kldfir8f" "M:LOGIN"
U代表邮箱用户;P代表邮箱密码;M代表公司邮件服务器认证方式。
2) 保存完authinfo文件后,我们需要限制它的权限以便只有root用户可以查看。由于authinfo里包含了邮箱的密码,所以限制authinfo文件的权限是很有必要的。以下是修改authinfo文件权限的命令:
chmod 660 /etc/mail/authinfo
3) 将authinfo文件转换成.db的文件,以便sendmail能够读取它。以下是转换命令:
makemap hash /etc/mail/authinfo < /etc/mail/authinfo
4. 最后,重启sendmail以便新的配置和修改生效!
service sendmail restart
测试发送邮件
mail -s "test" bruce@51hosting.com < test.txt
很幸运,邮件已经通过公司邮件服务器成功转发到目的邮件服务器。