# 阿里云CentOS关于sendmail更改为postfix默认发信的设置

> 作者：zning（https://ning.ae） · 发布：2014/06/14 13:42 下午 (UTC+8) · 原文：https://zning.me/14860141332038.html

今天晚上又很蛋疼的开始处理这个问题，搜了半天还是让大众舆论给说服了：要用postfix来作为默认发信端才能完成发信，CentOS自带的sendmail的短板在postfix的修理下也是处理的相当给力。于是，今天下午进行了置换。

我所在服务器使用的是CentOS，同时安装了WDCP。经过一晚上的折腾，看了不少技术贴，在此总结一下自己的方法，供各位参考。

**零、增加域名相关解析记录**

这一步建议是做吧，因为防止被判为垃圾邮件。

这里遇到个问题：由于我的域名已经绑定了QQ邮箱的域名邮箱，之前给的教程如果按照他的要求的话我得重新把mail的A解析改掉。（见下图）

[![2014-6-14-001](media/14860141332038/2014-6-14-001-300x95.jpg)](http://www.zning.net.cn/wp-content/uploads/2014/06/2014-6-14-001.jpg)

于是机制的我顺藤摸瓜按图索骥……（此处略去300个字）……将解析改成如下情形：

[![2014-6-14-002](media/14860141332038/2014-6-14-002-300x188.jpg)](http://www.zning.net.cn/wp-content/uploads/2014/06/2014-6-14-002.jpg)

各位可以仿着改就好。

（不过注意一点，在MX记录的记录值后有一个点别丢掉）

**一、配置Postfix****并启用**

postfix是CentOS默认安装的邮件服务器软件。以下配置示例假设要配置的域名是aliyun.com，邮件服务器主机名是email.aliyun.com。

1\. 打开postfix的配置文件（基本上修改的是将这些行前面有#的需要删除）

> vi /etc/postfix/main.cf

2\. :75 光标移至第75行，修改myhostname

> myhostname = email.aliyun.com

3\. :83 光标移至第83行，修改mydomain

> mydomain = aliyun.com

4\. :99 光标移至第99行，修改myorigin

> myorigin = $mydomain

5\. :116光标移至第116行，修改inet_interfaces

> inet_interfaces = all

6\. :119光标移至第119行，修改inet_protocols

> inet_protocols = ipv4

7\. :164光标移至第164行，添加$mydomain

> mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, aliyun.com
> 
> # 最后一个参数为指定发给本地邮件的域名

8\. :264光标移至第264行，修改mynetworks

> mynetworks = 168.100.189.0/28, 127.0.0.0/8
> 
> #指定内网和本地的IP地址范围，按照情况修改，一般无需变动

9\. :296光标移至第296行，修改relay_domains

> relay_domains =

10\. :419光标移至第419行，设置home_mailbox

> home_mailbox = Maildir/

11\. :425 光标移至第425行，设置mail_spool_directory，/data是之前挂载的数据盘，mail目录需要通过mkdir命令创建

> mail_spool_directory = /data/mail

12\. 重启postfix使设置生效

> service postfix restart
> 
> # 这里，如果重启出现如下情况也不要惊讶，因为你没启动过Postfix因而关闭肯定failed。第一次启动可能时间长一点。

**二、停止sendmail****服务及卸载，并设置Postfix****为默认邮件程序**

如果你之前开了sendmail，首先请停用并卸载。因为在用Postfix作为SMTP服务器的前提下，我们不准备再用sendmail。所以一不做二不休，将sendmail服务关掉。

> /etc/rc.d/init.d/sendmail stop

之后会显示如下信息： （或者不显示）

Shutting down sendmail:　　　　　　　　 [ OK ]

Shutting down sm-client: 　　　　　　　　[ OK ]

之后再输入如下命令：

> chkconfig sendmail off
> 
> # 关闭sendmail自启动
> 
> chkconfig –list sendmail
> 
> # 确认sendmail自启动已被关闭（都为off就OK）

之后会显示如下信息：

sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off

然后再将默认的MTA设置为Postfix：

> alternatives –config mta
> 
> # 设置默认MTA

之后会显示如下信息：

There are 2 programs which provide ‘mta’.

Selection Command

—————————————————

1           /usr/sbin/sendmail.postfix

*+ 2           /usr/sbin/sendmail.sendmai

# 当前状态：sendmail为默认MTA

> Enter to keep the current selection[+], or type selection number: 1
> 
> # 在这里输入1，使Postfix成为默认MTA。如果你的Postfix那行前面的Selection那列为2，则输入2

然后就是最后一步了，卸载掉sendmail：

> yum remove sendmail

**三、启动相应服务**

最后，启动Postfix服务，并设置相应服务为自启动。

> chkconfig postfix on
> 
> # 将Postfix设置为自启动
> 
> chkconfig –list postfix
> 
> # 确认Postfix服务状态

之后会显示如下信息：

postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off

# 确认2~5为on的状态就OK

> /etc/rc.d/init.d/postfix start
> 
> # 启动Postfix

之后会显示如下信息：（如果启动过请重启） （或者不显示）

Starting postfix: 　　　　　　　　　　　[ OK ]

**四、测试及其他详细设置**

**测试****用****telnet****测试邮件服务器是否正常****：**

1\. 在邮件服务器上安装telnet

yum install telnet

2\. 连接服务器SMTP端口

telnet 127.0.0.1 25

3\. 填写发件人

MAIL FROM:

回车

4\. 填写收件人

RCPT TO:contact@163.com

回车

5\. 撰写邮件内容

5.1 开始写邮件内容

DATA

回车

5.2 输入标题

Subject: test message

回车

5.3 输入内容，并以.号结束

test body

.

如果显示下面的信息，说明邮件进入发送队列

250 2.0.0 Ok: queued as 88D6D32A94

**测试函数调用发信：**

将一下文本复制到新建PHP文件中，如1.php,上传到网站跟目录并打开测试是否能够收到信件：

**其他详细设置：**

上述测试函数调用发信问题

如果不能发送成功，检查php.ini的710行的 sendmail_path 并且去掉前面的分号，最后修改成：

> sendmail_path = /usr/sbin/sendmail -t –i

授权其他服务器通过该邮件服务器发送邮件

未授权的情况下，如果在其他服务器telnet这台服务器，在输入收件人之后会出现Relay access denied错误

RCPT TO:contact@163.com

554 5.7.1 : Relay access denied

解决方法：

vi /etc/postfix/main.cf，:264将光标移至第264行，在mynetworks的值之后加这台的服务器IP地址，比如：

> mynetworks = 127.0.0.0/8 58.33.14.124

service postfix restart之后，问题解决。

其他问题

收到上面telnet发出的邮件时，你会发现收件人信息显示的是undisclosed recipients，解决方法是在DATA命令之后，输入Subject之前，分别输入：

> FROM:test@aliyun.com
> 
> TO:contact@163.com

这里文中没有说开启STMP的认证服务，如果需要启用请移步至：http://www.server110.com/postfix/201308/383.html 看相应设置。

今天就说到这吧，本人今天弄完有些小激动，就先喝两杯（饮料 ←_←）庆祝一下去了~

写于2014年6月14日晚
