[RHEL] RHEL7.0 下 Postfix + Dovecot 实现邮件发送
RHEL7.0 下 Postfix + Dovecot 实现邮件发送
一、前言
大家都对邮件服务(mail service)很感兴趣嘛。我在自己 博客站 预言了自己会实战一次,访问量一天到十几(毕竟平常一篇写好的文章几天后才有十几的阅读量)。
那么我们就开始吧,讲下几个流程。
- 什么是邮件服务
- 相关服务协议
- 套件解决方案
- 搭建流程
- 配置DNS服务(仅演示)
- 配置postfix
- 配合dovect
- 服务测试
- 几种测试工具
- 测试方法思路
- 其他
二、介绍
了解:什么是邮件服务
电子邮件,又称电子邮箱,简称电邮,是指一种由一寄件人将数字信息发送给一个人或多个人的信息交换方式,一般会通过互联网或其他电脑网络进行书写、发送和接收信件,目的是达成发信人和收信人之间的信息交互。一些早期的电子邮件需要寄件人和收件人同时在线,类似即时通信。

当你需要发送邮件的时候。Client 与Mail Server开始建立通信,后者帮助该邮件进行投送(DNS query And Router send)。
提示:在上图中,我将Server的俩个协议拆开了。一是方便下文进行介绍,二个其实也可以做中心化管理。即:Server仅将邮件中继至smtp邮件服务器,查询时候去imap查找或直接位于imap服务器中进行查看。但本文还是全部做在一次,非中心化解决方案(架构师)。
代理:Email agent
- MTA Mail Transport Agent
- MDA Mail Delivery Agent
- MUA Mail User Agent

怎么理解这件事情呢?那我们现实世界快递做比喻。
Mail Transport Agent:邮件运送代理,可以理解为快递小哥从 MUA 手里接到了快递。
Mail Delivery Agent:邮件投递代理,理解为经传多名快递小哥,终于到达你家小区的邮递箱。
Mail User Agent:邮件用户代理(user agent -> UA),这封信是由寄件人寄出的,现在收件人要收件了。
大致是这样的一个过程。我在网上找到一张图,分享下:

协议:邮件服务协议
在MTA中有这个协议:
简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是事实上的在Internet传输email的标准。
SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
在MDA中有这俩个协议:

- POP3(邮局协议),两者中较老的一种,用于检索电子邮件,并在某些情况下将其副本留在服务器上。
- IMAP(互联网信息访问协议),用于协调多个电子邮件客户端的电子邮件状态(读取,删除,移动)。使用IMAP,每条消息的副本都会保存在服务器上,以便完成此同步任务。
刚刚说了MUA,那么就不能说是协议了。那是一个工具了:
- 微软的Outlook
- 网易的邮件大师
- 腾讯的Q邮
- webmail
三、套件解决方案
Postfix:
- Postfix 是 RHEL7 的默认邮件服务器
- Poxtfix 易于配置,主配置文件为/etc/postfix/main.cf
- BTW:查看邮件队列 postqueue -q,清空队列 postqueue -f
Dovecot:
- 一个IMAP和POP3服务器
- 支持本地递送代理
四、搭建流程
1、搭建 DNS 服务

注意:如果出现,“*** Can't find 137.80.168.192.in-addr.arpa.: No answer”
解决:检查 “named.conf” 中反向解析中的 “80.136.192.in-addr-arpa” 是否正确。
2、添加 MX 记录
[root@dns named]# tail 137.80.168.192.in-addr.arpa example.com.zone
==> 137.80.168.192.in-addr.arpa <==
20171125; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS dns.example.com.
137 IN MX 5 dns.example.com.
137 IN MX 10 dns.example.com.
137 IN PTR dns.example.com.
137 IN PTR mail.example.com.
==> example.com.zone <==
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS dns.example.com.
dns IN A 192.168.80.137
mail IN A 192.168.80.137
mail IN MX 5 192.168.80.137
mail IN MX 10 192.168.80.137
[root@dns named]#
3、配置 postfix
postconf -e "inet_interfaces = all"
postconf -e "mynetworks = 127.0.0.0/8 168.100.189.0/28 [::1]/128"
• 使 postfix 处理全网邮件:
postconf -e "myorigin = example.com"
• 使 postfix 将发件人统一标示为公司域
postconf -e "mydestination = example.com" /* 留空则不接收邮件 */
postconf -e "local_transport=error: local delivery disabled"
• 禁止 postfix 投递邮件到本地账户

4、配置 dovect
未完,请保存本页。不定期更新
参考
CCM论坛:Funzionamento della posta elettronica (MTA, MDA, MUA)
[RHEL] RHEL7.0 下 Postfix + Dovecot 实现邮件发送的更多相关文章
- RHEL6.4 postfix+dovecot搭建邮件服务器
实验需求:为公司搭建一台能够收信和发信的邮件服务器(192.168.100.1),为员工提供服务,公司域名为jinjianjun.com. 一.修改DNS服务器(192.168.100.2)上mx邮件 ...
- CentOS 64位下安装Postfix+Dovecot 配置邮件server笔记
Postfix 和Dovecot功能确实非常强大,支持各种认证方式, 配置非常灵活, 就由于太过于灵活, 反而安装配置的过程中,easy有各种各样的陷阱,碰到问题了. 日志是最好的解决的方法了. ...
- SpringBoot | 第二十六章:邮件发送
前言 讲解了日志相关的知识点后.今天来点相对简单的,一般上,我们在开发一些注册功能.发送验证码或者订单服务时,都会通过短信或者邮件的方式通知消费者,注册或者订单的相关信息.而且基本上邮件的内容都是模版 ...
- spring 5.x 系列第20篇 ——spring简单邮件、附件邮件、内嵌资源邮件、模板邮件发送 (代码配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 邮件发送配置类为com.heibaiyin ...
- Linux系统下邮件服务器的搭建(Postfix+Dovecot)
对于网站来说,发送各种例如注册通知的邮件是很基本的一个需求,之前我一直用的是腾讯的企业邮箱,感觉挺方便的,直接可以绑定QQ邮箱接收邮件,网站配置一下SMTP也就可以发出邮件. 但是在前几天由于有重要信 ...
- Postfix+Dovecot+MySQL搭建邮件服务器
网上有很多使用Postfix搭建邮件服务器的文章,但目前貌似没有看到较为完整的一篇.本例将尝试在Ubuntu系统中使用Postfix+Dovecot+MySQL搭建邮件服务器. 说到邮件服务器,网上有 ...
- CentOS下使用Postfix + Dovecot + Dnsmasq搭建极简局域网邮件系统
背景 开发环境为局域网,工作内容需要经常查看邮件文件(*.eml),可恶的Foxmail必须验证账户才能进入主界面,才能打开eml文件查看. 无奈搭一个局域网内的邮件系统吧.极简搭建,仅用于通过Fox ...
- postfix+dovecot配置多域名邮件服务器
mail邮局系统的MX(邮件交换)记录配置,以便收发邮件.(MX记录,是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器,如果没有做域名解析,邮局不能正 ...
- centos6.8 搭建postfix/dovecot邮件服务器
postfix/dovecot邮件服务器 安装配置参考链接 http://www.cnblogs.com/jkklearn/p/7280045.html (domain 为自己域名 xxx.com) ...
随机推荐
- IronPython Architecture
[IronPython] IronPython is an implementation of the Python programming language written by the CLR t ...
- Python3 abs() 函数
Python3 abs() 函数 Python3 数字 描述 abs() 函数返回数字的绝对值. 语法 以下是 abs() 方法的语法: abs( x ) 参数 x -- 数值表达式,可以是整数,浮 ...
- 6-Collision-hdu5114(小球碰撞)
Collision Time Limit: 15000/15000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Tot ...
- php通过反射执行某方法
简单记录下通过反射来获取某方法的参数,然后利用php内置函数类执行此方法 一个简单的test类 class test { //2个参数默认值 public function b($name='lemo ...
- Linux汇编与C互相调用
一.简介 C语言调用汇编有两种方式:1.通过内嵌汇编 2.通过编译链接. 二.基础知识 对于C和汇编语言的接口主要有两个问题需要解决 1.调用者与被调用者的参数传递 正常的,定义一个函数总是希望它完 ...
- loadrunner--步长(Pacing)的设置及作用
Pacing时间的设置需要根据使用您系统的用户的行为来决定. 如果您那边的用户在您的系统上做完一套操作后不会做下一套,则可能不需使用Pacing. 如果您那边用户在系统上需要不断地做同样的操作,比如他 ...
- java 对象直接序列化
序列化类,加字段后, 使用该类从现有文件反序列化时,以前字段可以正常读出 但是反序列化后,那些未对应字段会被设置成null ,即使在类的定义种已设置了初始值 --------------------- ...
- mongo find
MongoVUE 对应成语句,结构如下: db.logs.find({ "message" : /消息/ }, { "message" : 1 }).limit ...
- SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法
SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法 将以下代码存为OpenSqlServerPort.bat文件: netsh advfirewall firewall a ...
- Linux 基础教程 38-文件下载
什么是wget wget用原始帮助里面的英文来讲就是:The non-interactive network downloader,非交互式网络下载器.它支持HTTP.HTTPS.FTP等协议 ...