CentOS sendmail安装及邮件域名配置 – 77970290的个人空间 – 开源中国社区

sendmail是Linux下优秀的邮件系统。在不做任何设定的情况下,sendmail发出邮件的邮箱源地址形如userid@localhost.localdo,这种地址几乎会被所有的邮箱认定为SPAM(垃圾邮件)或直接拒收。

1、 Sendmail安装

在CentOS下,sendmail一般默认是随操作系统一起安装的。如果安装系统时没有安装sendmail服务,手动安装sendmail也很简单:

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>#&nbsp;yum&nbsp;install&nbsp;-y&nbsp;sendmail&nbsp;</span></span></li></p><p>   </p><p>   <li><span>#&nbsp;yum&nbsp;install&nbsp;-y&nbsp;sendmail-cf&nbsp;</span></li></p><p>  </p><p>  </ol></p><p>

2、 Senmail的SMTP认证配置(不需要认证的可忽略此步)

首先确认saslauthd服务是否安装或启动。

安装saslauthd服务:# yum install -y saslauthd

启动saslauthd服务:# service saslauthd start

(1) 配置Senmail的SMTP认证

# vi /etc/mail/sendmail.mc

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>dnl&nbsp;TRUST_AUTH_MECH(`EXTERNAL&nbsp;DIGEST-MD5&nbsp;CRAM-MD5&nbsp;LOGIN&nbsp;PLAIN')dnl&nbsp;</span></span></li></p><p>   </p><p>   <li><span>dnl&nbsp;define(`confAUTH_MECHANISMS',&nbsp;`EXTERNAL&nbsp;GSSAPI&nbsp;DIGEST-MD5&nbsp;CRAM-MD5&nbsp;LOGIN&nbsp;PLAIN')dnl&nbsp;</span></li></p><p>  </p><p>  </ol></p><p>

将上面两行的dnl去掉。在sendmail文件中,dnl表示该行为注释行,是无效的,因此通过去除行首的dnl字符串可以开启相应的设置行。

(2) 设置Sendmail服务的网络访问权限

# vi /etc/mail/sendmail.mc

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>DAEMON_OPTIONS(`</span><span>Port</span><span>=</span><span>smtp</span><span>,</span><span>Addr</span><span>=</span><span>127.0.0.1</span><span>,&nbsp;</span><span>Name</span><span>=</span><span>MTA</span><span>')dnl&nbsp;</span></span></li></p><p>  </p><p>  </ol></p><p>

将127.0.0.1改为0.0.0.0,意思是任何主机都可以访问Sendmail服务。如果仅让某一个网段能够访问到Sendmail服务,将127.0.0.1改为形如192.168.1.0/24的一个特定网段地址。

3、 生成Sendmail配置文件

Sendmail的配置文件由m4来生成,m4工具在sendmail-cf包中。如果系统无法识别m4命令,说明sendmail-cf软件包没有安装。

生成Sendmail的配置文件:

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>m4&nbsp;/etc/mail/sendmail.mc&nbsp;</span><span>&gt;</span><span>&nbsp;/etc/mail/sendmail.cf&nbsp;&nbsp;</span></span></li></p><p>  </p><p>  </ol></p><p>

需要重启Sendmail才能使配置文件生效。

4、 Sendmail邮件域名配置

配置sendmail使用合法的域名分两步,修改sendmail的配置文件和添加域名MX记录。

sendmail可以直接使用 “-r account@domain.com” 参数来以任意源地址发送邮件,但目前主流的邮箱都会将源地址和反向解析IP进行比较,如果解析不到或是解析的IP不匹配,轻则将邮件直接归为SPAM,严重的就直接拒绝接收。

MX记录(Mail Exchanger Record)主要是接收邮件时使用,即当投递一封新邮件时,会查询收件人域名的MX记录,然后通过MX记录得到的IP地址进行投递。同时邮件厂商在接收邮件的时候也会将源地址和MX记录进行比较,作为垃圾邮件的判断标准之一。

第一步:添加域名

(1) 将域名加入到local-host-names文件

# vi /etc/mail/local-host-names,添加

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>sunchis.com&nbsp;</span></span></li></p><p>  </p><p>  </ol></p><p>

(2) 修改submit.cf文件

# vi /etc/mail/submit.cf,找到行 #Dj$w.Foo.COM,修改为

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>Djsunchis.com&nbsp;</span></span></li></p><p>  </p><p>  </ol></p><p>

至此,sendmail邮件命名配置完毕,重启sendmail使配置生效。

第二步:添加域名MX记录

找到修改域名信息的页面(不同的域名注册商页面不相同),修改结果因域名商的不同最迟会在24小时内生效。

(1) 添加域名A记录mail,直接指向你的邮件服务器的静态IP地址:

点击放大图片

(2) 添加(或是修改)域名的MX记录,形如:

点击放大图片

(3) 使用nslookup检测MX记录是否能正确解析到邮件服务器

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>#&nbsp;nslookup&nbsp;</span></span></li></p><p>   </p><p>   <li><span><span>&gt;</span><span>&nbsp;set&nbsp;</span><span>q</span><span>=</span><span>mx</span><span>&nbsp;</span></span></li></p><p>   </p><p>   <li><span><span>&gt;</span><span>&nbsp;sunchis.com&nbsp;</span></span></li></p><p>   </p><p>   <li><span>Server:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8.8.8.8&nbsp;</span></li></p><p>   </p><p>   <li><span>Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8.8.8.8#53&nbsp;</span></li></p><p>   </p><p>   <li><span>&nbsp;</span></li></p><p>   </p><p>   <li><span>Non-authoritative&nbsp;answer:&nbsp;</span></li></p><p>   </p><p>   <li><span>sunchis.com&nbsp;&nbsp;mail&nbsp;<span>exchanger</span><span>&nbsp;=&nbsp;</span><span>10</span><span>&nbsp;mail.sunchis.com.&nbsp;</span></span></li></p><p>   </p><p>   <li><span>&nbsp;</span></li></p><p>   </p><p>   <li><span>Authoritative&nbsp;answers&nbsp;can&nbsp;be&nbsp;found&nbsp;from:&nbsp;</span></li></p><p>   </p><p>   <li><span><span>&gt;</span><span>&nbsp;&nbsp;</span></span></li></p><p>  </p><p>  </ol></p><p>

OK,已经正确解析到邮件服务器所对应的域名。

5、 Relaying denied(拒绝投递)的解决

出现 550 5.7.1 <xxx@163.com>… Relaying denied. IP name lookup failed [192.168.1.133] 异常时,原因是把sendmail当做邮件中转站,需要将客户端的IP地址加入到access配置文件中。

# vi /etc/mail/access,添加

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>Connect:192.168.1.133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RELAY&nbsp;</span></span></li></p><p>  </p><p>  </ol></p><p>

重新生成访问权限的数据库:

  </p><p>  <div class="codeCtrl"></p><p>   </p><p>   view plain&nbsp;&nbsp;&nbsp;</p><p>   </p><p>   <span style="width:100px;">copy</span></p><p>  </p><p>  </div></p><p>  </p><p>  <ol></p><p>   </p><p>   <li><span><span>#&nbsp;cd&nbsp;/etc/mail/&nbsp;</span></span></li></p><p>   </p><p>   <li><span>#&nbsp;makemap&nbsp;hash&nbsp;access.db&nbsp;<span>&lt;</span><span>&nbsp;</span><span>access</span><span>&nbsp;</span></span></li></p><p>  </p><p>  </ol></p><p>

这样,问题就会得到解决。

来源URL:http://my.oschina.net/u/559845/blog/78575