CentOS6.5_64位系统下安装配置postfix邮件系统 启用并配置SMTP在第三方上边使用发送邮件
一前言
本来使用qq邮箱发送邮件,然后借助sendEmail来发送邮件告警,但是有每天的200封限制,很是不爽,于是想到来自己搭建邮件服务器来解决这个问题,关于使用sendEmail来借助qq邮箱来发送邮件详见http://www.cnblogs.com/Dicky-Zhang/p/5982973.html,在做这个之前,在网上查找了很多资料,发现很是混乱,不成一体,拼拼凑凑,根本无法使用,所以记录下来,方便后来人使用。
在做postfix之前,我成功搭建了iredmail,一个强大的开源系统。稍后会另外一篇文章来写下过程,供大家参考。
说明下
关于阿里云做邮件系统的问题,阿里云对25端口做了限制,即使你做好了,在第三方服务器上可能都无法使用,在本机上我做好了,都无法使用。对于青云系统,默认是没有对外开放25端口,这里的对外开放不是服务器里面,你需要在后台去开放25端口,不然你在外部服务器去连接这台做好的服务器的时候会提示超时,对于国外的服务器我倒是没测试,我认为应该不会做限制。好了,不多说了,开始正题
解释几个名词
- 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。
一般发邮件的步骤流程是:
1、MUA通过POP、IMAP或SMTP协议连接MTA(称之为mta1);本文之中php通过phpmailer请求发送邮件的php脚本就扮演了MUA的角色,而postfix就是MTA;
2、MUA发送邮件给mta1(或者说MUA通过mta1发送邮件);本文中postfix就是这个mta1;
3、mta1与其他的MTA自主沟通连接将邮件传送至指定域下的指定用户(此时mta1就扮演了MUA的角色功能,这种交互是由邮件系统软件自主实现,与用户端无关)。
本次搭建postfix目的很明确:
- 用于php开发的web环境下新用户注册时发送验证码邮件---php下通过phpmailer类库的smtp协议链接postfix来发送邮件。
- web环境与postfix在同一台CentOs6.5(64位)系统下,postfix不对外提供smtp亦不转发外部MUA邮件,仅转发(或发送)web环境下(MUA)的邮件,也就是仅转发本机(或者说本域)邮件。同时也不接收其他MTA的邮件(也就是说不接受他人发过来的邮件)。
- 本文就不介绍postfix、sasldb2、saslauthd等软件了,网上一大把
二 postfix的安装
yum remove sendmail #卸载sendmail
yum remmove postfix #卸载postfix
yum install postfix #重新安装postfix
#yum安装会自动建立postfix用户组和用户名
yum install crontabs #因为卸载postfix的时候系统定时服务也被卸载 核心服务 也同步安装
使用sasldb、saslauthd来生成smtp虚拟账号
安装
yum install cyrus-sasl* #提供smtp的虚拟账户和密码服务
#sasldb2包含在saslauthd当中 就不要再问为什么没有安装sasldb2的shell代码了
#当前mta查看
alternatives --display mta
#设置mta
/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix
#再次查看mta
alternatives --display mta
#输出结果最后一行会有类似如下的提示:mta即设置完毕
#Current `best' version is /usr/sbin/sendmail.postfix.
postfix开机启动设置,因为采用sasldb2提供postfix的smtp账户和密码,无需saslauthd服务运行,故而saslauthd服务不用启动,使用sasldb2还减少资源占用:
chkconfig postfix on
三 postfix配置并启用smtp
postfix配置文件在/etc/postfix目录下,主要修改的配置文件为:/etc/postfix/main.cf,配置说明详见代码段
vi /etc/postfix/main.cf #vi编辑postfix配置文件
#找到如下配置项酌情修改
######
myhostname = mail.xxx.com.cn
#postfix主机名,修改成你的域名 此项需要添加A记录并指向postfix所在主机公网IP
mydomain = xxx.com.cn
#域名
myorigin = $mydomain
#本机postfix的邮箱域名后最 此项默认值使用myhostname
#此处使用了前项mydomain 也就是说本机postfix邮箱后缀为:@xxx.com.cn
inet_interfaces = all
#指定postfix系统监听的网络接口 此处必须是localhost或127.0.0.1或内网ip
#若注释或填入公网ip 服务器的25端口将对公网开放
#默认值为all 即监听所有网络接口
#此项指定localhost后 本机postfix就只能发邮件不能接收邮件
inet_protocols = ipv4
#网络协议 ipv6在国内还不怎么普及 这里ipv4即可
mydestination = $myhostname, localhost.$mydomain, localhost
#指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix系统要接收什么样的邮件。
#此项配置中$myhostname表示postfix接受@$myhostname为后缀的邮箱的邮件 逗号分割支持指多项
#此项默认值使用myhostname
local_recipient_maps =
#此项制定接收邮件的规则 可以是hash文件 此项对本次配置无意义 可以直接注释
mynetworks = x.x.x.x
#指定你所在的网络的网络地址
#最好加上你要在第三方上使用的服务器,不加的话可能无法使用在第三方上面
#请依据实际情况修改
smtpd_banner = JJonline.Cn ESMTP Server
#指定MUA通过smtp连接postfix时返回的header头信息
#原始配置附带有postfix版本号 去掉即可,此项酌情处理
#SMTP Config
broken_sasl_auth_clients = yes
#指定postfix兼容MUA使用不规则的smtp协议--主要针对老版本的outlook 此项对于本次配置无意义
smtpd_client_restrictions = permit_sasl_authenticated
#指定可以向postfix发起SMTP连接的客户端的主机名或ip地址
#此处permit_sasl_authenticated意思是允许通过sasl认证(也就是smtp链接时通过了账号、密码效验的用户)的所有用户
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
#发件人在执行RCPT TO命令时提供的地址进行限制规则 此处照搬复制即可
smtpd_sasl_auth_enable = yes
#指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行账号、密码效验
smtpd_sasl_local_domain = $mydomain
#指定SMTP认证的本地域名 本次配置可以使用 smtpd_sasl_local_domain = '' 或干脆注释掉 默认为空
smtpd_sasl_security_options = noanonymous
#取消smtp的匿名登录 此项默认值为noanonymous smtp若能匿名登录危害非常大 此项请务必指定为noanonymous
message_size_limit =
#指定通过postfix发送邮件的体积大小 此处表示5M
######
查看postfix配置文件的所有配置项:
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
#测试postfix配置文件
service postfix check
#没有问题的话会返回着色[ok]字样
#启动postfix
service postfix start
#设置postfix开机启动
chkconfig postfix on
#更改sasldb2数据的权限,让postfix可以读取
chmod /etc/sasldb2
五 测试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
#若没安装telnet 需安装telnet
yum install telnet #telnet测试smtp连接postfix
telnet 127.0.0.1 #回车后会显示由$smtpd_banner配置的欢迎信息
EHLO jjonline #输入ehlo消息头进行握手 消息返回后继续
AUTH LOGIN #要求进行smtp账号密码效验
返回后输入test的base64编码,是test而不是test@xxx.com.cn
#返回后输入test123密码的编码 也是base64编码
#回车后就会显示smtp效验成功 接下来还可以测试发送邮件功能 本文就不再做示例了 #注意 要退出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=""(密码)
set smtp-auth=login 用户名密码不需要编码
保存重启服务
下面就是测试了,关于mail,mailx用法,点这里http://www.cnblogs.com/Dicky-Zhang/p/6085212.html
八关于白名单问题
我是习惯网qq邮箱里面发邮件,所以要注意设置白名单,自建邮件服务器很可能被当做垃圾邮件,被放到垃圾邮箱了,所以我们需要设置白名单
打开qq邮箱
然后
这样的话我们就可以时时刻刻收到我们的邮件啦
参考链接:
CentOS6.5_64位系统下安装配置postfix邮件系统 启用并配置SMTP在第三方上边使用发送邮件的更多相关文章
- CentOS6.5_64位系统下安装配置postfix邮件系统 启用并配置SMTP虚拟账户
http://blog.jjonline.cn/linux/185.html http://www.cnblogs.com/apexchu/p/4271264.html 用户新增和删除 http:// ...
- Centos6.5_64位系统下安装Oracle 11g
一.硬件要求 1.内存与Sweap:内存2G(以上),Sweap 2G(以上) 内存: 1-2G 2-16G 16G以上 Sweap: 1.5倍内存 1倍内存 16G 检查:# grep MemTot ...
- win8 64位系统,安装JDK的步骤及其环境配置
工具/原料 jdk-8u51-windows-x64.exe 下载地址:::http://www.cr173.com/soft/55503.html#address jdk 安装步骤 1:到oracl ...
- win7 64位系统下安装autoitlibrary库遇到问题解决
转载来自http://blog.sina.com.cn/s/blog_53f023270101skyq.html 今天需要在win7 64位系统下安装autoitlibrary库,起初安装好了robo ...
- Linux系统下安装Redis和Redis集群配置
Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...
- win10_64位系统下安装ALM12.01(QC),笔者只在Win10平台上试过,大家也可以在win7的平台上试一下,一个道理!(Alpha)
HP的ALM是一个非常全面的缺陷管理系统,但安装学习的非常的麻烦,以前学的是ALM,好久没用带今天想学习一下发现安装的非常的困难 !发现网上对ALM的系统安装的介绍非常少,也非常琐碎!今天就借着自己学 ...
- 虚机Linux最小系统下安装图形界面,与yum配置
出于未知原因,想装一下. 因为有光盘,所以就从光盘安装就可以了. 首先是配置yum下的下载地址: 找到yum的地址,然后打开文件. 然后建立该文件的/media/cdrom路径.将光盘挂载到该路径下. ...
- Linux中CentOS6.5 64位 系统下安装docker步骤
CentOS6.5 64位 (docker目前仅支持64位)内核必须在3.10及以上 1. uname -r 查看内核版本 2. 升级内核到3.10版本(带aufs模块) cd /etc ...
- Windows 64位系统下安装JAVA环境
文件名称:jdk-7u51-windows-x64 下载Windows 64位平台的JDK安装文件. 安装 1.双击打开下载好的文件,点击“下一步”开始安装. 2. ①默认选择安装全部功能,不做调整. ...
随机推荐
- Android自定义控件7--自定义开关--绘制界面内容
本文实现全自定义控件--自定义开关 本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址. 自定义开关 (View),本文完成下面内 ...
- Intent的七大组件——Android开发之路5
------Intent------ Android中三个核心组件——Activity.Services.BroadCastProvider都是通过Intent传递参数. startActivity( ...
- 在数组中找出x+y+z=0的组合
就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlo ...
- ORACLE参数max_shared_servers空值与零的区别
ORACLE数据库中的参数max_shared_servers,这是一个DBA很熟悉的参数,但是这个参数max_shared_servers为空值与为0有区别吗?这个细节可能很多人都没有注意过.如下所 ...
- 功能强大而又简单易学的编程语言Python
Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大的通用型语言.首先,Python非常简单,以Hello World为例: Java的Hello World程序一般这么写: pub ...
- 使用管道符在PowerShell中进行各种数据操作
最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下. 无论是在Linux中写Bash脚本还是在Window上 ...
- SQL Server 查询树结构的表,查询一个节点的所有子节点
;with cte as ( select * from Associator where No = 'mc1007' union all select air.* from Associator a ...
- MongoDB学习笔记~管道中的分组实现group+distinct
回到目录 mongoDB的管道是个好东西,它可以将很多操作批处理实现,即将多个命令放入一个管道,然后去顺序的执行它们,今天我要说的是,利用管道中的分组来实现实现中的ditinct+group的效果,即 ...
- C++基础——模拟事务 (2)Composite模式
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- WPF 自定义CheckBox
WPF中原始的CheckBox样式很简单,有时候不适用于WPF那种炫酷的界面. 本章节讲述如何设计一个匹配业务需要.好看的CheckBox(继上篇<WPF-自定义ListBox>中的Che ...