如何在Ubuntu 18.04上安装和配置Postfix

时间:2020-03-05 15:27:49  来源:igfitidea点击:

Postfix是一个免费的电子邮件服务器,最初是作为替代,更简单,更安全的sendmail。
本教程将向我们展示如何在Ubuntu 18.04服务器上设置Postfix邮件服务器。
Postfix允许我们管理虚拟用户,并且我们创建虚拟组。
我们将轻松地使用PostFixAdmin来管理我们的邮件服务器,为虚拟用户和Dovecot进行传入电子邮件。

你需要了解什么

要接收邮件,准备工作是具有固定的IP,在我们自己的服务器上运行的DNS服务器或者可以其中修改录制的托管提供程序。
让我们定义一些将在此配置上使用的首字母缩略词:

  • Postfix是用于发送和接收电子邮件的邮件传输代理(MTA)
  • Dovecot是使用Internet Messaging应用程序协议(IMAP)和邮局协议(POP3)服务器的本地送货代理(LDA)。
  • SASL由简单的身份验证和安全层定义,它会在用户和服务器之间添加身份验证以确保交换。
  • PostFixAdmin Web界面,我们可以管理邮箱,虚拟域和别名
  • LEMP:具有Nginx和PHP的Web服务器,以便访问PostFixAdmin并轻松管理虚拟用户和域,MySQL存储所有信息。

Postfix中有两种类型的域:

  • 用于向系统用户提供电子邮件的本地域,这些域将列入"/etc/passwd"文件中"。
  • 不需要在/etc/passwd文件中存在的虚拟域。它提供了一种方法,可以通过使用MySQL,PostgreSQL或者LDAP来在邮件服务器系统中轻松处理数千个邮件帐户。

我们将配置第二种类型的域。
我们还应该阅读我们的文章,了解如何在Ubuntu 18.04上安装LEMP服务器,这是访问PostfixAdmin Web界面所必需的。

步骤1)安装和配置PostFixAdmin

PostFixAdmin是一个Web模块,允许我们轻松地操纵数据库中的虚拟域和用户。

a)下载postfixadmin

首先,我们将安装所需的包

# apt install php-imap php-mbstring php7.2-imap php7.2-mbstring
Reading package lists... Done
Building dependency tree 
Reading state information... Done
...
...

通常postfixadmin存在于Ubuntu 18.04的默认存储库上,但它将尝试安装Apache和PostgreSQL而不是Nginx和MySQL。
因此,要保留我们的配置,我们将从GitHub站点项目的源自源下载实际的最新版本3.2,并将其保存在/opt文件夹中

# wget -P /opt https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.2.tar.gz
--2016-06-11 21:53:14--  https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.2.tar.gz
Resolving github.com (github.com)... 192.30.255.113, 192.30.255.112
Connecting to github.com (github.com)|192.30.255.113|:443... connected.
HTTP request sent, awaiting response... 302 Found

现在转到该文件夹并解压缩它。

# cd /opt && tar xvf postfixadmin-3.2.tar.gz

现在我们应该重命名它

# mv postfixadmin-postfixadmin-3.2/postfixadmin

postfixadmin使用一个名为"setup.php"的脚本,我们将在安装期间通过Web服务器使用。
在先前版本的Postfix(3.1和最旧)上,此脚本直接在PostFixAdmin根文件夹中,但在实际版本(3.2)中,它包含在PostFixAdmin文件夹的子目录public中。
通常,我们应该将PostFixAdmin移动到我们Nginx Web服务器的根文件夹,但使用了这个新版本,我们只会创建一个包含脚本的公用文件夹的符号链接,然后重命名为某些安全性

# ln -s /opt/postfixadmin/public//var/www/html/pfa
root@li1002-235:~# ls -l /var/www/html/
total 4
-rw-r--r-- 1 root root 612 Jun 10 04:51 index.nginx-debian.html
lrwxrwxrwx 1 root root  25 Jun 12 04:01 pfa -> /opt/postfixadmin/public/

b)创建Postfix数据库

现在我们应该为某些配置连接到MySQL数据库

# mysql -u root -p
Enter password:

然后创建数据库和用户

mysql> CREATE DATABASE postfix;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfix-db-password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye

c)配置PostFixAdmin

现在我们已经配置了数据库,我们应该向后氟克拉达表示,这可能知道它可以其中获取信息。
要执行此操作,请创建"/opt/postfixadmin/config.local.php"文件"并添加以下内容

# vim /opt/postfixadmin/config.local.php
<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix-db-password';
$CONF['database_name'] = 'postfix';
$CONF['configured'] = true;
?>

postfixadmin需要权限到名为"templates_c"的子文件夹"。
因此,在安装期间避免某些错误,如下所示,

我们需要手动创建它,并使用Chown命令提供"www-data"所有权"。

# mkdir /opt/postfixadmin/templates_c && chmod 755 -R /opt/postfixadmin/templates_c
# chown -R www-data:www-data /opt/postfixadmin/templates_c

然后再试一次,我们将看到它现在有效,它检查所有配置,显示了PHP和Ubuntu的版本

现在我们应该为设置创建密码并生成其哈希值

现在它将允许我们创建Superadmin帐户,并且我们将使用我们创建的设置密码。
但是,对于此,我们需要编辑/opt/postfixadmin/config.local.php文件,以添加生成的密码哈希值。
然后前往超级账户创建

现在,我们将看到已添加帐户。

现在,我们可以看到,我们可以使用链接http://IP或者域/PFA使用帐户登录PostFixAdmin

如果无法出现此页面,请检查nginx错误日志文件

# tail -n 20 -f /var/log/nginx/error.log

并确保在"/opt/postfixadmin/templates_c"文件夹"中具有正确的权限。
我们可以在登录时查看每个菜单的描述。

d)创建虚拟域,用户和别名

现在我们将创建虚拟域,然后是用户。
域是域名,例如mytuto.com。
我们可以使用同一台服务器在域上拥有电子邮件。
当你开始时没有任何域。
要添加域,请转到域名列表 - >新域。

然后输入有关域的信息。
我们可以限制别名和邮箱的数量。
请记住添加MX记录。
完成后选择值,添加域。

既然我们的虚拟域创建了,我们可以在域列表中看到

我们现在可以创建我们的虚拟用户。
为此,请转到虚拟列表 - >添加邮箱。

我们还可以创建别名。
这些是电子邮件地址,可以将邮件重定向到另一个帐户。
通常,任何邮件服务器都必须具有电子邮件地址滥用,以便我们可以例如从域中报告垃圾邮件。
因此,只需在域中创建别名滥用才能将我们刚刚提前创建的用户。
要执行此操作,请转到虚拟列表 - >添加别名。

我们可以在最后创建所有这些虚拟参数,但它将在下一步中帮助我们配置Postfix的下一步。

步骤2)安装和配置Postfix

a)安装postfix

现在我们可以安装postfix包。

# apt install postfix postfix-mysql sasl2-bin
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  db-util db5.3-util libmysqlclient20 ssl-cert
Suggested packages:
  procmail postfix-pgsql postfix-ldap postfix-pcre postfix-lmdb
...
...

我们必须回答有关邮件类型和邮件服务器的名称的两个问题。
确保将主机名和域值替换为

  • 邮件配置类型:互联网
  • 系统邮件名称:hostname.theitroad.com

确保通过编辑其配置文件,确保SASL在启动时运行

# vim /etc/default/saslauthd
# Should saslauthd run automatically on startup? (default: no)
START=yes

现在重新启动服务

# systemctl restart saslauthd

当我们使用虚拟用户配置邮件服务器时,我们需要所有邮箱的所有者,因此将创建一个系统用户,该系统用户将由所有虚拟用户使用以访问服务器上的电子邮件。
首先,创建将存储邮箱的组所有者和文件夹。

# groupadd -g 5000 vmail && mkdir -p /var/mail/vmail

现在创建所有者

# useradd -u 5000 vmail -g vmail -s /usr/sbin/nologin -d /var/mail/vmail

确保授予邮件目录权限到所有者,以便它可以将邮件存储到相应的目录中。

# chown -R vmail:vmail /var/mail/vmail

如果我们不这样做,Dovecot将无法创建所需的文件夹来存储电子邮件。

b)为数据库创建配置文件

现在创建一个包含某些数据库文件的文件夹

# mkdir -p /etc/postfix/sql

Postfix需要03数据库文件,它将允许它访问我们之前创建的数据库:

  • 包含在服务器上托管的域名列表的域。它将允许PostFix确定是否在其上收到电子邮件([email protected])时使用域(Mytuto.com)。如果是这种情况,它将意味着域名在我们的数据库中。
# vim /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix-db-password
hosts = 127.0.0.1
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

我们将启用配置并自动添加到"/etc/postfix/main.cf"文件中,然后重新加载Postfix配置,以避免手动执行此操作。
因此,每次使用此命令使用新值时都会更新该文件。

# postconf -e virtual_mailbox_domains=mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf

现在我们可以检查配置。
我们将运行一个命令,该命令将执行文件中包含的查询,以便在数据库中搜索域。
如果域不存在,则必须返回一个元素(搜索域)或者没有任何内容。

# postmap -q mytuto.com mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
mytuto.com

正如我们所看到的,Postfix能够检索存储在我们的数据库中的域

  • 邮箱存储所有虚拟电子邮件地址。如果存在邮箱,它将用于验证
# vim /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix-db-password
hosts = 127.0.0.1
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

现在让我们更新配置文件

# postconf -e virtual_mailbox_maps=mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf

运行命令以在数据库上测试查询

# postmap -q [email protected] mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
mytuto.com/alain/
  • 别名包含不同的电子邮件别名。
# vim /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix-db-password
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

现在添加配置

# postconf -e virtual_alias_maps=mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf

现在运行命令以测试查询。
它是应该显示而不是滥用地址的目标用户([email protected])。
它显示Postfix可以进行匹配。

# postmap -q [email protected] mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
[email protected]

确保这些文件不可通过普通用户读取,因为密码清除。

# ls -l /etc/postfix/sql/
total 12
-rw-r--r-- 1 root root 138 Jun 13 06:53 mysql_virtual_alias_maps.cf
-rw-r--r-- 1 root root 140 Jun 13 05:18 mysql_virtual_domains_maps.cf
-rw-r--r-- 1 root root 144 Jun 13 07:04 mysql_virtual_mailbox_maps.cf

为了读取这些文件的Postfix,我们可以将群组所有者更改为Postfix

# chgrp postfix /etc/postfix/sql/mysql_*.cf
# ls -l /etc/postfix/sql/
total 12
-rw-r--r-- 1 root postfix 138 Jun 13 06:53 mysql_virtual_alias_maps.cf
-rw-r--r-- 1 root postfix 140 Jun 13 05:18 mysql_virtual_domains_maps.cf
-rw-r--r-- 1 root postfix 144 Jun 13 07:04 mysql_virtual_mailbox_maps.cf

c)配置Postfix

现在我们将手动编辑Postfix主要配置文件。
所以,在编辑之前制作副本

# cp /etc/postfix/main.cf /etc/postfix/main.cf.bak

现在,我们将激活SASL以强制身份验证,以便向Dovecot发送电子邮件和手掉身份验证。
请务必在下面添加线条

# vim /etc/postfix/main.cf
# Allow authenticated users to send email, and use Dovecot to authenticate them. Tells Postfix to use Dovecot for authentication
smtpd_sasl_type = dovecot
## Path to the Postfix auth socket
smtpd_sasl_path = private/auth
## Tells Postfix to let people send email if they've authenticated to the server.
## Otherwise they can only send if they're logged in (SSH)
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
# Enable authentication only for those with a TLS connection.
smtpd_tls_security_level = may
smtpd_tls_auth_only = no
# Tells Postfix who can send email: SASL-authenticated users connecting from a network specified in 'mynetworks'
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination

现在让我们编辑/etc/postfix/master.cf配置文件。
这是流程配置文件。
我们将通过添加或者取消注释下面的线路并在之前添加安全的SMTP端口

# cp /etc/postfix/master.cf /etc/postfix/master.cf.bak
# vim /etc/postfix/master.cf
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_tls_auth_only=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

现在,我们可以运行postconf -n命令查看一些错误

# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
...
...

如果没有警告消息,则表示文件不包含错误。
现在,我们可以重新启动PostFix服务

# systemctl restart postfix
# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
   Active: active (exited) since Wed 2016-06-13 10:16:02 UTC; 27s ago
  Process: 12225 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 12225 (code=exited, status=0/SUCCESS)

步骤3)安装和配置Dovecot

既然正在安装和配置PostFix,我们需要安装PostFix来管理POP和IMAP协议,这使我们能够恢复我们的电子邮件。

a)安装Dovecot

Dovecot软件包在Ubuntu 18.04默认存储库中是呈现的。
我们将使用MySQL支持安装。
我们将安装筛子,这是有用的,因为它会自动将邮件放入相应的文件夹中。
这意味着,对于每个域,它将创建一个包含虚拟用户的相应文件夹的相应文件夹来存储其电子邮件文件。

# apt install dovecot-imapd dovecot-mysql dovecot-managesieved
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  dovecot-core dovecot-sieve libexttextcat-2.0-0 libexttextcat-data
Suggested packages:
...
...

了解,如果我们不想使用筛子,对于每个域,我们可能需要手动创建相应的文件夹,以便存储其电子邮件,如果我们有许多域,则不容易。

b)Dovecot的配置

Dovecot的配置包含在"/etc/dovecot/conf.d"中的倍数文件中。
首先,检查"/etc/dovecot/dovecot.conf"的内容,以使这些行取消注明

!include_try /usr/share/dovecot/protocols.d/*.protocol
!include conf.d/*.conf

现在转到包含配置文件的文件夹

# cd /etc/dovecot/conf.d

我们会编辑:

  • "10-auth.conf"文件通过添加或者取消关注行来修改连接机制。 Dovecot默认使用系统用户,但我们使用MySQL用户
# cp 10-auth.conf 10-auth.conf.bak
# vim 10-auth.conf
auth_mechanisms = plain login
#!include auth-system.conf.ext
!include auth-sql.conf.ext
  • sql配置的auth-sql.conf.ext文件
# cp auth-sql.conf.ext auth-sql.conf.ext.bak
# vim 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/vmail/%d/%n
}
  • 现在让我们编辑"/etc/dovecot/dovecot-sql.conf.ext""告诉Dovecot如何连接到SQL数据库
# cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.bak
# vim /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=postfix-db-password
password_query = SELECT username,domain,password FROM mailbox WHERE username='%u';
default_pass_scheme = MD5-CRYPT
  • 现在我们将编辑"10-mail.conf"文件"以配置邮件位置目录
# cp 10-mail.conf 10-mail.conf.bak
# vim 10-mail.conf
mail_location = maildir:/var/mail/vmail/%d/%n/Maildir
mail_privileged_group = mail
  • 现在我们将编辑"10-Master.conf"文件以获取与套接字的连接。
# cp 10-master.conf 10-master.conf.bak
# vim 10-master.conf
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
  user = dovecot
}
  • 现在我们需要配置LDA15-lda.conf文件以指示筛子,以便自动将邮件组织到相应的文件夹中
# cp 15-lda.conf 15-lda.conf.bak
# vim 15-lda.conf
protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}

如果我们希望VMAIL用户可以启动Dovecot,我们应该提供许可

# chgrp vmail /etc/dovecot/dovecot.conf

现在,我们可以重新启动Dovecot服务

# systemctl restart dovecot

我们可以检查邮件日志是否有任何错误

# tail -n 20 -f /var/log/mail.log

c)将Dovecot整合到Postfix中

现在我们已经配置了Dovecot,我们应该指示Postfix与Dovecot一起使用。
编辑主Postfix配置文件,并在文件末尾添加下面的行

# vim /etc/postfix/master.cf
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}

现在编辑主要的Postfix配置文件

# vim /etc/postfix/main.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

然后重新启动Postfix.

# systemctl restart postfix

我们可以检查邮件日志是否有任何错误

# tail -n 20 -f /var/log/mail.log
Jun 14 08:10:00 myserver postfix/postfix-script[28361]: starting the Postfix mail system
Jun 14 08:10:00 myserver postfix/master[28363]: daemon started -- version 3.3.0, configuration /etc/postfix

我们可以看到所有配置都很好。
现在我们需要做一些测试

步骤4)邮件服务器的测试

对于指令行的测试,我们需要在发送电子邮件之前安装Modutils包

# apt install mailutils
Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following additional packages will be installed:
 guile-2.0-libs libgc1c2 libgsasl7 libkyotocabinet16v5 libltdl7 libmailutils5 libntlm0 libpython2.7 libpython2.7-minimal libpython2.7-stdlib
 mailutils-common
...
...

现在我们需要发送一些电子邮件并检查与域和用户对应的文件夹是否有效地创建。
为此,我们将在配置期间首先向我们的当前用户发送邮件给我们的postfixadmin中创建的用户

# echo "Hello Alain" | mail -s "test mail" [email protected]

首先,让我们检查邮件日志

# tail -n 20 -f /var/log/mail.log
Jun 14 08:17:04 myserver postfix/qmgr[28374]: 1715240BF9: from=<[email protected]>, size=384, nrcpt=1 (queue active)
Jun 14 08:17:04 myserver dovecot: lda([email protected]): msgid=<[email protected]>: saved mail to INBOX
Jun 14 08:17:04 myserver postfix/pipe[28406]: 1715240BF9: to=<[email protected]>, relay=dovecot, delay=0.05, delays=0.02/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)
Jun 14 08:17:04 myserver postfix/qmgr[28374]: 1715240BF9: removed

我们可以看到邮件已成功发送。
现在让我们检查是否已创建相应的文件夹

# ls -R /var/mail/vmail/
/var/mail/vmail/:
mytuto.com
/var/mail/vmail/mytuto.com:
alain
/var/mail/vmail/mytuto.com/alain:
Maildir
/var/mail/vmail/mytuto.com/alain/Maildir:
cur  dovecot.index.cache  dovecot.index.log  dovecot-uidlist  dovecot-uidvalidity  dovecot-uidvalidity.5b222480  new  tmp
/var/mail/vmail/mytuto.com/alain/Maildir/cur:
/var/mail/vmail/mytuto.com/alain/Maildir/new:
'1528964224.M129536P28407.myserver,S=455,W=467'
/var/mail/vmail/mytuto.com/alain/Maildir/tmp:

我们可以看到文件夹自动出现。
为了更好的观点,让我们尝试使用命令树。
首先安装它

apt install tree

现在让我们看看邮件文件夹更好的视图

# tree /var/mail/vmail/
/var/mail/vmail/
└── mytuto.com
    └── alain
        └── Maildir
            ├── cur
            ├── dovecot.index.cache
            ├── dovecot.index.log
            ├── dovecot-uidlist
            ├── dovecot-uidvalidity
            ├── dovecot-uidvalidity.5b222480
            ├── new
            │   └── 1528964224.M129536P28407.myserver,S=455,W=467
            └── tmp
6 directories, 6 files

现在你可以完美看。
我们可以通过在postfixadmin上创建新的虚拟域和用户来完成另一个测试。
让我们创建虚拟域example.com

和虚拟用户[email protected]

现在让我们向新的虚拟用户发送邮件

# echo "Hello Francois" | mail -s "test config" [email protected]

现在检查邮件日志

# tail -n 20 -f /var/log/mail.log
Jun 14 08:35:10 myserver postfix/qmgr[28374]: CE43F40C5E: from=<[email protected]>, size=393, nrcpt=1 (queue active)
Jun 14 08:35:10 myserver dovecot: lda([email protected]): msgid=<[email protected]>: saved mail to INBOX
Jun 14 08:35:10 myserver postfix/pipe[28481]: CE43F40C5E: to=<[email protected]>, relay=dovecot, delay=0.06, delays=0.02/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)
Jun 14 08:35:10 myserver postfix/qmgr[28374]: CE43F40C5E: removed

现在验证文件夹树

# tree /var/mail/vmail/
/var/mail/vmail/
├── example.com
│   └── francois
│       └── Maildir
│           ├── cur
│           ├── dovecot.index.cache
│           ├── dovecot.index.log
│           ├── dovecot-uidlist
│           ├── dovecot-uidvalidity
│           ├── dovecot-uidvalidity.5b2228be
│           ├── new
│           │   └── 1528965310.M888145P28482.myserver,S=468,W=480
│           └── tmp
└── mytuto.com
    └── alain
        └── Maildir
            ├── cur
            ├── dovecot.index.cache
            ├── dovecot.index.log
            ├── dovecot-uidlist
            ├── dovecot-uidvalidity
            ├── dovecot-uidvalidity.5b222480
            ├── new
            │   └── 1528964224.M129536P28407.myserver,S=455,W=467
            └── tmp

我们可以看到我们有两个子目录,其中包含域mytuto.com和example.com的每个虚拟用户的文件。
现在让我们做最后一个测试,虚拟用户将是交换电子邮件

# echo "Hello Francois, it's Alain" | mail -s "Subject" -aFrom:alain\<[email protected]\> [email protected]

检查邮件日志

# tail -n 20 -f /var/log/mail.log
Jun 14 23:15:01 myserver postfix/pickup[28373]: 8558240BDA: uid=0 from=<[email protected]>
Jun 14 23:15:01 myserver postfix/cleanup[28595]: 8558240BDA: message-id=<[email protected]>
Jun 14 23:15:01 myserver postfix/qmgr[28374]: 8558240BDA: from=<[email protected]>, size=398, nrcpt=1 (queue active)
Jun 14 23:15:01 myserver dovecot: lda([email protected]): msgid=<[email protected]>: saved mail to INBOX
Jun 14 23:15:01 myserver postfix/pipe[28597]: 8558240BDA: to=<[email protected]>, relay=dovecot, delay=0.05, delays=0.02/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)
Jun 14 23:15:01 myserver postfix/qmgr[28374]: 8558240BDA: removed

我们现在可以看到邮件文件夹

# tree /var/mail/vmail/
/var/mail/vmail/
├── example.com
│   └── francois
│       └── Maildir
│           ├── cur
│           ├── dovecot.index.cache
│           ├── dovecot.index.log
│           ├── dovecot-uidlist
│           ├── dovecot-uidvalidity
│           ├── dovecot-uidvalidity.5b2228be
│           ├── new
│           │   ├── 1528965310.M888145P28482.myserver,S=468,W=480
│           │   └── 1528966081.M582572P28598.myserver,S=455,W=467
...
...

我们可以看到文件夹新文件包含两个文件。
我们可以打开包含邮件的文件

# cat /var/mail/vmail/example.com/francois/Maildir/new/1528966081.M582572P28598.hostname\,S\=455\,W\=467 
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: by myserver.theitroad.com (Postfix, from userid 0)
        id 8558240BDA; Thu, 14 Jun 2016 23:15:01 +0000 (UTC)
Subject: Subject
From: alain<[email protected]>
To: <[email protected]>
X-Mailer: mail (GNU Mailutils 3.4)
Message-Id: <[email protected]>
Date: Thu, 14 Jun 2016 23:15:01 +0000 (UTC)
Hello Francois, it's Alain