在 Ubuntu 16.04 VPS 中,使用 DigitalOcean 中的 LEMP,我有一个 WordPress 网站,其中包含我创建的联系表单联系表格 7(CF7)。
我的问题
我在将电子邮件从我的 WordPress 联系表单 (CF7) 传输到我的电子邮件 (Gmail) 时遇到了问题。
我必须说,我谦虚地更喜欢非插件解决方案。
我的机器的 DNS 区域
A
记录持有的域名。Cname
记录保存www.
该域名的变体。- 三个
NS
记录将 DNS 请求与我的域、我的 IP 以及其机器上的相关应用程序关联起来。
我确实尝试MX
通过自动 DigitalOcean 方式添加记录(通过单击Add Gmail MX records
DigitalOcean DNS 管理工具中的按钮),并且MX
添加了 5 条记录,但在我立即尝试从 WordPress 发送测试电子邮件后仍然出现相同的错误(请参阅下面的错误)。
目前,DNS 区域没有MX
记录,因为我不确定是否需要这些记录,如果我在电子邮件中想要的只是将 WordPress 联系表单查询发送到我的 Gmail 帐户,而我仍然处于相同状态并出现相同的错误。
确切的错误和调试尝试:
我总是收到以下错误消息,在联系表单下的红色框内:
无法发送您的消息。
由于此错误,没有任何内容被发送到任何地方(甚至没有发送到垃圾邮件文件夹)。
为了调试这个问题,我运行了以下代码来为 Postfix 创建日志:
touch /var/log/mail.log
- Nginx 日志中没有错误。
权限如下:
rw-r--r-- 1 root root
但是错误日志中什么也没有写后我尝试给自己发送一封测试电子邮件但失败了。
重现我的问题:
- 创建一个 DigitalOcean Ubuntu 16.04 droplet。
- 创建 LEMP 堆栈并在其上运行 WordPress 网站。
sudo apt-get update && sudo apt-get upgrade postfix
。- 选择“internet-site”配置。
- 输入您工作的站点的域名。
- 在您的 WordPress 网站上安装 Contact Form 7 并尝试向自己发送测试电子邮件。
我的问题
是什么导致了这个问题?
也许我可以尝试使用 Postfix 或其他工具,例如SMTP协议? 我更喜欢简单到无需配置的工具。我强调一下,除了那些登录到 WordPress 联系表单的电子邮件外,我不会向我的 Gmail 发送任何其他电子邮件,也不会从这台机器向任何地方发送任何其他电子邮件。
过去,我按照上述方法安装了 Postfix,没有出现任何问题。如果您知道要检查什么、我应该提供哪些详细信息,请告诉我,我会进行编辑。
更新
1)文件/etc/postfix/main.cf
全部为默认。
2)输出ps -efl | grep postfix
:
5 S root 4611 1 0 80 0 - 16352 ep_pol 07:42 ? 00:00:00 /usr/lib/postfix/sbin/master -w
4 S postfix 4613 4611 0 80 0 - 16881 ep_pol 07:42 ? 00:00:00 qmgr -l -t unix -u
4 S postfix 4930 4611 0 80 0 - 16869 ep_pol 11:02 ? 00:00:00 pickup -l -t unix -u -c
0 S root 5201 5187 0 80 0 - 3236 pipe_w 12:19 pts/0 00:00:00 grep --color=auto postfix
答案1
问题似乎来自 WordPress,特别是联系表单的配置,因为这个问题也发生在sSMTP
一些人认为比 Postfix 更简单的工具上:
当我删除原始表单并创建一个新表单时,我收到一条绿色消息,提示该消息是在测试电子邮件中发送的。
在这里,我甚至没有收到垃圾邮件目录的任何消息,但至少响应是不同的,并且原始问题与 Postfix 无关。
答案2
从如何修复 wordpress 联系表单无法使用 smtp 发送电子邮件:
为什么 WordPress 不发送电子邮件
WordPress 使用 PHP 邮件功能发送由 WordPress 或任何联系人插件(如 WPForms)生成的电子邮件。但是,许多 WordPress 托管服务器未配置为使用邮件功能。
此外,为了减少垃圾邮件,您的电子邮件提供商通常会检查您的电子邮件是否来自其声称的来源地。例如,如果您的电子邮件服务器是 yahoo.com,但您的电子邮件声称是从您网站的域发送的,那么您的表单通知很有可能在到达垃圾邮件文件夹之前就被阻止。
这就是为什么我们建议使用 SMTP 从 WordPress 发送电子邮件而不是使用默认的 PHP 邮件功能。
SMTP(简单邮件传输协议)是发送电子邮件的行业标准方式,它使用适当的身份验证方法来确保电子邮件的送达率。
七种不同的方式度过周日
此部分标题是因为今天是星期天,文章如何修复 wordpress 联系表单无法使用 smtp 发送电子邮件列出了设置 SMTP 的七种不同方法:
- WP Mail SMTP:SMTP 设置
- Gmail 或 G Suite
- 发送网格
- 邮件枪
- 邮戳
- 可湿性砂浆
- SparkPost
SMTP 设置
对于我自己,我使用最简单的方法通过cron
电子邮件向我发送错误消息和每日备份报告:将 Linux 配置、脚本和文档备份到 Gmail。
总结一下步骤:
sudo apt install ssmtp
sudo apt install sharutils
您还需要指示 Gmail 允许不太安全的访问您自己,以便接受电子邮件。这已记录在我上面的回答中。
您的配置文件ssmtp
必须可以改变。这是我的:
$ sudo cat /etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
# November 17, 2017.
# Required for cron to e-mail backups as per Ask Ubuntu answer:
# https://askubuntu.com/questions/917562/backup-linux-configuration-scripts-and-documents-to-gmail/922493#922493
#root=postmaster
[email protected]
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
#mailhub=mail
mailhub=smtp.gmail.com:587
[email protected]
AuthPass=WinEunuuchs2UnixPassword
UseTLS=YES
UseSTARTTLS=YES
#Debug=YES
# Where will the mail seem to come from?
#rewriteDomain=
rewriteDomain=gmail.com
# The full hostname
hostname=alien
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
将以上几行更改为您的 gmail 帐户名、密码和机器名:
[email protected]
[email protected]
AuthPass=WinEunuuchs2UnixPassword
hostname=alien
注意WinEunuuchs2Unix密码是您的 gmail 密码,而不是您的 Linux 密码。供您hostname
使用echo $HOSTNAME
。
关注 WordPress 文章中的链接。
应遵循上面第一个链接中的 WordPress 文章中的链接来设置 gmail。仅参考我的链接以获取基本概述。