SMTP问题概述

昨天群里的小伙伴遇到一个问题,使用Linode的VPS搭建的WordPress网站,然后询盘邮件接收不到,最后有个小伙伴帮忙给解决了,给Linode客服发送邮件,请Linode开启了SMTP端口。

常用一些Email端口有25、587、465等,请Linode客服开启了这些端口以后,就可以正常接收询盘邮件了。然后小伙伴们就以为这个问题是需要这么解决的,当时我就提出了疑问,虽然没有详细研究过我们现在这种用法,但一直感觉哪里是不对的,我们都使用了zoho.com的邮件服务器了,为啥需要开自己的VPS端口?

外贸独立站的常规用法

现在介绍一下我们一般如何使用邮件服务器,因为我们搭建的是外贸独立站,不管是B2B,还是B2C的独立站,都是一个正规的企业独立站,因为对外来说,我们就是一个企业,那么作为一个企业,使用的邮箱不能是[email protected]这样的吧,这样感觉不正是,应该是[email protected],或者[email protected],或者[email protected]

其中contact或者support这个属于通用名称,比如我们看到一些公司的企业邮箱也会用这个当用户名。ensky就是一个用户个人名字了。关键是后面的ensky.tech,这个是我自己的域名,假如我这是一个独立站的话,使用[email protected]这样的域名邮箱就会显的比较正式。

在外贸独立站配置企业邮箱的方法

一般有两种方法可以用

方法1:直接使用wp_mail()函数发送邮件

wp_mail函数介绍:https://developer.wordpress.org/reference/functions/wp_mail/

这个实际上使用的就是VPS自身作为一个邮局,我们发送邮件的时候走的就是VPS自己,就是等于你申请的这个VPS既用来建了一个独立站,又用来作为了一个”邮件服务器“,因为也可以用它来收发邮件。

这个时候就需要开启本机的SMTP一类的端口,因为邮件服务器默认会使用这些端口,但你这些端口没有的打开,邮件服务器当然不工作了。就像是我们平常进超市的时候都是走正门,后门是搬运货物用的。这个正门就像一个端口,那超市正门关着,我们肯定进不去了。

方法2:使用SMTP插件

比如比较出名的一个插件”WP Mail SMTP by WPForms“,官网地址https://wordpress.org/plugins/wp-mail-smtp/

这个插件会提供好多的配置,比如经常用的有zoho.com,把zoho作为一个SMTP服务器使用,那么我们就可以将zoho.com配置到”WP Mail SMTP by WPForms“中,这个时候使用的实际上是zoho.com提供的邮件服务,并不是我们自己VPS的邮件服务。

所以如果使用zoho.com的时候是不需要开启本机的SMTP端口的。那么我们WordPress发送邮件的时候,是怎么和zoho.com通信的呢?我看了一下这个插件的介绍,它写的是通过API的方式通信的。

介绍:

HOW DOES WP MAIL SMTP WORK?

WP Mail SMTP plugin easily resolves email delivery problems by improving and changing how your WordPress site sends email. We reconfigure the wp_mail() function to either use proper SMTP host credentials or leverage a built-in SMTP mail provider.

When using one of our built-in SMTP mail provider integrations (recommended), emails are sent using the provider’s direct API. This means even if your web host is blocking SMTP ports, your emails still send successfully.

实际测试

理论终归是理论,实际上是不是这样?需要验证一下。

申请一台新的Linode VPS开始测试。

昨天晚上的时候我就开通了一台Linode的VPS,搭建好宝塔,装上WordPress,然后申请了一个新的zoho.com账号,把我的ensky.tech的域名映射过去了。

然后新搭建了一个测试网页:
https://test.ensky.tech/sample-page/

网页上做了两个按钮,分别使用的是elementor自带的form表格,还有就是使用的是WPForm自带的表格。

刚开的时候,发送邮件并不成功,然后我去了检查了一下WPForm的配置,那个配置中,使用的是admin的邮箱。admin的邮箱是我的一个126的邮箱,但是我zoho配置的是ensky.tech,WordPress中SMTP插件配置的也是ensky.tech的域名邮箱,所以我在这个地方就把它给改过来了,改成了发送邮件为[email protected]。改完这个以后,就可以发送成功了。

理论上如果Elementor自带的Form发送不成功也是正常的,因为它默认使用的邮局不知道是谁,时间仓促我没去搜如何更改Elementor Form默认邮局的配置,所以没有对它抱有希望,但是经过我上述配置以后,发现直接用Elementor自带的Form也可以发送成功,说明WP SMTP插件和WPForm插件对其默认配置产生了影响,因为没有改之前,我尝试过发送,显示无法送达。

然后WPForm可以发送成功,应该是正常的,毕竟WPForm和WP SMTP是一家的,我都用WP SMTP配置了默认SMTP服务了,你还不去用?

发送邮件的图片:

接收到邮件的图片

上面是一串随机数,特意找了一串随机数,防止我图片造假,哈哈。

宝塔端口配置

结论

所以经过实际检验,如果使用SMTP插件的话,比如使用zoho,就不需要在VPS上开通SMTP端口,也可以可以发送邮件。期间我并没有给Linode客服发送任何邮件,然后宝塔上的防火墙也没有开启对应端口。

但上面这段话是错误的,为啥能发送成功呢?是因为我这是一个Linode老账号,之前申请开通过SMTP的端口,所以说链接起来很畅通。

今天在群里发了这个结论,引起了小伙伴的强烈反对,但是我也没有错啊,我就是正常申请的。就是因为我之前申请开通过了,所以我这个账户下再新开Instance的时候就默认打开对应的端口了。

所以有个小伙伴给申请了一台新的Linode的VPS,然后我重新开始配置,等到搭建SMTP服务器的时候,发现总是链接不上,时间长了就报524错误,如果安装Easy SMTP的话就会直接打印错误的日志给你。

实际上SMTP就是一种协议,https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol,这里介绍了SMTP协议的运行方式。SMTP协议我是知道的,但是我以为我们通过WordPress连接到zoho的时候,并不是走的SMTP呢,但是实际上我们平常配置的时候,比如使用Easy SMTP这类插件,使用的还是SMTP的端口。所以如果Linode不开启这个端口的话,就无法配置成功。

另一个问题与之前所学不一样的就是本机防火墙的配置,实际上我安装了宝塔软件,然后宝塔是配置防火墙的,但在防火墙这里我并没有开启SMTP的几个端口,那为啥可以用呢?

不开通SMTP端口发邮件的方式

不过确实存在不开通SMTP端口也可以发送邮件的方式,就是使用API的方式,比如我们使用mailgun然后填写私有API秘钥就可以使用了。

这个方式需要先去mailgun申请账户,开通以后添加信用卡信息,升级到付费计划,添加域名以后,才能正式发送邮件。