专栏首页在CentOS 6上使用Postfix,Dovecot和MySQL发送电子邮件

在CentOS 6上使用Postfix,Dovecot和MySQL发送电子邮件

Postfix 邮件传输代理(MTA)是一种高性能的开源电子邮件服务器系统。本指南将帮助你在CentOS 6 Linode上运行 Postfix,使用 Dovecot 运行 IMAP / POP3 服务,使用 MySQL 存储有关虚拟域名和用户的信息。

在使用本指南之前,请确保你已按照入门指引进行操作并设置主机名。

注意 本指南中的步骤需要 root 权限。请务必执行 root 命令,或使用 su - root 以 root 用户身份登录。以下某些命令无法执行 sudo,必须以 root 身份运行。

安装必需的包

1.安装任何未完成的包更新:

yum update

2.CentOS 主存储库中包含的 Postfix 版本不包括对 MySQL 的支持; 因此,你需要从 CentOS Plus 存储库安装 Postfix。在此之前,为 Postfix 包添加排除到 [base][updates] 存储库中以防它从没有支持 MySQL 的更新中被改写:

/etc/yum.repos.d/CentOS-Base.repo1 2 3 4 5 6 7 8
[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

上述命令会安装 Postfix 邮件服务器,MySQL 数据库服务器,Dovecot IMAP 和 POP 守护程序,以及几个提供与身份验证相关服务的支持包。

接下来,设置 MySQL 数据库来处理虚拟域名和用户。

为虚拟域名和用户设置MySQL

1.配置 MySQL 在开机时启动,然后启动 MySQL:

chkconfig mysqld on service mysqld start

2.执行命令 mysql_secure_installation。你将有机会更改 MySQL root 密码,删除匿名用户帐户,禁用 localhost 之外的 root 登录,删除测试数据库以及重载权限表。建议你对这些选项回答 “yes”:

mysql_secure_installation

3.启动 MySQL shell:

mysql -u root -p

4.为邮件服务器创建一个数据库并切换到该数据库:

CREATE DATABASE mail; USE mail;

5.创建一个名为 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.创建虚拟域表:

CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );

7.创建一个表来处理邮件转发:

CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );

8.创建 users表:

CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );

9.创建 transport 表:

CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );

10.退出MySQL shell:

quit

11.编辑 /etc/my.cnf 将 MySQL 绑定到 localhost(127.0.0.1),并将以下内容添加到文件中的[mysqld]部分:

# /etc/my.cnf
bind-address=127.0.0.1

这是 Postfix 能够与数据库服务器通信所必需的。如果你将 MySQL 设置为侦听另一个IP地址(例如内部IP),则需要在 Postfix 配置步骤中替换 IP 地址 127.0.0.1建议在可公开访问的 IP 地址上运行MySQL。

12.重启数据库服务器:

service mysqld restart

接下来,执行其他 Postfix 配置以设置与数据库的通信。

配置 Postfix 以使用MySQL

注意 对于接下来的四个步骤,请将 mail_admin_password 替换为之前输入的mail_admin密码。

1.为 Postfix 创建一个名为 /etc/postfix/mysql-virtual_domains.cf 的虚拟域配置文件:

# /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.为 Postfix 创建一个名为 /etc/postfix/mysql-virtual_forwardings.cf 的虚拟转发文件:

# /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.为 Postfix 创建一个名为 /etc/postfix/mysql-virtual_mailboxes.cf 的虚拟邮箱配置文件:

# /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.为 Postfix 创建一个名为 /etc/postfix/mysql-virtual_email2email.cf 的虚拟电子邮件映射文件:

# /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.为邮件处理任务创建用户和组。所有虚拟邮箱都将存储在此用户的主目录下:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

7.完成 Postfix 配置所需的剩余步骤。请确保将 server.example.com 替换为 Linode 的完全合规的域名。如果你计划使用自己的 SSL 证书和密钥,请使用相应的路径替换/etc/pki/dovecot/private/dovecot.pem

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 = </etc/pki/dovecot/certs/dovecot.pem'
postconf -e 'smtpd_tls_key_file = </etc/pki/dovecot/private/dovecot.pem'
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 并将 Dovecot 服务添加到文件的底部:

# /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 在开机时启动,并首次启动服务:

chkconfig postfix on service postfix start

这样就完成了 Postfix 的配置。

配置 Dovecot

1.将 /etc/dovecot/dovecot.conf 移至备份文件中:

mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup

2.将以下内容复制到新建的空文件 dovecot.conf,在第37行中把 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 = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

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 = postmaster@example.com
}

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.MySQL 将用于存储密码信息,因此必须创建 /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.限制文件访问, 通过更改权限以允许 dovecot 组中的用户访问该文件,同时拒绝其他用户访问:

chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
chmod o= /etc/dovecot/dovecot-sql.conf.ext

5.配置 Dovecot 在开机时启动,并首次启动 Dovecot:

chkconfig dovecot on service dovecot start

6.检查日志 /var/log/maillog 以确保 Dovecot 的启动没有错误。你的日志中应该具有类似于以下内容的文本:

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 服务器以确保它正常运行:

yum install telnet telnet localhost pop3

8.终端应该会输出类似下方的结果:

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.

9.输入命令 quit 返回 shell。这样就完成了 Dovecot 的配置。接下来,确保别名(aliases)得到正确配置。

测试邮箱别名

1.编辑 /etc/aliases 确保 postmasterpostmaster 指令已为你的组织正确设置。

postmaster: root
root: postmaster@example.com

2.更新别名并重启 Postfix

newaliases
service postfix restart

到此完成别名配置。下一步请测试 Postfix 以确保它正常运转。

测试 Postfix

1.为 SMTP-AUTH 和 TLS 测试 Postfix:

telnet localhost 25

2.如果尚处于连接状态, 请发出以下命令:

ehlo localhost

3.你将看到类似下方的输出:

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

4.发送 quit 命令以终止远程登录连接。

下一步,在 MySQL 数据库中添加域名和邮件用户。

设置并测试域名和用户

注意 在进行下面的步骤之前,通过添加指向邮件服务器的完全限定域名的 MX 记录,修改你希望处理的电子邮件的任何域名的DNS记录。如果你希望处理的电子邮件域名已存在 MX 记录,请删除它们或将它们设置为比邮件服务器更高的优先级。较小的优先级数字表示邮件传递的优先级较高,“0”是最高优先级。

在下方示例中,MySQL shell 用于添加对域名为 “example.com” 的支持,该域名将会有名为 “sales” 的电子邮件帐户。

1.登录 MySQL shell

mysql -u root -p

2.切换到 mail 数据库,添加对你域名的支持,并创建一个电子邮件帐户。请务必将 example.com 替换为你的域名,将 sales@example.com 替换为你所选择的电子邮箱,并用强密码替换 password

USE mail;
INSERT INTO domains (domain) VALUES ('example.com');
INSERT INTO users (email, password) VALUES ('sales@example.com', ENCRYPT('password'));
quit

3.在访问任何新创建的电子邮件帐户之前,需要发送测试邮件以创建该用户的邮箱:

yum install mailx
mailx sales@example.com

按下 Ctrl+D 键结束消息。你可以安全地让Cc:字段留白。这样就完成了新域名和电子邮件用户的配置。

注意 考虑到在单个邮件系统上虚拟托管大量域名的可能性,电子邮件地址的用户名部分(即在@符号之前的部分)不足以进行认证。当电子邮件用户向服务器进行身份验证时,他们必须提供上面创建的完整电子邮件地址作为用户名。

检查你的日志

测试邮件发送之后, 检查邮件日志以确保邮件已传送。

1.检查位于/var/log/maillog 的邮件日志。你将会看到类似下方的内容:

Mar 18 15:39:07 server postfix/cleanup[3252]: 444E34055: message-id=<20150318153907.444E34055@server.example.com>
Mar 18 15:39:07 server postfix/qmgr[3218]: 444E34055: from=<root@server.example.com>, size=489, nrcpt=1 (queue active)
Mar 18 15:39:07 server postfix/pipe[3258]: 444E34055: to=<sales@example.com>, relay=dovecot, delay=0.09, delays=0.04/0.01/0/0.05, dsn=2.0.0, sta$
Mar 18 15:39:07 server postfix/qmgr[3218]: 444E34055: removed

2.检查位于/home/vmail/dovecot-deliver.log的 Dovecot 传送日志。你将会看到类似下方的内容:

deliver(<sales@example.com>): 2011-01-21 20:03:19 Info: msgid=\<<20110121200319.E1D148908@hostname.example.com>>: saved mail to INBOX

现在你可以测试看你的电子邮件服务器用户会通过他们的邮件客户端看到什么。

测试邮箱

1.要测试名为 sales@example.com 的邮箱,请导航到邮箱目录/home/vmail/example.com/sales/Maildir 并发出以下命令:

cd /home/vmail/example.com/sales/Maildir find

2.你应该会看到类似下方内容的输出:

.
./dovecot-uidlist
./cur
./new
./new/1285609582.P6115Q0M368794.li172-137
./dovecot.index
./dovecot.index.log
./tmp

3.使用邮件客户端测试邮箱。对于此测试,建议使用mutt。如果默认情况下未安装,请键入 yum install mutt 命令安装,然后运行命令:

mutt -f .

系统可能会提示你创建根邮箱。这并不是必需的。

4.如果收件箱中有电子邮件,则已成功配置 Postfix、Dovecot 和 MySQL!退出 mutt 请按q

更多信息

有关本主题的更多信息, 请参考以下资源。我们希望所提供的这些资料是有用的,但请注意,我们无法保证外部托管材料的准确性或及时性。

本文的版权归 FesonX 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用CasperJS构建你的网络爬虫

    为应用程序收集数据有时候是一件困难和费力的事。一个急需的API可能会丢失,或者可能有太多的数据需要处理。有时候,只是有时候,你需要通过网络抓取信息。

    FesonX
  • 在 CentOS 7 上使用 Apache 的 SSL 证书

    本指南将向你演示如何启用 SSL 来保护由 CentOS 或者 Fedora 上的 Apache 提供服务的网站。

    FesonX
  • 为什么我们从Python切换到Go?

    切换到新的编程语言向来是关键一步,尤其是当你的团队只有一位成员有该语言的使用经验时。今年年初,我们将 Stream 的主要编程语言从Python 切换到 Go。...

    FesonX
  • 使用CentOS 7上的Postfix,Dovecot和MariaDB发送电子邮件

    Postfix邮件传输代理(MTA)是一种高性能的开源电子邮件服务器系统。本指南将帮助您在CentOS 7 Linode上运行Postfix,使用Dovecot...

    大大刺猬
  • 如何在 Debian 下配置邮件服务器

    本教程将讨论如何在Debian(或Ubuntu)配置一个可工作的邮件服务器。我们知道在邮件服务器使用的主要协议有SMTP、POP和IMAP。在本教程中,SMTP...

    Debian社区
  • linux命令基础(3)

    6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符; :%s/^[[:space:]]...

    py3study
  • Java 8 新特性(一)lambda表达式

    Java 9 好像也快出了,不过我连Java 8的新特性都还没认真研究过,所以这几篇文章就是来介绍Java 8的新特性的。首先,第一个重要的特性就是传说中的la...

    乐百川
  • Python 拓展之特殊函数

    今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 “函数式编程” 的见证,至于什么是函数式编程,不是本篇文章的重...

    Rocky0429
  • 腾讯WeTest移动测试沙龙邀请【第三期】——性能测试深圳专场邀您参与!

                     测试开发者的共同关注! 性能测试深圳专场 ? 8月27日下午14:30~17:30 ? 深圳 腾讯大厦 您将收获 1、 ...

    WeTest质量开放平台团队
  • 腾讯WeTest移动测试沙龙邀请【第三期】——性能测试深圳专场邀您参与!

                     测试开发者的共同关注! 性能测试深圳专场 ? 8月27日下午14:30~17:30 ? 深圳 腾讯大厦 您将收获 1、...

    WeTest质量开放平台团队

扫码关注云+社区

领取腾讯云代金券