欢迎来到我们关于如何配置 Postfix 以在 Ubuntu 20.04 上使用 Gmail SMTP 中继邮件的教程。Postfix是一个免费的开源邮件传输代理,用于路由和传递电子邮件。Postfix MTA 可以配置为通过外部 SMTP 服务器(例如 Gmail SMTP 服务器)中继邮件,以实现可靠的邮件传递。
在 Ubuntu 20.04 上安装 Postfix
您可以通过安装postfix
包本身或通过mailutils
与它一起安装的包来安装 Postfix。
apt install postfix
要么
apt install mailutils
在安装过程中,系统会提示您提供一些配置 Postfix 所需的信息。
选择邮件服务器类型
选择最适合您的环境需要的邮件服务器类型配置。您有多种选择;
No configuration
:应该选择保持当前配置不变。Internet site
:使用 SMTP 直接发送和接收邮件。Internet with smarthost
: 使用 SMTP 或通过运行 fetchmail 等实用程序直接接收邮件。外发邮件使用智能主机发送。Satellite system
:所有邮件都被发送到另一台称为“智能主机”的机器上进行投递。Local only
: 唯一投递的邮件是本地用户的邮件。没有网络。
选择 Internet Site
启用 Postfix 以发送和接收邮件,然后按 Enter 继续。
设置系统邮件名称
是用于“限定”mail name
没有域名的 _ALL_ 邮件地址的域名,例如kifarunix-demo.com
,在我们的例子中。
您始终可以通过执行以下命令在安装后重新配置 postfix 来重置这些设置。
dpkg-reconfigure postfix
在 Ubuntu 20.04 上配置 Postfix 以使用 Gmail SMTP
Postfix 现在设置为默认配置。要进行进一步的配置更改,请编辑主 Postfix 配置文件,/etc/postfix/main.cf
并根据需要进行任何必要的更改。
您可以使用 postconf 命令查看 Postfix 配置值;
postconf
设置 Postfix 中继服务器
Postfix 可以配置为通过中继主机间接传递邮件。可以使用relayhost
参数在 Postfix 配置文件上定义中继主机。
默认情况下,relayhost
参数的值为空。这个配置 Postfix 是为了尝试将邮件直接投递到 Internet,这通常是不可取的。
根据Postfix 配置,可以为 relayhost 参数设置不同的值;
- 在 Intranet 上,您可以指定您的组织域名。如果您的内部 DNS 不使用 MX 记录,请改为指定 Intranet 网关主机的名称。
- 在 SMTP 或 LMTP 传送的情况下,以域名、主机名、主机名:端口、[主机名]:端口、[主机地址] 或 [主机地址]:端口的形式指定一个或多个目的地,以逗号或空格分隔。表单 [hostname] 关闭 MX 查找。
在我们的例子中,我们将 Postfix 中继设置为 Gmail SMTP 服务器。因此,打开 Postfix 主配置文件;
vim /etc/postfix/main.cf
找到行,,relayhost =
并将其值设置为 Gmail SMTP 域名,如下所示;
...
mydestination = $myhostname, kifarunix-demo.com, ubuntu20, localhost.localdomain, localhost
relayhost = [smtp.gmail.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
...
配置 Postfix SASL 身份验证
根据后缀:
- SMTP 服务器需要决定是否授权 SMTP 客户端将邮件发送到远程目的地,或仅发送到服务器本身负责的目的地。
- 通常,当客户端的 IP 地址与服务器的 IP 地址在“同一网络”中时,SMTP 服务器会接受发送到远程目的地的邮件。
- SMTP 服务器网络之外的 SMTP 客户端需要不同的方式来获得“相同网络”权限。为了满足这一需求,Postfix 支持 SASL 身份验证。这样,远程 SMTP 客户端可以向 Postfix SMTP 服务器进行身份验证,而 Postfix SMTP 客户端可以向远程 SMTP 服务器进行身份验证。
- 一旦客户端通过身份验证,服务器就可以赋予它“相同的网络”权限。
要启用 SASL 服务器身份验证,您需要:
smtp_sasl_auth_enable
通过将值设置为来 启用 SMTP 客户端身份验证yes
。smtp_sasl_auth_enable = yes
- 配置 Postfix SMTP 客户端以将用户名和密码信息发送到邮件网关服务器。这可以通过将路径定义
sasl_passwd
为使用smtp_sasl_password_maps
参数来完成。smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
- 对传出 SMTP 实施 STARTTLS 加密,以确保使用该
smtp_tls_security_level
参数加密与远程 smtp 服务器的连接。smtp_tls_security_level = encrypt
- 定义 Postfix SMTP 客户端 SASL 安全选项。这是以下选项中的零个或多个;
- noplaintext:禁止使用明文密码的方法。
- noactive:禁止方法受到主动(非字典)攻击。
- nodictionary:禁止方法受到被动(字典)攻击。
- noanonymous:禁止允许匿名身份验证的方法。
- 相互身份验证:仅允许提供相互身份验证的方法。
smtp_sasl_security_options = noanonymous
这些配置可以在 Postfix 配置文件中更新(参见突出显示的行);
...
relayhost = [smtp.gmail.com]:587
...
#
...
smtp_tls_CApath=/etc/ssl/certs
#smtp_tls_security_level=may
smtp_tls_security_level=encrypt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
...
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
保存并退出配置文件。
设置 SMTP SASL 凭据
根据我们上面的配置,SASL 凭证数据库文件设置为/etc/postfix/sasl_passwd
.
您应该以以下格式定义 SMTP 凭据;
# destination credentials
[smtp.domain.name] username:password
如下所示;
vim /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 userid@gmail.com :password
将userid@gmail
and替换为password
您的 Gmail 帐户凭据。
笔记:
- 如果您在 目标中指定“
[
”和“] ” ,relayhost
您还必须在文件smtp_sasl_password_maps
中使用相同的格式 。 - 如果您在目标中指定非默认 TCP 端口(例如“
:submission
”或“:587
”),则relayhost
还必须在文件中使用相同的smtp_sasl_password_maps
格式。
保护 SASL 密码文件
凭据以明文形式设置。为了保护其他用户对文件的访问,使文件只读+写入仅用于 root
.
chown root:root /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
创建 SASL 密码数据库文件
Postfix 要求该 sasl_passwd
文件是一个数据库,以便可以更快地读取它。使用 postmap
命令将文件转换为数据库, sasl_passwd.db
.
postmap /etc/postfix/sasl_passwd
这将为上面为 sasl_passwd 文件设置的数据库文件分配相同的所有权和权限。
ls -l /etc/postfix/sasl_passwd*
-rw------- 1 root root 53 Jun 1 13:57 /etc/postfix/sasl_passwd
-rw------- 1 root root 12288 Jun 1 14:06 /etc/postfix/sasl_passwd.db
检查postfix配置
运行 postfix check
命令检查 Postfix 配置是否有任何错误。任何错误都应打印在输出上。
postfix check
您可以忽略警告,postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out
.
重启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 Mon 2020-06-01 14:11:55 UTC; 5s ago
Process: 7507 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 7507 (code=exited, status=0/SUCCESS)
Jun 01 14:11:55 ubuntu20 systemd[1]: Starting Postfix Mail Transport Agent...
Jun 01 14:11:55 ubuntu20 systemd[1]: Finished Postfix Mail Transport Agent.
发送测试邮件以验证 Postfix Gmail SMTP 中继
完成配置后,您可以尝试发送测试邮件以验证 Gmail SMTP 中继是否正常工作。为此,您可以使用邮件客户端或任何其他客户端。
echo "Test Postfix Gmail SMTP Relay" | mail -s "Postfix Gmail SMTP Relay" userid@gmail.com
您可以跟踪日志以检查交付状态;
tail /var/log/mail.log
如果您收到错误消息;
...status=deferred (SASL authentication failed; server smtp.gmail.com[74.125.133.108] said: 535-5.7.8 Username and Password not accepted.
您需要登录您用于 SASL 身份验证的帐户并启用较不安全的应用程序访问。
之后,重试发送测试邮件并检查日志,万岁,我们的测试邮件已送达,status=sent。
...
Jun 1 14:22:42 ubuntu20 postfix/smtp[7650]: 6892D40186: to=userid@gmail.com, relay=smtp.gmail.com[173.194.76.109]:587, delay=4.8, delays=0.35/0.03/3.6/0.8, dsn=2.0.0, status=sent (250 2.0.0 OK 1591021361 k12sm19227410wrn.42 - gsmtp)
...
这标志着我们关于如何在 Ubuntu 20.04 上安装和配置 Postfix 以使用 Gmail SMTP 中继主机的指南的结束。享受。
阅读更多关于 Postfix 配置的信息;
相关教程
在 Ubuntu 18.04/Debian 10/9 上配置 Sendmail 以使用 Gmail 中继