使用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配置步骤中,您将需要每条路径。

安装包

  1. 通过SSH登录您的Linode。替换192.0.2.0为您的IP地址: ssh username@192.0.2.0
  2. 安装所需的包: 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_socketauth_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_domainsvirtual_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连接信息更新文件。取消注释以下变量并使用摘录示例替换值。替换dbnameuserpassword使用您自己的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表中列出的电子邮件地址作为电子邮件帐户的用户名凭据。 要使用别名作为用户名:

  1. 添加别名作为sourcedestination电子邮件地址的virtual_aliases表。
  2. /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/目录的所有者和组更改为vmaildovecot: 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和POP3 0。取消注释portssl变量: 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测试电子邮件

  1. 要向Linode邮件服务器发送和接收测试电子邮件,请安装Mailutils软件包: sudo apt-get install mailutils
  2. 将测试电子邮件发送到邮件服务器之外的电子邮件地址,例如Gmail帐户。替换email1@example.com为邮件服务器中的电子邮件地址: echo "Email body text" | sudo mail -s "Email subject line" recipient@gmail.com -aFrom:email1@example.com
  3. 登录测试电子邮件帐户,确认您已收到指定邮件服务器电子邮件地址的电子邮件。
  4. 从外部电子邮件地址向您的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

别名

  1. 登录MySQL服务器: sudo mysql -u root 出现提示时输入MySQL密码。
  2. 验证用户表的内容。替换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)
  3. 添加新别名。替换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');
  4. 验证是否已添加新别名。新别名将显示在输出中: SELECT * FROM mailserver.virtual_aliases;
  5. 退出MySQL: quit

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

更多教程请前往腾讯云+社区学习更多知识。

参考文献:《https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql/

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏冷冷

MySQL二进制日志

MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement。 总结...

1955
来自专栏编程

SQLplus命令

Oracle的sqlplus是与oracle数据库进行交互的客户端工具,借助sqlplus可以查看、修改数据库记录。在sqlplus中,可以运行sqlplus命...

2076
来自专栏乐沙弥的世界

RMAN 还原与恢复

在Oracle中,三大文件即控制文件,数据文件,日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复

1252
来自专栏程序员的SOD蜜

使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题

最近给客户做了基于SQLServer的发布订阅的“读写分离”功能,但是某些表数据很大,经常发生某几条数据丢失的问题,导致订阅无法继续进行。但是每次发现问题重新做...

3107
来自专栏PHP实战技术

Mysql入门的10条语句

1.查看当前服务器下面,有那些库(database)?

2077
来自专栏用户2442861的专栏

数据库经典问题

原文  http://blog.csdn.net/fangjian1204/article/details/39085941

1563
来自专栏软件工程师成长笔记

js校验表单后提交表单的三种方法总结

本篇文章主要是对js校验表单后提交表单的三种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助。

1093
来自专栏杨建荣的学习笔记

MySQL中的MVCC(r12笔记第35天)

最近同事也问了我关于MySQL MVCC的一些问题,我觉得这个话题蛮有意思, 而之前似乎也没有总结过,就参考了一些资料,把一些内容摘录出来。 什么是MVCC 以...

3657
来自专栏一个会写诗的程序员的博客

mysql-8.0.11-winx64 安装配置: mysqld --initialize --console MYSQL:ERROR 1045 (28000): Access denied ...

mysql-8.0.11-winx64 安装配置: mysqld --initialize --console MYSQL:ERROR 1045 (28000...

2.1K1
来自专栏杨建荣的学习笔记

运维平台中RESTful的Token认证

在近期要做的RESTful服务API化的过程中,对于开放的API还是需要考虑基本的安全认证的,如果API能够随便被调用,可能对于功能来说是畅通的,如果调用...

1133

扫码关注云+社区

领取腾讯云代金券