使用Postfix,Dovecot和MySQL发送电子邮件

在本指南中,您将学习如何在Debian或Ubuntu上使用Postfix,Dovecot和MySQL设置安全的虚拟用户邮件服务器。我们将解释如何创建新的用户邮箱以及如何在配置的域中发送或接收电子邮件。
对于其他Linux发行版或不同的邮件服务器,请查看我们的电子邮件教程。
准备
在使用本指南之前,请确保您已按照入门指南进行操作并设置主机名。还要确保iptables 防火墙没有阻止任何标准邮件端口(25,465,587,110,995,143和993)。如果使用不同形式的防火墙,请确认它没有阻止任何所需的端口。
注意:本指南中的步骤需要root权限。请务必以root身份或使用
sudo
前缀运行以下步骤。有关权限的更多信息,请参阅我们的用户和组指南。
配置DNS
当您准备好更新DNS并开始向服务器发送邮件时,请编辑域的MX记录,使其指向Linode的域或IP地址,类似于以下示例:
example.com A 10 12.34.56.78
example.com MX 10 example.com
mail.example.com MX 10 example.com
确保为可能接收电子邮件的所有域和子域更改MX记录。如果设置全新域,则可以在配置邮件服务器之前执行这些步骤。使用Linode的DNS管理器时,创建指向所需域或子域的MX记录,然后为该域或子域创建A记录,该记录指向正确的IP地址。
更新主机文件
验证该hosts
文件是否包含Linode的公共IP地址的行,并与完全限定域名(FQDN)相关联。在下面的示例中,192.0.2.0
是公共IP地址,hostname
是本地主机名,hostname.example.com
是FQDN。
/ etc / hosts文件
1 2 | 127.0.0.1 localhost.localdomain localhost 192.0.2.0 hostname.example.com hostname |
---|
安装SSL证书
在完成Dovecot配置步骤之前,您需要在邮件服务器上安装SSL证书。SSL证书将向用户验证邮件服务器的身份,并加密用户邮件客户端和邮件服务器之间传输的数据。按照我们的指南使用Certbot安装SSL证书。
记下Linode上的证书和密钥位置。在Dovecot配置步骤中,您将需要每条路径。
安装包
- 通过SSH登录您的Linode。替换
192.0.2.0
为您的IP地址: ssh username@192.0.2.0 - 安装所需的包:
sudo apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server
系统不会提示您为最新版本的MySQL输入root MySQL用户的密码。这是因为在Debian和Ubuntu上,MySQL现在默认使用
unix_socket
或auth_socket
授权插件。只要您从localhost上的Linux root用户进行连接,此授权方案就允许您登录数据库的root用户。 出现提示时,选择“ Internet站点”作为Postfix安装程序应配置的邮件服务器类型。该系统邮件名称应为FQDN。


版本
本指南使用以下软件包版本:
- 后缀3.1.0
- Dovecot 2.2.22
- MySQL 14.14
MySQL
邮件服务器的虚拟用户和密码存储在MySQL数据库中。Dovecot和Postfix需要这些数据。按照以下步骤为虚拟用户,域和别名创建数据库表:
- 使用mysql_secure_installation工具配置其他安全选项。此工具将询问您是否要为MySQL root用户设置新密码,但您可以跳过该步骤:
sudo mysql_secure_installation
在以下提示中回答Y:
- 删除匿名用户?
- 禁止远程登录?
- 删除测试数据库并访问它?
- 现在重新加载权限表?
- 创建一个新数据库: sudo mysqladmin -u root create mailserver
- 登录MySQL: sudo mysql -u root
- 创建MySQL用户并授予新用户对数据库的权限。替换
mailuserpass
为安全密码: GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'mailuserpass'; - 刷新MySQL权限以应用更改: FLUSH PRIVILEGES;
- 为将在Linode上接收邮件的域创建一个表: CREATE TABLE `virtual_domains` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 为所有电子邮件地址和密码创建一个表: CREATE TABLE `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `password` varchar(106) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 为电子邮件别名创建一个表: CREATE TABLE `virtual_aliases` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加数据
现在已经创建了数据库和表,将一些数据添加到MySQL。
- 将域添加到
virtual_domains
表中。替换为您自己的设置example.com
和的值hostname
: INSERT INTO `mailserver`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'example.com'), ('2', 'hostname.example.com'), ('3', 'hostname'), ('4', 'localhost.example.com'); 注意:注意哪个id
域对应于哪个域,该id
值对于接下来的两个步骤是必需的。 - 向
virtual_users
表中添加电子邮件地址。该domain_id
值引用virtual_domain
表的id
值。将电子邮件地址值替换为您希望在邮件服务器上配置的地址。password
用强密码替换值。 INSERT INTO `mailserver`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'), ('2', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com'); - 电子邮件别名会将所有电子邮件从一个电子邮件地址转发到另一个 要设置电子邮件别名,请将其添加到
virtual_aliases
表中: INSERT INTO `mailserver`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'alias@example.com', 'email1@example.com');
测试
在上一节中,数据已添加到MySQL mailserver
数据库中。以下步骤将测试数据是否已存储并可以检索。
- 登录MySQL: sudo mysql -u root
- 检查
virtual_domains
表的内容: SELECT * FROM mailserver.virtual_domains; - 验证您是否看到以下输出: +----+-----------------------+ | id | name | +----+-----------------------+ | 1 | example.com | | 2 | hostname.example.com | | 3 | hostname | | 4 | localhost.example.com | +----+-----------------------+ 4 rows in set (0.00 sec)
- 检查
virtual_users
表: SELECT * FROM mailserver.virtual_users; - 验证以下输出,散列密码比下面显示的长: +----+-----------+-------------------------------------+--------------------+ | id | domain_id | password | email | +----+-----------+-------------------------------------+--------------------+ | 1 | 1 | $6$574ef443973a5529c20616ab7c6828f7 | email1@example.com | | 2 | 1 | $6$030fa94bcfc6554023a9aad90a8c9ca1 | email2@example.com | +----+-----------+-------------------------------------+--------------------+ 2 rows in set (0.01 sec)
- 检查
virtual_aliases
表: SELECT * FROM mailserver.virtual_aliases; - 验证以下输出: +----+-----------+-------------------+--------------------+ | id | domain_id | source | destination | +----+-----------+-------------------+--------------------+ | 1 | 1 | alias@example.com | email1@example.com | +----+-----------+-------------------+--------------------+ 1 row in set (0.00 sec)
- 如果一切按预期输出,退出MySQL: exit
后缀
Postfix是一个邮件传输代理(MTA),它在Linode和Internet之间中继邮件。它具有高度可配置性,允许极大的灵活性。本指南维护了许多Posfix的默认配置值。
配置文件设置
该main.cf
文件是Postfix使用的主要配置文件。
- 如果需要恢复默认配置,请复制默认的Postfix配置文件: sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
- 编辑
/etc/postfix/main.cf
文件以匹配示例配置。example.com
用您的域名替换出现的内容: /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_tls_security_options = noanonymous # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = example.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydomain = example.com myorigin = $mydomain mydestination = $myhostname localhost.$mydomain relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all # Handing off local delivery to Dovecot's LMTP, and telling it where to store mail virtual_transport = lmtp:unix:private/dovecot-lmtp # Virtual domains, users, and aliases virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/mysql-virtual-email2email.cf
- 该
main.cf
文件声明的位置virtual_mailbox_domains
,virtual_mailbox_maps
以及virtual_alias_maps
文件。这些文件包含在本指南的MySQL部分中创建的MySQL查找表的连接信息。Postfix将使用此数据来标识所有域,相应的邮箱和有效用户。 为...创建文件virtual_mailbox_domains
。将值替换为password
数据库用户的密码。如果您的数据库使用不同的名称user
,并dbname
取代那些用自己的价值观: /etc/postfix/mysql-virtual-mailbox-domains.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
- 创建
/etc/postfix/mysql-virtual-mailbox-maps.cf
文件,然后输入以下值。使用数据库用户的密码并根据需要进行任何其他更改: /etc/postfix/mysql-virtual-mailbox-maps.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'
- 创建
/etc/postfix/mysql-virtual-alias-maps.cf
文件并输入以下值。使用数据库用户的密码并根据需要进行任何其他更改: /etc/postfix/mysql-virtual-alias-maps.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'
- 创建
/etc/postfix/mysql-virtual-email2email.cf
文件并输入以下值。使用数据库用户的密码并根据需要进行任何其他更改: /etc/postfix/mysql-virtual-email2email.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM virtual_users WHERE email='%s'
- 重启后缀: sudo systemctl restart postfix
- 该
postmap
命令创建或查询Postfix的查找表,或更新现有的查找表。输入以下命令以确保Postfix可以查询virtual_domains
表。替换example.com
为第一个name
值。1
如果成功,该命令应该返回: sudo postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf - 测试Postfix以验证它是否可以从MySQL表中检索第一个电子邮件地址
virtual_users
。替换email1@example.com
为添加到表中的第一个电子邮件地址。您应该收到1
输出: sudo postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf - 测试Postfix以验证它是否可以查询
virtual_aliases
表。替换为表中创建alias@example.com
的第一个source
值。该命令应该返回destination
该行的值: sudo postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
主程序设置
Postfix的主程序启动并监视Postfix的所有进程。配置文件master.cf
列出了所有程序以及有关如何启动它们的信息。
- 制作
/etc/postfix/master.cf
文件的副本: sudo cp /etc/postfix/master.cf /etc/postfix/master.cf.orig - 编辑
/etc/postfix/master.cf
以包含摘录示例中的值。文件的其余部分可以保持不变:
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
#smtp inet n - - - 1 postscreen
#smtpd pass - - - - - smtpd
#dnsblog unix - - - - 0 dnsblog
#tlsproxy unix - - - - 0 tlsproxy
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
...
- 更改
/etc/postfix
目录的权限以限制权限以仅允许其所有者和相应的组: sudo chmod -R o-rwx /etc/postfix - 重启后缀: sudo systemctl restart postfix
Dovecot
Dovecot是邮件传递代理(MDA),它从Postfix传递消息并将它们传递到虚拟邮箱。在本节中,配置Dovecot以强制用户在连接时使用SSL,以便其密码永远不会以纯文本形式发送到服务器。
- 复制所有配置文件,以便在需要时可以轻松恢复为它们: sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig sudo cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig sudo cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig sudo cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig sudo cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
- 编辑
/etc/dovecot/dovecot.conf
文件。添加protocols = imap pop3 lmtp
到# Enable installed protocols
文件的部分: dovecot.conf
## Dovecot configuration file
...
# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
...
postmaster_address=postmaster at example.com
- 编辑
/etc/dovecot/conf.d/10-mail.conf
文件。此文件控制Dovecot如何与服务器的文件系统交互以存储和检索消息: 修改配置文件中的以下变量: 10 mail.conf
...
mail_location = maildir:/var/mail/vhosts/%d/%n
...
mail_privileged_group = mail
...
/var/mail/vhosts/
为您的域创建目录和子目录。替换example.com
为您的域名: sudo mkdir -p /var/mail/vhosts/example.com 此目录将用作发送到您的域的邮件的存储空间。vmail
使用ID 创建组5000
。将新用户添加vmail
到该vmail
组。该系统用户将从服务器读取邮件。 sudo groupadd -g 5000 vmail sudo useradd -g vmail -u 5000 vmail -d /var/mail- 将
/var/mail/
文件夹及其内容的所有者更改为属于vmail
: sudo chown -R vmail:vmail /var/mail - 编辑位于的用户身份验证文件
/etc/dovecot/conf.d/10-auth.conf
。取消注释以下变量并替换为文件摘录的示例值: 10 auth.conf
...
disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
!include auth-system.conf.ext
...
!include auth-sql.conf.ext
...
注意供参考,查看完整10-auth.conf
文件。
/etc/dovecot/conf.d/auth-sql.conf.ext
使用身份验证和存储信息编辑文件。确保您的文件包含以下行,并且它们已取消注释: AUTH-sql.conf.ext
...
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
...
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
...
/etc/dovecot/dovecot-sql.conf.ext
使用MySQL连接信息更新文件。取消注释以下变量并使用摘录示例替换值。替换dbname
,user
并password
使用您自己的MySQL数据库值: dovecot的-sql.conf.ext
...
driver = mysql
...
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass
...
default_pass_scheme = SHA512-CRYPT
...
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
...
该password_query
变量使用virtual_users
表中列出的电子邮件地址作为电子邮件帐户的用户名凭据。
要使用别名作为用户名:
- 添加别名作为
source
和destination
电子邮件地址的virtual_aliases
表。 - 将
/etc/dovecot/dovecot-sql.conf.ext
文件的password_query
值更改为password_query = SELECT email as user, password FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source = '%u');
注意:供参考,查看完整dovecot-sql.conf.ext
文件。
- 将
/etc/dovecot/
目录的所有者和组更改为vmail
和dovecot
: sudo chown -R vmail:dovecot /etc/dovecot - 更改
/etc/dovecot/
目录的权限,以便为目录的所有者递归读取,写入和执行: sudo chmod -R o-rwx /etc/dovecot - 编辑服务设置文件
/etc/dovecot/conf.d/10-master.conf
: 注意:编辑文件时,请注意不要删除任何打开或关闭花括号。如果出现语法错误,Dovecot将无声地崩溃。您可以检查/var/log/upstart/dovecot.log
以调试错误。 这是一个完整10-master.conf
文件的示例。 通过将协议的端口设置为禁用未加密的IMAP和POP30
。取消注释port
和ssl
变量: 10 master.conf
...
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}
...
}
...
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
...
找到service lmtp
文件的部分并使用下面显示的配置:
10 master.conf
...
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
#mode = 0666i
mode = 0600
user = postfix
group = postfix
}
...
}
找到service auth
并配置它,如下所示:
10 master.conf
...
service auth {
...
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
...
user = dovecot
}
...
在该service auth-worker
部分中,取消注释该user
行并将其设置为vmail
:
10 master.conf
...
service auth-worker {
...
user = vmail
}
将更改保存到/etc/dovecot/conf.d/10-master.conf
文件中。
- 编辑
/etc/dovecot/conf.d/10-ssl.conf
文件以要求SSL并添加域的SSL证书和密钥的位置。替换example.com
为您的域名: 10 ssl.conf
...
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = required
...
ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem
- 重启Dovecot以启用所有配置: sudo systemctl restart dovecot
使用Mailutils测试电子邮件
- 要向Linode邮件服务器发送和接收测试电子邮件,请安装Mailutils软件包: sudo apt-get install mailutils
- 将测试电子邮件发送到邮件服务器之外的电子邮件地址,例如Gmail帐户。替换
email1@example.com
为邮件服务器中的电子邮件地址: echo "Email body text" | sudo mail -s "Email subject line" recipient@gmail.com -aFrom:email1@example.com - 登录测试电子邮件帐户,确认您已收到指定邮件服务器电子邮件地址的电子邮件。
- 从外部电子邮件地址向您的Linode邮件服务器发送测试电子邮件。重新登录您的Linode并检查是否收到了电子邮件; 替换您发送邮件的用户名和域名: sudo mail -f /var/mail/vhosts/example.com/email1 出现提示时,输入与您要查看的电子邮件对应的数字: "/var/mail/vhosts/example.com/": 9 messages 5 new 4 unread U 1 John Doe Wed Jun 27 16:00 57/2788 Test email 1 U 2 John Doe Wed Jun 27 16:02 56/2761 Test email 2 U 3 John Doe Wed Jun 27 16:35 15/594 Test email 3 U 4 John Doe Wed Jun 27 16:42 71/3535 Test email 4 >N 5 John Doe Mon Jul 2 10:55 13/599 Subject of the Email ? 应显示电子邮件标题和正文。考虑添加垃圾邮件和病毒过滤以及Webmail客户端。 有关调试步骤,请参阅Postfix,Dovecot和MySQL的故障排除问题。
邮件客户端
您可以设置电子邮件客户端以连接到您的邮件服务器。许多客户端自动检测服务器设置 手动配置需要以下参数:
- 用户名:完整的电子邮件地址,包括
@example.com
部分。 - 密码:为数据库
virtual_users
表中的电子邮件地址输入的密码mailuser
。 - 服务器名称:传入和传出服务器名称必须是解析为Linode的域。
- SSL:传入和传出服务器需要身份验证和SSL加密。
- 端口:使用端口
993
进行安全IMAP,使用端口995
进行安全POP3,587
使用SSL进行端口进行SMTP。
有关安装电子邮件客户端的详细信息,请参阅在Ubuntu 16.04上安装SquirrelMail。
添加新域,电子邮件地址和别名
要向邮件服务器添加新域,电子邮件地址和别名,您需要更新本指南的MySQL部分中创建的相应MySQL表。
域
- 要添加新域,请通过SSH连接到您的Linode。
- 登录MySQL服务器: sudo mysql -u root
- 出现提示时输入根MySQL密码。
- 在添加新条目之前查看表的内容。如果您未使用
virtual_domains
域表的名称,请替换值: SELECT * FROM mailserver.virtual_domains; - 输出应类似于以下内容: +----+-----------------------+ | id | name | +----+-----------------------+ | 1 | example.com | | 2 | hostname.example.com | | 3 | hostname | | 4 | localhost.example.com | +----+-----------------------+
- 向表中添加新域。替换
newdomain.com
为所需的域名: INSERT INTO `mailserver`.`virtual_domains` (`name`) VALUES ('newdomain.com'); - 验证是否已添加新域。输出应显示新域名。 SELECT * FROM mailserver.virtual_domains;
- 退出MySQL: quit
电子邮件地址
- 登录MySQL服务器: sudo mysql -u root 出现提示时输入MySQL密码。
- 验证用户表的内容。替换
virtual_users
为您的表名: SELECT * FROM mailserver.virtual_users; 输出应类似于以下内容: +----+-----------+-------------------------------------+--------------------+ | id | domain_id | password | email | +----+-----------+-------------------------------------+--------------------+ | 1 | 1 | $6$574ef443973a5529c20616ab7c6828f7 | email1@example.com | | 2 | 1 | $6$030fa94bcfc6554023a9aad90a8c9ca1 | email2@example.com | +----+-----------+-------------------------------------+--------------------+ 2 rows in set (0.01 sec) - 将新电子邮件地址添加到现有表。替换
newpassword
为用户的密码,并email3@newdomain.com
使用用户的电子邮件地址: INSERT INTO `mailserver`.`virtual_users` (`domain_id`, `password` , `email`) VALUES ('5', ENCRYPT('newpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) , 'email3@newdomain.com'); 注意:本domain_id
应该对应于id
在域的值virtual_domains
表。在示例中,我们正在创建一个电子邮件地址,以便newdomain.com
在上一节中添加。 - 验证是否已添加新电子邮件地址。新电子邮件地址应显示在输出中: SELECT * FROM mailserver.virtual_users;
- 退出MySQL: quit
别名
- 登录MySQL服务器: sudo mysql -u root 出现提示时输入MySQL密码。
- 验证用户表的内容。替换
virtual_users
为您的表名: SELECT * FROM mailserver.virtual_aliases; 输出应类似于以下内容: +----+-----------+-------------------+--------------------+ | id | domain_id | source | destination | +----+-----------+-------------------+--------------------+ | 1 | 1 | alias@example.com | email1@example.com | +----+-----------+-------------------+--------------------+ 1 row in set (0.00 sec) - 添加新别名。替换
alias@newdomain.com
为地址以转发电子邮件,并email1@gmail.com
使用您要将邮件转发到的地址。该alias@newdomain.com
需求是已经存在的邮件服务器上的电子邮件地址: INSERT INTO `mailserver`.`virtual_aliases` (`domain_id`, `source`, `destination`) VALUES ('5', 'alias@newdomain.com', 'myemail@gmail.com'); 注意本domain_id
应该对应于id
在域的值virtual_domains
表。在示例中,我们正在创建一个电子邮件地址,以便newdomain.com
在上一节中添加。 您可以创建一个“全能”别名,该别名将转发发送到匹配域的所有电子邮件,这些电子邮件没有匹配的别名或用户。替换@newdomain.com
为您的域名。此值是别名的来源。 INSERT INTO `mailserver`.`virtual_aliases` (`domain_id`, `source`, `destination`) VALUES ('5', '@newdomain.com', 'myemail@gmail.com'); - 验证是否已添加新别名。新别名将显示在输出中: SELECT * FROM mailserver.virtual_aliases;
- 退出MySQL: quit
更多信息
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。
更多教程请前往腾讯云+社区学习更多知识。
参考文献:《https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql/》