电子邮件服务器是处理邮件交换(收发)的软硬件设施的总称,包括电子邮件程序、电子邮箱等。为用户提供基于E-mail服务的电子邮件系统,人们通过访问服务器实现邮件的交换。
电子邮件的过程与现实生活的寄邮件和收邮件的过程差不多。都会要经过邮局的转接。而邮局的角色就类似于电子邮件服务器
常见的邮件服务器
类型 | 名称 | 特点 |
---|---|---|
服务器端 | Sendmail | 资格最古老,运行稳定,但安全性欠佳 |
Postfix | 采用模块化设计,在投递效率、稳定性、性能及安全性方面表现优秀,与sendmail保持足够的兼容性。 | |
Qmail | 采用模块化设计,速度快、执行效率高,配置稍微复杂点 | |
客户端 | Outlook | 都是用来收邮件的客户端! |
foxmail | ||
浏览器 |
SMTP 简单邮件传输协议(发邮件)TCP 25端口,加密时使用TCP 465端口
POP3 第三版邮局协议(收邮件)TCP 110端口,加密时使用TCP 995端口
IMAP4 第四版互联网邮件访问协议(收邮件〉TCP 143端口,加密时使用TCP 993端口
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
~ 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是否能解析
#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
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 *
#将两个解压后的目录去掉版本号,并修改文件归属
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 即可
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/
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
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
~ yum -y install telnet
~ telnet mail.extmail.org 25
mail from: root@extmail.org
rcpt to:postmaster@extmail.org
data
test...
.
quit
#安装dovecot,dovecot-mysql组件是让两者结合
yum install -y dovecot dovecot-mysql dovecot-devel
chkconfig dovecot on && chkconfig dovecot --list
service dovecot start
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'
#查询虚拟用户对应的邮箱目录
安装telnet 客户端进行登录验证。
yum install -y telnet
service dovecot restart
telnet mail.extmail.org 110
#使用数据里的用户名和密码,证明连接成功
user postmaster@extmail.org #登录postmaster用户
pass extmail #密码是extmail
retr 1 #查看第一封邮件
~ 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
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密码
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
解压缩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 $?
将Windows的hosts文件添加对应的解析即可
10.0.0.40 mail.extmail.org
浏览器地址栏输入:http://mail.extmail.org 显示该页面即完成实验
echo "Hello,Extmail" | mail -s "Hello" postmaster@extmail.org
登录邮件后台管理系统
用户名:root@extmail.org
密码:123456