第15章 使用Postfix与Dovecot收发电子邮件
章节概述:
本章节从电子邮局系统的组成角色开始讲起,了解MUA、MTA与MDA的作用,熟悉熟悉SMTP、POP3与IMAP4邮局协议。
学习postfix与dovecot服务程序的使用方法并逐条讲解配置参数,完整演示了部署基础电子邮局系统以及设置用户别名邮箱的方法。
本章目录结构
15.1 电子邮局系统
1971年由美国国防部资助的的ARPANET科研项目遇到了严峻问题——参于科研项目的科学家在不同的地方工作,不能及时的分享各自的研究成果,迫切的需要一种能够借助于网络且建立在计算机之间的传输数据的方法。 当时麻省理工学院Ray Tomlinson博士也是ARPANET项目的科研成员,当年秋天他使用软件SNDMSG向自己另一台电脑发出了人类历史上第一封Email邮件。
Ray Tomlinson博士决定选择"@"符号作为用户名与主机地址的间隔符。
邮件应用协议包括:
简单邮件传输协议(SMTP),用来发送或中转发出的电子邮件,占用tcp 25端口。
第三版邮局协议(POP3),用于将服务器上把邮件存储到本地主机,占用tcp 110端口。
第四版互联网信息访问协议(IMAP4),用于在本地主机上访问邮件,占用tcp 143端口。
电子邮件系统(E-mail,即Electronic mail system)由三部分组成:
用户代理MUA(Mail User Agent):用于收发邮件。
邮件传输代理MTA(Mail Transfer Agent):将来自于MUA的邮件转发给指定用户。
邮件投递代理MDA(Mail Delivery Agent):将来自于MTA的邮件保存到本机的收件箱中。
电子邮件系统与大多数的网络应用协议有本质的不同,例如前面讲过的文本传输协议(FTP),FTP服务程序就像拨打电话一样,需要对方当前也保持在线,否则会报错连接超时。但电子邮件的发送者则并不需要等待投递工作完成,因为如果对方服务器宕机了,则会将要发送的内容自动的暂时保存到本地,检测到对方服务器恢复后再次投递。另外如果您想搭建企业级的电子邮件系统,请考虑下面几点:
反垃圾与反病毒模块:阻止垃圾邮件或病毒邮件对企业邮箱的干扰。邮件加密:保证邮件内容不被嗅探、篡改。邮件监控审核:监控全体职员邮件中有无敏感词,透露企业资料等。稳定性:有较好的防DDOS攻击的能力,保证系统在线率等。
15.2 部署基础电子邮局系统
单独的使用Postfix服务程序并不能让用户完成收发邮件的操作,因为一个基础的电子邮局系统至少需要有SMTP服务器、POP3/IMAP服务器,为了能够部署一个基础的电子邮局系统,我们需要使用到下面的软件:
Postfix:提供邮件发送服务,即SMTP。
Dovecot:提供邮件收取服务,即POP3。
OutLook Express:客户端收发邮件的工具。

Postfix(发送邮件)+Dovectot(接收邮件)+OutLook(客户端工具)
配置本地主机名
修改本地主机名的配置文件:
[root@linuxprobe ~] # vim /etc/hostname
mail.linuxprobe.com
[root@mail~] # hostname
mail.linuxprobe.com
若要为用户提供linuxprobe域的电子邮局系统,则需先在DNS服务器中增加A记录和MX记录:
@ IN MX 10 mail.linuxprobe.com.
mail IN A 192.168.10.10
这样配置解析记录后,主机名即为mail.linuxprobe.com,而邮件域为@linuxprobe.com。 
(请读者自行使用nmtui工具将网卡的DNS地址配置妥当即可)
15.2.1 配置Postfix服务程序
Postfix是一款由IBM出资研发的免费开源的邮局服务程序,兼容于Sendmail服务程序,即Sendmail用户可以很方便的迁移到Postfix程序,且收发件性能远超过Sendmail,能够自动增加减少进程的数量,保证邮局系统的高性能与稳定性,另外Postfix是由诸多的小模块组成,每个小模块完成特定的功能,使得管理员可以灵活的组合这些模块。
停止iptables防火墙:
[root@linuxprobe ~]# systemctl disable iptables
红帽RHEL7系统中默认已安装postfix邮局服务程序:
[root@linuxprobe ~]# yum install postfix
Loaded plugins: langpacks, product-id, subscription-manager
rhel7 | 4.1 kB 00:00
(1/2): rhel7/group_gz | 134 kB 00:00
(2/2): rhel7/primary_db | 3.4 MB 00:00
Package 2:postfix-2.10.1-6.el7.x86_64 already installed and latest version
Nothing to do
Postfix邮局服务程序的配置文件如下:
| 文件 | 作用 |
| /usr/sbin/postfix | 主服务程序 |
| /etc/postfix/master.cf | master主程序的配置文件。 |
| /etc/postfix/main.cf | postfix服务的配置文件。 |
| /var/log/maillog | 记录邮件传递过程的日志。 |
第1步:查看Postfix服务程序主配置文件:
[root@mail~]# cat /etc/postfix/main.cf
配置文件足足有679行!但不用担心,绝大部分都是注释信息,我们只学习这些参数即可:
| 参数 | 作用 |
| myhostname | 邮局系统的主机名。 |
| mydomain | 邮局系统的域名。 |
| myorigin | 从本机寄出邮件的域名名称。 |
| inet_interfaces | 监听的网卡接口。 |
| mydestination | 可接收邮件的主机名或域名。 |
| mynetworks | 设置可转发那些主机的邮件。 |
| relay_domains | 设置可转发那些网域的邮件 |
编辑Postfix服务程序的主配置文件(修改5处参数,另外需要将参数前面的井号(#)去掉才可生效):
[root@mail~] # vim /etc/postfix/main.cf
//修改第76行的邮局主机名。
myhostname = mail.linuxprobe.com
//修改第83行的邮局域名。
mydomain = linuxprobe.com
//修改第99行的寄出邮件域名,$mydomain的值已在上面定义。
myorigin = $mydomain
//修改第116行的监听网卡。
inet_interfaces = all
//修改第164行的可接收邮件的主机名和域名。
mydestination = $myhostname, $mydomain
第2步:创建邮局帐号:
[root@mail~] # useradd boss
[root@mail~] # echo "linuxprobe" | passwd --stdin boss
Changing password for user boss. passwd: all authentication tokens updated successfully.
第3步:启动Postfix服务程序:
[root@mail~] # systemctl restart postfix
[root@mail~] # systemctl enable postfix
ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/postfix.service'
因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。
所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable postfix“。
15.2.2 配置Dovecot服务程序
第1步:安装Dovecot服务程序:
[root@mail~] # yum install dovecot -y
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程………………
Installing: dovecot x86_64 1:2.2.10-4.el7 rhel7 3.2 M
Installing for dependencies: clucene-core x86_64 2.3.3.4-11.el7 rhel7 528 k
………………省略部分安装过程………………
Complete!
第2步:修改Dovecot程序主配置文件:
[root@mail~] # vim /etc/dovecot/dovecot.conf
//修改第24行的支持邮局协议。
protocols = imap pop3 lmtp
//然后追加允许明文认证(25行)。
disable_plaintext_auth = no
//修改第48行的允许登陆网段地址,全部允许即为(0.0.0.0/0)。
login_trusted_networks = 192.168.10.0/24
第3步:配置邮件的格式与存储路径。<
编辑dovecot的配置文件(将第25行的注释符(#号)去掉):
[root@mail~] # vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
第4步:创建邮件的存储目录:
[root@mail~] # su - boss
Last login: Sat Aug 15 16:15:58 CST 2015 on pts/1
[boss@mail ~]$ mkdir -p mail/.imap/INBOX
第5步:启动Dovecot服务程序:
[root@mail~] # systemctl enable dovecot
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'
因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。
所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable dovcot“。
15.2.3 用户使用邮局系统
您可以在《软件资源库》下载到Windows7系统以及OutLook2007邮件管理工具,系统网卡请按要求配置IP地址:
| 主机名称 | 操作系统 | IP地址 |
| 邮局服务器 | 红帽RHEL7操作系统 | 192.168.10.10 |
| DNS服务器 | 红帽RHEL7操作系统 | 192.168.10.20 |
| 用户端主机 | 微软Windows7系统 |
在outlook中登陆boss用户后尝试给root@linuxprobe.com发送邮件。
第1步:开启OutLook程序。
第2步:选择开始配置电子邮件帐户。
第3步:选择默认的邮局服务器类型。
第4步:填写创建的邮箱帐号和密码。
第5步:等待连接邮局服务器。
第6步:选择非加密的链接方式。
第7步:在页面上邮件,选择“新邮件”。
第8步:填写收件人与邮件内容后发送。
登陆到邮局服务器(192.168.10.10)后查看root用户的邮件:
[root@mail~] # mail
Heirloom Mail version 12.5 7/5/10.Type ? for help.
"/var/mail/root": 3 messages 3 unread >
U 1 user@localhost.com Fri Jul 10 09:58 1631/123113 "[abrt] full crash r"
U 2 Anacron Sat Aug 15 13:33 18/624 "Anacron job 'cron.dai"
U 3 boss Sat Aug 15 19:02 118/3604 "Hello~"
&> 3
Message 3:
From boss@linuxprobe.com Sat Aug 15 19:02:06 2015
Return-Path:
X-Original-To: root@linuxprobe.com
Delivered-To: root@linuxprobe.com
From: "boss"
To:
Subject: Hello~
Date: Sat, 15 Aug 2015 19:02:06 +0800
Content-Type: text/plain; charset="gb2312"
当您收到这封邮件时,证明我的邮局系统实验已经成功!
> quit
Held 3 messages in /var/mail/root
第15章 使用Postfix与Dovecot收发电子邮件的更多相关文章
- 使用Postfix和Dovecot收发电子邮件
邮件应用协议包括: 简单邮件传输协议(SMTP),用来发送或中转发出的电子邮件,占用tcp 25端口. 第三版邮局协议(POP3),用于将服务器上把邮件存储到本地主机,占用tcp 110端口. 第四版 ...
- 搭建邮件服务器,使用Postfix与Dovecot收发电子邮件
小知识: 我们为什么要搭建邮件服务器呢?有时候我们处于一个局域网内,不能及时的分享各自的研究成果,迫切的需要一种能够借助于网络且建立在计算机之间的传输数据的方法.所以我们需要搭建邮件服务器,这样的话既 ...
- 使用Postfix与Dovecot收发电子邮件(物理机虚拟机之间)
邮件应用协议包括: 简单邮件传输协议(SMTP),用来发送或中转发出的电子邮件,占用tcp 25端口. 第三版邮局协议(POP3),用于将服务器上把邮件存储到本地主机,占用tcp 110端口. 第四版 ...
- 《linux就该这么学》第十五节课:第14,15章,dhcp服务和邮件系统
(借鉴请改动) 13章收尾 13.6.分离解析技术 1.在主配置文件中改两个any 2.编辑区域配置文件,写入acl,使用match匹配 ...
- linux入门系列17--邮件系统之Postfix和Dovecot
前文演示了通过Samba和NFS实现文件共享,本篇演示使用Postfix和Dovecot在局域网实现电子邮件收发系统. 电子邮件系统是我们日常生活和工作中非常重要的一个网络服务,在windows下收发 ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- 【RL-TCPnet网络教程】第15章 RL-TCPnet之创建多个TCP连接
第15章 RL-TCPnet之创建多个TCP连接 本章节为大家讲解RL-TCPnet的TCP多客户端实现,因为多客户端在实际项目中用到的地方还挺多,所以我们也专门开启一个章节做讲解.另外,学习 ...
- PostFix使用dovecot支持POP3/IMAP收信
PostFix只能够收发邮件,以及使用SMTP发送邮件,想要使用POP3/IMAP收信的话必须装其他软件,本文通过配置dovecot让邮件服务器支持POP3/IMAP收信.POP3/IMAP是一种收信 ...
- 邮件系统之Postfix与Dovecot
电子邮件系统 电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有: 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件, ...
随机推荐
- php 利用socket发送GET,POST请求
作为php程序员一定会接触http协议,也只有深入了解http协议,编程水平才会更进一步.最近我一直在学习php的关于http的编程,许多东西恍然大悟,受益匪浅.希望分享给大家.本文需要有一定http ...
- jQuery ajax - get(),getJSON(),post()方法
1) jQuery ajax - get() 方法: $(selector).get(url,data,success(response,status,xhr),dataType) 参数 ...
- NLP的两种工具的java版使用:复旦FudanNLP,中科院计算所ICTCLAS2013
编程语言:java 三种工具的简要介绍: FudanNLP google project上的介绍是: FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集 ...
- JPanel设置图片
package com.gr.db; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class We ...
- 【HTTP劫持和DNS劫持】腾讯的实际业务分析
简单介绍一下HTTP劫持和DNS劫持的概念,也就是运营商通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西. 首先对运营商的劫持行为做一些分析,他们的目的无非 ...
- strcmp的实现
注意,*str1++和*str2++最好不要写在while判断里,否则需要在return前再*str1-1,和*str2-1. int strcmp(const char *str1,const ch ...
- Java编程思想学习(十四) 枚举
关键字enum可以将一组具名的值有限集合创建一种为新的类型,而这些具名的值可以作为常规的程序组件使用. 基本enum特性 调用enum的values()方法可以遍历enum实例,values()方法返 ...
- Java编程思想学习(十二) 数组和容器
一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...
- 浅谈Logistic回归及过拟合
判断学习速率是否合适?每步都下降即可.这篇先不整理吧... 这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法.啥叫正统呢?我概念里面机器学习算法一般是这 ...
- IOS基础之 (十一) 内存管理 ARC
一 内存管理 1. set 方法内存管理的相关参数 retain: release旧值,retain新值(值适用于OC对象) assign:直接赋值(set方法默认,适用于非OC对象类型,即基本数据类 ...