WordPress网站开启邮件发送功能

 

前言

最近搭建WordPress网站时,开启允许用户注册功能后,想要实现新用户通过邮件链接方式激活账号功能,此时就需要使网站具有邮件发送功能。
在具体实现过程中遇到了几个头疼的问题,经过网上查阅信息、请教别人等方式,结果还是没有完全解决问题,中间重复尝试了各大邮箱平台STMP服务器端口测试,检测服务器安全组设置,更换服务器PHP版本,更换插件等方法,最终通过调试详细了解错误日志发现是服务器内部文件配置问题,准确说是PHP配置文件
通过这次经历,感觉除了在解决这个问题上等其他方面收获很多,于是就详细记录下WordPress网站开启邮件发送功能的配置和问题解决方案以及收获感悟。

目录

  • 0 几点提示
  • 1 操作环境
  • 2 开启SMTP服务
  • 3 安装插件
  • 4 配置信息
  • 5 处理问题
  • 6 避坑技巧
  • 7 总结经验

0、几点提示

  • 1 注意演示环境问题,环境不同通常会导致错误问题不同,解决办法不一致。
  • 2 我这里是基于在服务器安装宝塔面板上操作的
  • 3 修改配置文件时,可以先把文件下载出来,便于搜索查找和修改,宝塔面板可以直接搜索使用。

1、操作环境

  • 服务器: Linux Ubuntu 20.04 (阿里云服务器)
  • Web服务器: Nginx 1.14.2
  • PHP: 8.0
  • WordPress: 5.7.2

2、开启SMTP服务

提示
由于遇到问题时,猜测可能是邮箱的原因,我这里尝试开通了QQ邮箱和网易163邮箱的SMTP服务,在这里我以QQ邮箱演示。

首先登陆自己QQ邮箱到网页版界面,找到设置->账户-> 看到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启对应服务(默认是关闭的)。

QQ邮箱SMTP服务开启

然后点击获取授权码,授权码一般是随机的16个字母,鼠标滑过Ctrl+C复制到一个地方存起来。

获取授权码

注意
这里的授权码就是一会要在插件配置信息中用到的smtp服务器密码。

补充
在这里可以使用其他多个邮箱,包括新浪邮箱,126邮箱,163邮箱,阿里云邮箱和qq邮箱。其中新浪邮箱和阿里云邮箱不需要授权码,也就是一登录账号和密码就可以在第三方直接使用。但主流的qq邮箱,网易邮箱在第三方登录时需要输入授权码,qq邮箱的独立密码也不行,必须是授权码。

3、安装插件

WordPress网站安装插件可以在后台直接搜索安装或者下载插件进行手动安装,由于篇幅原因不在这里展开赘述,若有不会去百度查询下就行,也是非常简单。

WordPress安装插件

刚开始我安装的是Easy WP SMTP插件,其较于轻量级,配置比较简单,对小白较为友好,但其缺点就是报错提供信息不详细,没有详细错误日志信息。

于是我就安装了WP Mail SMTP by WPForms插件,它在测试邮件时可以提供详细的错误日志信息,后面解决问题也是基于debug日志进行修改的,所以建议安装。

WP Mail SMTP by WPForms

4、配置信息

这些插件的常规设置都大同小异,几乎主要包含以下选项

  • 发件人电子邮件地址
    用于向收件人发送电子邮件的电子邮件地址。
  • 发件人名称
    收件人在收到您的邮件内容时将在“发件人”或“发件人”值中看到的名称
  • SMTP主机
    您外发邮件的服务器(例如:smtp.gmail.com)
  • 加密类型
    无/SSL/TLS
  • SMTP端口
    用于将发出邮件递送到邮件服务器的端口(例如:465)
  • SMTP认证
    否/是(此选项应始终选中 “是”)
  • 用户名
    用于登录邮件服务器的用户名
  • 密码
    用于登录邮件服务器的密码

WP Mail SMTP 配置信息png

不同插件具体使用,这里不再赘述,如果不会可以去网上查一下。

阿里云服务器不再提供25端口邮件服务

注意

  • SMTP主机端口
    由于阿里云服务器已经限制使用25端口,所以我们这里使用> 465端口的ssl加密方式。
  • 密码
    这里的密码是刚才保存的授权码,不是邮箱登陆密码或独立密码。

5、处理问题

通过前面一番准备、配置工作,到了关键时刻,进行邮件测试。
刚开始在Easy WP SMTP 插件下报错,我分别尝试了25端口和465端口,报错信息如下

25端口报错信息

报错提示说是连接smtp服务器超时或的意思

465端口报错信息

465端口直接提示连接smtp服务器失败

然后就开始百度这两个问题,各种解决方案,有说需要开启 fsockopen的,有说需要服务器安全组放行端口的等等,结果仍没能找到有效的方法。

然后尝试更换smtp服务器为网易163邮箱,结果以失败告终。
最后尝试更换插件,依然无效,但是WP Mail SMTP by WPForms插件有详细的错误日志信息,于是就开始仔细搞懂每一个报错信息,并寻找解决办法。

错误日志信息

1、首先报错位置提示
open_basedir restriction in effect.

2021-06-26 04: 49:43 Connection failed. Error #2: stream_socket_client(): open_basedir restriction in effect.
File(/etc/pki/tls/certs/ca-bundle.crt) is not within the allowed path(s): ( /ww/wwwroot/wordpress/ :/tmp/)
/www/wwwroot/wordpress/wp- inc Ludes/PHPMailer/SMTP.php line 387]

发现是 stream_socket_client这个函数没有正常运行。

提示原因说 open_basedir 没有包含/etc/pki/tls/certs/ca-bundle.crt,那就去把它包含进去。

把权限作用域由入口文件目录修改为框架根目录
打开 php.ini 搜索 open_basedir,修改为对应的路径即可。

在宝塔面板这个问题非常容易解决
只需要在相应的网站目录,勾选掉防跨站攻击(open_basedir)即可!

勾选掉防跨站攻击

这个问题是说PHP不能引入其授权目录上级及其以上的文件;
一般情况下是不会出现这种问题的,之所以出现这个问题绝大多数情况是由于服务器的原因,为了安全才做了这样的限制!

然后再去测试邮件,发现果真没有了这一行报错信息。但依然没解决问题,接着分析错误日志。
2、failed loading cafile stream
大概意思是说加载 cafile 流失败,看文件名像是证书文件。

也就是未能找到该文件,然后就按照提示路径去查找,结果发现真的没有存在,那么问题就是文件路径错误无疑了,那这个文件在哪里呢?

直接去服务器查找ca-bundle.crt,发现它在/www/wwwroot/wordpress/wp-includes/certificates/ca-bundle.crt这里。

那么下面操作毋庸置疑,就是修改加载他的路径,在你的PHP安装目录下找到php.ini文件打开搜索找到

curl.cainfo = /etc/ca-bundle.crt
openssl.cafile = /etc/ca-bundle.crt

修改为正确路径

curl.cainfo = 	/www/wwwroot/wordpress/wp-includes/certificates/ca-bundle.crt
openssl.cafile = 	/www/wwwroot/wordpress/wp-includes/certificates/ca-bundle.crt

然后再去测试发送邮件,发现完美解决问题。

6 避坑技巧

  • 目前阿里云和腾讯云已经禁止了25端口,所以大家记得用465端口!
  • 判断主机是否支持mail()函数,事实上宝塔面板支持mail函数的,万网的主机好像不支持mail函数,都需要通过 SMTP 来发送邮件,而且要开启 fsockopen 。
  • 但是 WordPress的SMTP发送方式为 steam_connect_client 而非fsockopen。

7、总结经验

通过这次实践解决问题,感觉主要收获的不是这个问题的解决方案,更重要的是遇到问题时,分析问题和查询解决问题办法的思路以及技巧,这是在遇到任何问题时都适用的,可以说是所谓的经验。

首先遇到问题时不要去盲目的在网上查找原因,然后去直接按照别人的解决方案去修改,因为有可能错误细节问题不一样,或是环境不一致,比如服务器不一样或版本不同等。

其次是主要的是要学会自己去分析问题,就是按照报错日志信息去分析自己遇到的问题,然后去查阅相关问题再去解决它。

最后就是要勇于尝试,在这次解决过程中,我曾尝试了已知的所有解决问题,再有就是要去屏蔽问题,也就是每次只要去测试一个问题,避免混淆。

结语

这里主要就是详细记录这次解决方案以及经验总结,希望可以帮助到你。遇到问题不要怕,解决问题的过程正是提高自己的最佳途径。

推荐关注

Wechat

 

 

 

本站为非盈利性站点,所有资源、文章等仅供学习参考,并不贩卖软件且不存在任何商业目的及用途,如果您访问和下载某文件,表示您同意只将此文件用于参考、学习而非其他用途。
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/130
THE END
二维码
WordPress网站开启邮件发送功能
  前言 最近搭建WordPress网站时,开启允许用……
<<上一篇
下一篇>>
文章目录
关闭
目 录