当前位置: 首页 > news >正文

【网络服务数据库教程】08 邮件服务

一、邮件概述

电子邮件服务器是处理邮件交换(收发)的软硬件设施的总称,包括电子邮件程序、电子邮箱等。为用户提供基于E-mail服务的电子邮件系统,人们通过访问服务器实现邮件的交换。

电子邮件的过程与现实生活的寄邮件和收邮件的过程差不多。都会要经过邮局的转接。而邮局的角色就类似于电子邮件服务器

常见的邮件服务器

类型名称特点
服务器端Sendmail资格最古老,运行稳定,但安全性欠佳
Postfix采用模块化设计,在投递效率、稳定性、性能及安全性方面表现优秀,与sendmail保持足够的兼容性。
Qmail采用模块化设计,速度快、执行效率高,配置稍微复杂点
客户端Outlook都是用来收邮件的客户端!
foxmail
浏览器

img

二、邮件应用协议

SMTP 简单邮件传输协议(发邮件)TCP 25端口,加密时使用TCP 465端口

POP3 第三版邮局协议(收邮件)TCP 110端口,加密时使用TCP 995端口

IMAP4 第四版互联网邮件访问协议(收邮件〉TCP 143端口,加密时使用TCP 993端口

img

MUA(Mail User Agent):邮件客户端,功能是向外发送邮件白程序,以及提供用户浏览与编写邮件的功能。

MTA(Mail Transfer Agent):(可以理解为smtpd服务器)帮忙将用户的邮件传递出去或接收进来。进行收发邮件,进行邮件的交换的服务器。

MDA(Mail DeliveryAgent):将接收下来的邮件存放到对应用户邮筒当中的程序。通过分析MTA所收到邮件的表头或内容,来判断此邮件是属于哪个用户,然后决定将此邮件投递给哪个用户的邮筒里。类似于一个分拣过程。

MRA(Mail RetrievalAgent):通过MRA服务器提供的邮政服务协议(POP)来接收自己的邮件

三、软件相关

软件名: Postfix

主目录: /etc/postfix

主配置文件: main.cf

myhostname:邮件服务器主机名

mydomain:邮件域

myorigin:设置允许发信的用户的邮件域

mydestination:设置允许收信的用户的邮件域

四、企业级邮件服务

前提条件:要有一个DNS服务器,将准备好的软件包导入虚拟机

https://www.extmail.cn/

https://mail.extmail.org/

发送方配置

参考网站:https://blog.csdn.net/zcyygyl/article/details/120725124

1 DNS搭建

~ yum install -y bind
~ vim /etc/named.conf
#修改监听地址和访问控制为any
options {
    listen-on port 53 { any; };
    allow-query     { any; };
}

~ vim /etc/named.rfc1912.zones
#使用extmail.org作为解析域,只保留正向解析即可
zone "extmail.org" IN {
    type master;
    file "extmail.localhost";
    allow-update { none; };
};

~ cp -a /var/named/named.localhost /var/named/extmail.localhost
~ vim /var/named/extmail.localhost
#修改数据文件如下:
$TTL 1D
@       IN SOA  extmail.org. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.extmail.org.
        MX 3    mail.extmail.org.
dns     A       10.0.0.40
mail    A       10.0.0.40

~ systemctl enable --now named.service
或者#CentOS 6
~ chkconfig --add named && chkconfig named on && chkconfig named --list
~ service named start

~ nslookup mail.extmail.org.

在另一台上使用nslookup测试dns是否能解析

img

2 安装 gcc 以及其他依赖软件

#CentOS6版本
yum install -y gcc* mysql-server mysql httpd mailx
#CentOS7版本
yum install -y gcc* mariadb-server mariadb httpd mailx

启动MySQL(Apache)并设置开机自启动

service mysqld start && chkconfig mysqld on && chkconfig mysqld --list
service httpd start && chkconfig httpd on && chkconfig httpd --list

systemctl enable --now mysqld 
或者
systemctl enable --now mariadb
systemctl enable --now httpd

3 将 web 页面放到 Apache 的网页目录下

mkdir -p /var/www/extsuite
#创建一个单独的目录
tar -xf extman-1.1.tar.gz -C /var/www/extsuite
tar -xf extmail-1.2.tar.gz -C /var/www/extsuite
#将extmail 和 extman解压到创建的目录中
cd /var/www/extsuite
mv extmail-1.2 extmail
mv extman-1.1 extman
chown -R root.root *
#将两个解压后的目录去掉版本号,并修改文件归属

4 将成品数据库文件导入到 MySQL中(没设置密码,空密码登录)

cd /var/www/extsuite
mysql < ./extman/docs/extmail.sql
#将./extman/docs 中的模板和数据导入到数据库中
vim ./extman/docs/init.sql
INSERT INTO `manager` VALUES ('root@extmail.org' , '123456' , 'admin' , 'root');
#将此文件中该位置的密码修改为123456,切记先修改,在导入
mysql < ./extman/docs/init.sql
#mysql -uroot -p123456 < ./extman/docs/extmail.sql
#mysql -uroot -p123456 < ./extman/docs/init.sql

#或者登录数据库
mysql -uroot -p123456
MariaDB [(none)]> source ./extman/docs/extmail.sql;
MariaDB [(none)]> source ./extman/docs/init.sql;

报错:

若发现数据库版本过高,导入sql文件出现报错,大概率是在sql文件的存储引擎部分,将sql文件的TYPE=MyISAM 改为 ENGINE=MyISAM 即可

5 将邮件模板拷贝到邮件服务器的主目录下

cd /var/www/extsuite/extman/docs
cp -a mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf /etc/postfix/

6 创建映射用户 & 修改配置文件

useradd -u 600 -s /sbin/nologin -c 'Mail User' vmail

vim /etc/postfix/main.cf
inet_interfaces = all					#此行选项取消注释
#inet_interfaces = localhost	#此行选项注释掉
在尾部添加下列内容
#添加指定用户的配置
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:600
virtual_gid_maps = static:600
#添加postfix读取模板文件的配置
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

7 重启服务 & 发送邮件测试 & 查看结果

img

service postfix restart && chkconfig postfix on && chkconfig --list postfix
或者 systemctl restart postfix && systemctl enable postfix

echo "test..." | mail -s mail postmaster@extmail.org
cd /home/vmail/extmail.org/postmaster/Maildir/new
cat 1657026300.V802I540016M478211.CentOS6-Server

img

~ yum -y install telnet
~ telnet mail.extmail.org 25
mail from: root@extmail.org
rcpt to:postmaster@extmail.org  
data
test...
.
quit

img

接收方配置

img

1 安装 dovecot 相关软件

#安装dovecot,dovecot-mysql组件是让两者结合
yum install -y dovecot dovecot-mysql dovecot-devel
chkconfig dovecot on && chkconfig dovecot --list
service dovecot start

2 配置 dovecot 能够去数据库里读数据

1)修改 /etc/dovecot/conf.d/10-mail.conf

在配置文件中增加下列两行

~ vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir 
#定义dovecot查询邮件的位置(顶头写)
first_valid_uid = 600

2)修改 /etc/dovecot/conf.d/10-auth.conf

~ vim /etc/dovecot/conf.d/10-auth.conf
!include auth-sql.conf.ext
#取消调用数据库的记录注释

3)修改数据库连接配置文件(需要拷贝模板生成)

# cp -a /usr/share/doc/dovecot-2.0.9/example-config/dovecot-sql.conf.ext /etc/dovecot/ 
vim dovecot-sql.conf.ext
#将下列内容加入配置文件即可
driver = mysql
#驱动类型
connect = host=localhost dbname=extmail user=extmail password=extmail
#连接数据库的信息
default_pass_scheme = MD5 
password_query = \
  SELECT username, domain, password \
  FROM mailbox WHERE username = '%u' AND domain= '%d'
#验证登录密码的查询命令
user_query = SELECT maildir, 600 AS uid, 600 AS gid FROM mailbox WHERE username = '%u'
#查询虚拟用户对应的邮箱目录

3.重启 dovecot 验证是否能够连接

安装telnet 客户端进行登录验证。

yum install -y telnet
service dovecot restart

telnet mail.extmail.org 110
#使用数据里的用户名和密码,证明连接成功
user postmaster@extmail.org #登录postmaster用户
pass extmail								#密码是extmail
retr 1											#查看第一封邮件

img

MAIL + WEB 页面

1.修改/etc/httpd/conf/httpd.conf 配置文件,能加载邮件 web 页面

~ vim /etc/httpd/conf/httpd.conf
#确认主配置文件加载的模块配置文件位置
IncludeOptional conf.d/*.conf
#修改ServerName
ServerName localhost:80

NameVirtualHost *:80
#取消注释,开启虚拟主机功能
#添加以下内容
<VirtualHost *:80>
      ServerName mail.extmail.org
      DocumentRoot /var/www/extsuite/extmail/html/
      ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
      Alias /extmail /var/www/extsuite/extmail/html
      ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
      Alias /extman /var/www/extsuite/extman/html
      SuexecUserGroup vmail vmail
</VirtualHost>

~ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jun 19 2018 15:45:13
~ httpd -t
Syntax OK
~ service httpd restart

2. extmail目录中更改 cgi的属组属主,让vmail有权限执行

cd /var/www/extsuite/extmail
chown -R vmail.vmail cgi
cp -a webmail.cf.default webmail.cf
vim webmail.cf
     SYS_MAILDIR_BASE = /home/vmail 
     #- 127 行 邮件存放目录
     SYS_MYSQL_USER = extmail 
     #- 139 行 加密类型
     SYS_MYSQL_PASS = extmail
     #- 140 MySQL用户名
     SYS_CRYPT_TYPE = plain 
     #- 136 行 MySQL密码

img

3.extman中更改cgi的属组属主,让 vmail有权限执行

cd /var/www/extsuite/extman
chown -R vmail.vmail cgi
cp -a webman.cf.default webman.cf
vim webman.cf
     SYS_MAILDIR_BASE = /home/vmail 
     #- 12 行
     SYS_SESS_DIR = /tmp/ 
     #- 18 行
     SYS_CRYPT_TYPE = plain 
     #- 124 行
     SYS_CAPTCHA_ON = 0  
     #- 21行,生产环境中开启,实验环境无法现实校验码
     
service httpd restart
#systemctl restart httpd

4.安装Unix-Syslog 软件

解压缩Unix-Syslog-1.1.tar.gz软件

cd ~/extmail
tar -xf Unix-Syslog-1.1.tar.gz
cd Unix-Syslog-1.1
perl Makefile.PL
make && make install
echo $?

5.在浏览器上访问,windows测试需要手动指向dns服务器

将Windows的hosts文件添加对应的解析即可

10.0.0.40 mail.extmail.org

浏览器地址栏输入:http://mail.extmail.org 显示该页面即完成实验

img

img

echo "Hello,Extmail" | mail -s "Hello" postmaster@extmail.org

img

登录邮件后台管理系统

用户名:root@extmail.org

密码:123456

img

img

相关文章:

  • python 经典案例(3)
  • [Python从零到壹] 五十三.图像增强及运算篇之直方图均衡化处理
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • 二十三.基于国民MCU 的MCO模块的分析
  • php计算机毕业设计基于thinkphp框架的特色旅游网站vue
  • 开学季:好好聊聊自己的大学生活
  • java评论、回复功能设计和实现
  • IPIDEA的使用方式
  • 【机器学习笔记】【决策树】【回归树】
  • IDEA版Postman插件Restful Fast Request,细节到位,功能好用
  • jmeter-12-Jenkins持续集成测试一键式使用
  • 9月10日OpenCV学习笔记——Mask、彩色直方图、人脸检测
  • 【JavaWeb】一篇文章复习JDBC、DAO及相关实现类
  • java计算机毕业设计ssm 音乐播放交流论坛网站
  • GO开发环境配置
  • go append函数以及写入
  • JavaScript类型识别
  • Java知识点总结(JavaIO-打印流)
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • magento2项目上线注意事项
  • ReactNativeweexDeviceOne对比
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Transformer-XL: Unleashing the Potential of Attention Models
  • VuePress 静态网站生成
  • 使用docker-compose进行多节点部署
  • 微信公众号开发小记——5.python微信红包
  • 阿里云API、SDK和CLI应用实践方案
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #Z0458. 树的中心2
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)fiber的基本认识
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (三十五)大数据实战——Superset可视化平台搭建
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原)Matlab的svmtrain和svmclassify
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net6+aspose.words导出word并转pdf
  • .NET轻量级ORM组件Dapper葵花宝典
  • .Net中wcf服务生成及调用
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • ::
  • @PreAuthorize注解
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [AAuto]给百宝箱增加娱乐功能