CentOS6.5_64位系统下安装配置postfix邮件系统 启用并配置SMTP在第三方上边使用发送邮件

一前言

原本使用qq邮箱发送邮件,而后借助sendEmail来发送邮件告警,可是有天天的200封限制,非常不爽,因而想到来本身搭建邮件服务器来解决这个问题,关于使用sendEmail来借助qq邮箱来发送邮件详见http://www.cnblogs.com/Dicky-Zhang/p/5982973.html,在作这个以前,在网上查找了不少资料,发现非常混乱,不成一体,拼拼凑凑,根本没法使用,因此记录下来,方便后来人使用。php

在作postfix以前,我成功搭建了iredmail,一个强大的开源系统。稍后会另一篇文章来写下过程,供你们参考。html

说明下

关于阿里云作邮件系统的问题,阿里云对25端口作了限制,即便你作好了,在第三方服务器上可能都没法使用,在本机上我作好了,都没法使用。对于青云系统,默认是没有对外开放25端口,这里的对外开放不是服务器里面,你须要在后台去开放25端口,否则你在外部服务器去链接这台作好的服务器的时候会提示超时,对于国外的服务器我却是没测试,我认为应该不会作限制。好了,很少说了,开始正题linux

解释几个名词

  • MUA:用户代理端,即用户使用的写信、收信客户端软件。好比:outlook、foxmail等客户端软件,乃至经过浏览器登陆邮箱并发送邮件的BS架构网页也算是MUA。
  • MTA:邮件传送端,即常说的邮件服务器,用于转发、收取用户邮件。本文之中的postfix实现的就是MTA,固然postfix也是一种特殊的MUA,再也不深刻介绍,本文之中仅把postfix当作MTA使用。
  • MDA:邮件代理端,至关于MUA和MTA的中间人,可用于过滤垃圾邮件。
  • POP:邮局协议,当前是第三版,也就是POP3,用于MUA链接服务器收取用户邮件,通讯端口110。
  • IMAP:互联网应用协议,功能与POP相似:也用于MUA链接服务器收取用户邮件;功能较POP多,通讯端口143。
  • SMTP:简单邮件传送协议,MUA链接MTA或MTA链接MTA发送邮件使用此协议,通讯端口25,启用ssl/tls的状况下端口为465或587。

通常发邮件的步骤流程是:web

一、MUA经过POP、IMAP或SMTP协议链接MTA(称之为mta1);本文之中php经过phpmailer请求发送邮件的php脚本就扮演了MUA的角色,而postfix就是MTA;shell

二、MUA发送邮件给mta1(或者说MUA经过mta1发送邮件);本文中postfix就是这个mta1;vim

三、mta1与其余的MTA自主沟通链接将邮件传送至指定域下的指定用户(此时mta1就扮演了MUA的角色功能,这种交互是由邮件系统软件自主实现,与用户端无关)。浏览器

本次搭建postfix目的很明确:服务器

  • 用于php开发的web环境下新用户注册时发送验证码邮件---php下经过phpmailer类库的smtp协议连接postfix来发送邮件。
  • web环境与postfix在同一台CentOs6.5(64位)系统下,postfix不对外提供smtp亦不转发外部MUA邮件,仅转发(或发送)web环境下(MUA)的邮件,也就是仅转发本机(或者说本域)邮件。同时也不接收其余MTA的邮件(也就是说不接受他人发过来的邮件)。
  • 本文就不介绍postfix、sasldb二、saslauthd等软件了,网上一大把

 二 postfix的安装

1 yum remove sendmail #卸载sendmail
2 yum remmove postfix #卸载postfix
3 yum install postfix #从新安装postfix
4 #yum安装会自动创建postfix用户组和用户名
5 yum install crontabs #由于卸载postfix的时候系统定时服务也被卸载 核心服务 也同步安装

使用sasldb、saslauthd来生成smtp虚拟帐号网络

安装架构

 1 yum install cyrus-sasl*  #提供smtp的虚拟帐户和密码服务
 2 #sasldb2包含在saslauthd当中 就不要再问为何没有安装sasldb2的shell代码了
 3 #当前mta查看
 4 alternatives --display mta 
 5 #设置mta
 6 /usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix
 7 #再次查看mta
 8 alternatives --display mta 
 9 #输出结果最后一行会有相似以下的提示:mta即设置完毕
10 #Current `best' version is /usr/sbin/sendmail.postfix.

postfix开机启动设置,由于采用sasldb2提供postfix的smtp帐户和密码,无需saslauthd服务运行,故而saslauthd服务不用启动,使用sasldb2还减小资源占用:

 1 chkconfig postfix on 

三 postfix配置并启用smtp

postfix配置文件在/etc/postfix目录下,主要修改的配置文件为:/etc/postfix/main.cf,配置说明详见代码段

 1 vi /etc/postfix/main.cf #vi编辑postfix配置文件
 2 #找到以下配置项酌情修改
 3 ######
 4 myhostname =  mail.xxx.com.cn  
 5 #postfix主机名,修改为你的域名 此项须要添加A记录并指向postfix所在主机公网IP
 6 mydomain   =  xxx.com.cn  
 7 #域名
 8 myorigin   =  $mydomain 
 9 #本机postfix的邮箱域名后最 此项默认值使用myhostname
10 #此处使用了前项mydomain 也就是说本机postfix邮箱后缀为:@xxx.com.cn
11 inet_interfaces = all 
12 #指定postfix系统监听的网络接口 此处必须是localhost或127.0.0.1或内网ip
13 #若注释或填入公网ip  服务器的25端口将对公网开放
14 #默认值为all 即监听全部网络接口
15 #此项指定localhost后 本机postfix就只能发邮件不能接收邮件
16 inet_protocols = ipv4
17 #网络协议 ipv6在国内还不怎么普及 这里ipv4便可
18 mydestination = $myhostname, localhost.$mydomain, localhost
19 #指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix系统要接收什么样的邮件。
20 #此项配置中$myhostname表示postfix接受@$myhostname为后缀的邮箱的邮件 逗号分割支持指多项
21 #此项默认值使用myhostname
22 local_recipient_maps =
23 #此项制定接收邮件的规则 能够是hash文件 此项对本次配置无心义 能够直接注释
24 mynetworks = x.x.x.x
25 #指定你所在的网络的网络地址
26 #最好加上你要在第三方上使用的服务器,不加的话可能没法使用在第三方上面
27 #请依据实际状况修改
28 smtpd_banner = JJonline.Cn ESMTP Server
29 #指定MUA经过smtp链接postfix时返回的header头信息
30 #原始配置附带有postfix版本号 去掉便可,此项酌情处理
31 #SMTP Config
32 broken_sasl_auth_clients = yes
33 #指定postfix兼容MUA使用不规则的smtp协议--主要针对老版本的outlook  此项对于本次配置无心义
34 smtpd_client_restrictions = permit_sasl_authenticated
35 #指定能够向postfix发起SMTP链接的客户端的主机名或ip地址
36 #此处permit_sasl_authenticated意思是容许经过sasl认证(也就是smtp连接时经过了帐号、密码效验的用户)的全部用户
37 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
38 #发件人在执行RCPT TO命令时提供的地址进行限制规则  此处照搬复制便可
39 smtpd_sasl_auth_enable = yes
40 #指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行帐号、密码效验
41 smtpd_sasl_local_domain = $mydomain
42 #指定SMTP认证的本地域名  本次配置可使用 smtpd_sasl_local_domain = '' 或干脆注释掉 默认为空
43 smtpd_sasl_security_options = noanonymous
44 #取消smtp的匿名登陆  此项默认值为noanonymous smtp若能匿名登陆危害很是大 此项请务必指定为noanonymous
45 message_size_limit = 5242880
46 #指定经过postfix发送邮件的体积大小 此处表示5M
47 ######

查看postfix配置文件的全部配置项:

1 postconf #不带任何命令参数 便可输出全部postfix配置项以及默认值

postconf #不带任何命令参数 便可输出全部postfix配置项以及默认值

四sasldb2创建smtp用户和密码

某种意义上来说:smtp的帐户密码创建也就是创建邮箱帐户

#配置postfix启用sasldb2做为smtp的帐号秘密效验方式
#编辑经过sasl启用smtp帐号密码效验的配置
vi /etc/sasl2/smtpd.conf #vi写入或编辑内容以下:
#####
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login CRAM-MD5 DIGEST-MD5
#####
#这里须要注意的是:这个配置文件的位置是64位机器上的,32位机器应该在:/usr/lib/sasl2/smtpd.conf
 
#建立smtp帐号
saslpasswd2 -c -u `postconf -h mydomain` test #回车会要求输入密码,连续两次
#表示建立test@$mydomain的邮箱帐号(也是smtp的帐号)和密码
#本例就是建立test@xxx.com.cn帐号和密码
#此处注意的是smtp登陆用的帐号并非单纯的用户名  而是整个邮箱地址字符串
#假设此处设置的smtp帐号test@xxx.com.cn密码为test123  下方测试时要用到
 
#查看sasldb2的用户和密码
sasldblistusers2
#此命令进用户查看sasldb的用户状况
#此命令回车后会输出诸如这样的内容:test@xxx.com.cn: userPassword
 
#每次添加smtp用户完毕以后需重启postfix或reload

测试postfix配置文件并启动postfix

1 #测试postfix配置文件
2 service postfix check
3 #没有问题的话会返回着色[ok]字样
4 #启动postfix
5 service postfix start
6 #设置postfix开机启动
7 chkconfig postfix on
8 #更改sasldb2数据的权限,让postfix能够读取
9 chmod 755 /etc/sasldb2
View Code

五 测试smtp

直接本机telnet,上述添加的test@xxx.com.cn帐号和test123密码须要base64编码,编码后的字符串为:

执行编码语句:

用户名:perl -e 'use MIME::Base64; print encode_base64("test")'

dGVzdA==

密码:perl -e 'use MIME::Base64; print encode_base64("test123")'

dGVzdDEyMw==

telnet测试:

在本机上测试:

telnet  localhost  25

 1 #若没安装telnet 需安装telnet 
 2 yum install telnet
 3  
 4 #telnet测试smtp链接postfix
 5 telnet 127.0.0.1 25 #回车后会显示由$smtpd_banner配置的欢迎信息
 6 EHLO jjonline  #输入ehlo消息头进行握手 消息返回后继续
 7 AUTH LOGIN  #要求进行smtp帐号密码效验  
 8 返回后输入test的base64编码,是test而不是test@xxx.com.cn
 9  #返回后输入test123密码的编码 也是base64编码
10  #回车后就会显示smtp效验成功  接下来还能够测试发送邮件功能 本文就再也不作示例了
11  
12 #注意  要退出telnet 输入quit回车便可

自此,自建postfix并启用smtp和smtp的虚拟帐号完成、

说明一点:

想在第三方上边使用的话,你能够先测试下在第三方服务器上面,仍是telent mail.xx.com(你的邮件服务器),和上边基本同样,若是测试经过,基本就能够在第三方使用了。若是配置都正确,可是测试有问题,telnet超时,这时候请你联系你的空间商,让他放行25端口。

六 域名解析记录设置

postfix配置完毕,想要经过这台postfis邮件服务器发送的邮件被其余邮箱服务商所接受,还须要作A记录、txt记录还mx记录,请适配你本身的域名和ip地址

 七在第三方服务器上面使用

1,使用sendEmail来发送邮件

用法详见:http://www.cnblogs.com/Dicky-Zhang/p/5982973.html

我简单说点:

和使用qq的有点不同,在这里是直接输入用户名和密码,不是编码后的用户名和密码

2,使用mail或者mailx来来调用邮件服务器发送邮件

须要安装postmail或者sendmail服务,安装方法比较简单,yum就能够了

一些配置以下:

打开配置文件 vim /etc/mail.rc
在最后边添加指定
set from=xxx@xxx.com  (发件人)
set smtp=mail.xxx.com  (邮件服务器)
set smtp-auth-user="xxxx"  (用户名)
set smtp-auth-password="123456"(密码)
set smtp-auth=login

用户名密码不须要编码
保存重启服务  

下面就是测试了,关于mail,mailx用法,点这里http://www.cnblogs.com/Dicky-Zhang/p/6085212.html

八关于白名单问题

我是习惯网qq邮箱里面发邮件,因此要注意设置白名单,自建邮件服务器极可能被当作垃圾邮件,被放到垃圾邮箱了,因此咱们须要设置白名单

打开qq邮箱

而后

这样的话咱们就能够时时刻刻收到咱们的邮件啦

 参考连接:

相关文章
相关标签/搜索