Centos 6 搭建邮箱服务器教程(Postfix, Dovecot和 MySQL)

作者:袖梨 2022-06-30

Postfix(邮箱服务器)是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。


本教程旨在配置postfix,并用Dovecot提供IMAP/POP3服务,用mysql存储数据。
登录服务器主机(ssh root@域名|ip地址)
安装需要的包


1.首先更新安装源


yum update
2. Centos6自带的Postfix不支持mysql,所以要从CentOS Plus库安装,这里需要修改/etc/yum.repos.d/CentOS-Base.repo添加例外。如下在此文件的[base]和[updates]下面添加例外。
文件:/etc/yum.repos.d/CentOS-Base.rep
[base]
name=CentOS-$releasever - Base
exclude=postfix
#released updates
[updates]
name=CentOS-$releasever - Updates
exclude=postfix
3.安装需要的包
yum --enablerepo=centosplus install postfix
yum install dovecot mysql-server dovecot-mysql
首先在centosplus库安装postfix邮件服务器,然后安装dovecot、mysql服务器。
配置mysql
1.配置mysql自动启动,然后启动mysql
chkconfig mysqld on
service mysqld start
2.运行mysql_secure_installation设置mysql的root密码、删除匿名账户、取消root远程登录、删除test库和对test库的访问权限、刷新授权表使修改生效(根据提示输入y/n即可)。
mysql_secure_installation
3.登录mysql
mysql -u root -p
4.新建mail数据库
CREATE DATABASE mail;
USE mail;
5.新建mail的管理员用户mail_admin并授予其在mail数据库的权限,密码这里为mail_admin_password,自己记得修改这个密码为自己的密码。
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;
6.下面分别新建 虚拟域名表、邮件转发表、用户表、传输表,最后输入quit退出sql。
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );
quit
 
7.编辑/etc/my.cnf绑定mysql到localhost(127.0.0.1)。
文件:/etc/my.cnf
bind-address=127.0.0.1
此地址用于postfix与mysql数据库服务器通信的。
8.重启mysql
service mysql restart
 
配置postfix
下面的配置针对mysql的用户mail_admin的密码为mail_admin_password,如果上面已经更改,下面的配置记得替换。
1.新建/etc/postfix/mysql-virtual_domains.cf作为postfix的虚拟域名配置文件。
文件:/etc/postfix/mysql-virtual_domains.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
2.新建/etc/postfix/mysql-virtual_forwardings.cf作为postfix的虚拟转发文件
文件:/etc/postfix/mysql-virtual_forwardings.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
3.新建/etc/postfix/mysql-virtual_mailboxes.cf作为postfix的虚拟邮箱配置文件
文件:/etc/postfix/mysql-virtual_mailboxes.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,<'@'>,-1),'/',SUBSTRING_INDEX(email,<'@'>,1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
4.新建/etc/postfix/mysql-virtual_email2email.cf作为postfix的虚拟右键映射文件
文件:/etc/postfix/mysql-virtual_email2email.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
5.为这些文件设置正确的权限和拥有者。
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
6.新建用于邮件处理的用户和组,所有虚拟邮箱都存储在这个用户的home目录下。
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
7.输入一下命令完成postfix的全部配置。注意对于下面的server.example.com需要替换为自己的 二级域名.域名,域名是自己购买的域名,比如我的服务器主机名是jlyblog,在万网购买的域名是jlyblog.com,二级域名设置为mail,那么就替换为mail.jlyblog.com。
postconf -e 'myhostname = server.example.com'
postconf -e 'mydestination = $myhostname, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'inet_interfaces = all'
postconf -e 'message_size_limit = 30720000'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = postconf -e 'smtpd_tls_key_file = postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
postconf -e 'virtual_transport = dovecot'
postconf -e 'dovecot_destination_recipient_limit = 1'
8.编辑/etc/postfix/master.cf文件,在最后添加docecot服务。
文件:/etc/postfix/master.cf
dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
9.配置postfix为自动启动,并启动postfix。
chkconfig postfix on
service postfix start
 
配置Dovecot
1.首先备份/etc/dovecot/dovecot.conf文件
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
2.此时文件/etc/dovecot/dovecot.conf不存在了,新建/etc/dovecot/dovecot.conf,加入下面的配置信息,这里的example.com需要替换为自己的域名。
文件:/etc/dovecot/dovecot.conf
protocols = imap pop3
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir
ssl_cert = ssl_key = namespace {
    type = private
    separator = .
    prefix = INBOX.
    inbox = yes
}
service auth {
    unix_listener auth-master {
        mode = 0600
        user = vmail
    }
    unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
    }
user = root
}
service auth-worker {
    user = root
}
protocol lda {
    log_path = /home/vmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = [email protected]
}
protocol pop3 {
    pop3_uidl_format = %08Xu%08Xv
}
passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
    driver = static
    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}
3.新建/etc/dovecot/dovecot-sql.conf.ext加入下面配置信息,这里需要替换mail_admin_password为自己对应的密码。
文件:/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail_admin password=mail_admin_password
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';
4.修改这个文件的相应权限和用户。
chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
chmod o= /etc/dovecot/dovecot-sql.conf.ext
5.配置dovecot为自动启动,并启动它。
chkconfig dovecot on
service dovecot start
6.查看/var/log/maillog文件,查看日志信息确认是否启动成功,如用cat查看,文件大致为:
Mar 18 15:21:59 sothoryos postfix/postfix-script[3069]: starting the Postfix mail system
Mar 18 15:22:00 sothoryos postfix/master[3070]: daemon started -- version 2.6.6, configuration /etc/postfix
Mar 18 15:32:03 sothoryos dovecot: master: Dovecot v2.0.9 starting up (core dumps disabled)
7.测试pop3服务器是否运行成功。首先安装telnet命令。
yum install telnet
telnet localhost pop3
8.如果成功会大概显示如下内容,然后输入quit退出即可。
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.
 
配置邮件别名
1.编辑/etc/aliases文件,加入下面语句,设置邮件别名,example.com记得替换成自己的域名。
文件:/etc/aliases
postmaster: root
root: [email protected]
2.更新别名并重启postfix。
newaliases
service postfix restart
 
测试Postfix
1.连接服务器
telnet localhost 25
2.连接成功后输入下面命令
ehlo localhost
3.然后会看到下面信息表示服务器运行成功。输入quit断开连接即可。
250-hostname.example.com
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
 
配置域名和新建用户


这里首先要设置添加域名的mx即解析记录,如图我在万网设置的:

这里我的域名是jlyblog.com。子域名mail。在mail.jlyblog.com添加MX解析记录,优先级1(越小越高)。
下面假设我之前设置的域名已经是jlyblo.com了。做测试。
1.登录mysql
mysql -u root -p
2.切换到mail数据库,然后将域名加入虚拟域名表中,并添加一个邮箱账户。这里要修改称自己的域名和自己的账户和自己的密码。
USE mail;
INSERT INTO domains (domain) VALUES ('jlyblog.com');
INSERT INTO users (email, password) VALUES ('[email protected]', ENCRYPT('mypassword'));
quit
3.使用mailx工具发送邮件。如现在我发送一封邮件到我的另一个邮箱[email protected] (如果mailx不存在则先安装:yum install mailx)


0.jpg

 

这里用新建的邮箱账户[email protected]向另一个邮箱发送信息,-r指定发送方,-s指定发送主题,然后指定接收方,多个接收方就用,分开,然后回车后输入邮件内容,最后按ctrl+D提交邮件。

 

4.我们可以查看/var/log/maillog日志文件来观察状态信息,如图显示状态status=sent发送成功:

 0.jpg

 

5.同理我用[email protected]回复你好,初次见面""这个邮件,我们查看日志信息如图所示显示状态为投递成功。

 

1.jpg

 

6.下面我们通过mutt工具查看邮箱,根据之前设置,邮箱地址为vmail用户home目录下。首先安装mutt工具(yum install mutt)。然后定位到hi账户的邮箱,并用mutt命令查看收到的邮件:

 

0.jpg 

 

 

7.发送带附件的邮件,首先上传附件到服务器(如scp /home/jly/Desktop/resume.pdf [email protected]:/home/vmail),然后使用mailx的-a选项来指定附件,这里为了方便也将mailx的标准输入重定向到mess文件(事先编辑的)中。

 

 

 

8.接收含有附件的邮件,下面使用[email protected]邮箱向[email protected]发送一份含有附件的邮件。如图发送一个微软100题pdf过去:

 

 

使用mutt –f命令查看接收到的邮件,如下收到一个6M的邮件:

 

 

查看邮件,按空格键翻页到附件那里,按v进行查看附件。

 

 

如上定位到pdf,按s保存,输入保存名称,确定即可。

 

下一步就是将保存的pdf文件从服务器下载到我们的电脑了。

相关文章

精彩推荐