收起左侧

[资料] discuz 设置Gmail邮件发送返回错误的解决办法

[复制链接]
Admin发表于 2019-10-3 00:38:12


在discuz后台设定了gmail邮件,在最初的服务器上测试是成功的,使用了两年;后面因某些政策原因,本站只能停止续费不再购买他们的服务器,然后更换了服务器,通过测试发现,系统无法使用gmail发送新邮件了。百度相关资料后查到都是千篇一律的25端口被禁止,函数被禁止,初步怀疑是25端口的问题。在后面做了一系列测试,访问25端口会卡死,465端口正常运行;通过询问服务器提供商得知,25端口被禁用,使用25端口需要保证金。不过这次更换服务器只是试用一个月而以(考虑到站点流量不需要使用原先那么高的配置,后面发现这个想法是错的),一个月快到期了,准备加配置续费的时候,发现又是一个受政策压迫的服务器提供商,我们不得不再次放弃了新的服务器。后面又再换了一家服务器,换了第二次服务器后,第一件事就是测试邮件,同还是一样无法发送邮件,已知服务商禁止了25端口,使用25端口需要交付20US,用php简易测试得出,25端口无法访问,465端口正常运行。
两次换服务器的共同点为25端口被禁用,465端口可以访问,那么是否可以确定为25端口被禁用的问题,答案不是,因为gmail只能使用465端口以ssl的形式使用SMTP,所以旧服务器在discuz的邮件设置是使用465端口的,与25端口无关。邮件设定如下图所示:

discuz 设置Gmail邮件发送返回错误的解决办法

discuz 设置Gmail邮件发送返回错误的解决办法

排除了是25端口的问题后,只能继续找资料了。
网上找到的资料如下:
①.百度千篇一律复制粘贴、爬虫采集:(更换服务器你还不如不要回答)
DZ论坛3.4 设置邮件发送返回错误,基本上有以下二大原因:
1、你使用的空间不支持邮件发送功能。例如阿里云的空间就不支持使用25端口发送邮件功能;解决方法见:空间不支持25端口,怎么进行DISCUZ邮件设置。
回复:
阿里云的空间貌似都不支持25端口,一些功能无法实现。解决方法有二个:
a、更换其它网站空间。可以换西度虚拟主机,完美支持25端口和各项功能;
b、使用465端口发送。配置方法见:Discuz邮件设置如何使用SSL加密发送
(此处省略图片,懒得复制过来了,跟上面的图片一样)
SMTP 服务器:前面加“ssl://”;
端口:465;(加密发送接口)
发信人邮件地址:写自己的邮件地址;
SMTP 身份验证用户名:写发送邮件用户名;

②阿里云禁用25端口 (无用资料+1)

新买的阿里云ECS封禁了25端口,要发送邮件只能使用加密的465端口了。【阿里云服务器测试成功】
爱牛网络分享邮件发送服务使用的是腾讯企业邮箱,查看了腾讯企业邮箱的说明,是支持使用465端口发送邮件的。
不过在设置上同25端口的设置有些区别。
记得在阿里云服务器的安全组里添加一下465端口的访问设置如下:
只需要在SMTP服务器地址前加ssl://就搞定了
smtp服务器:ssl://smtp.exmail.qq.com
端口:465
其他同25端口的设置一样。
设置完成后,记得在discuz后台做下检查,看下是否启用成功。


如果还是不成功的话,登录到您的腾讯企业邮箱里面维信绑定一项里查看客户端登录安全登录是不是开启了,如果开启了


3、设置方法如下:
注:这里生成的密码复制粘贴到DZH后台邮件设置的SMTP 身份验证密码这一栏里面
最后再次测试看是否会发送邮件成功!
注:以上腾讯企业邮箱使用时前提必须是域名解析到邮箱的记录成功!腾讯企业邮箱后台域名管理里可以查看的到!

③某些博客与dz官方论坛找到的资料(很可惜,还是没有解决到问题)
博主按照教程都试了一遍,也没成功,总是提示邮件发送返回错误信息,大部分教程都是使用qq邮件,163或者126等邮箱,可惜xxx喜欢使用gmail邮箱。配置很多遍都没成功。最终才知道忽略了很多关健配置。
废话不多说,上教程:
前面说了,博主用的是aws的windows server 2012 R2主机,使用iis8.5+php5.5+mysql5.6,配置gmail邮箱smtp服务。下面方法就是以gmail为例子。
首先要确认服务器是否开启php的fsockopen函数? 如果你要使用一些邮件的类,那么很多要求支持php的fsockopen函数。但是服务器默认不是开启的。

   第一步:   php.ini文件中查找
   allow_url_fopen = On
   使其值为On
第二步:   php.ini文件中查找
   extension=php_openssl.dll
   如果前面有分号,去掉分号
第三步:   重启web服务器,apache或IIS

④谷歌找到的跟百度差不多,不过还是有不一样的内容的(仍然没能解决问题)
Discuz!论坛其实是可以通过Gmail发送邮件的,而且Gmail的稳定性和易用性是有口皆碑的,比起国内的其他免费STMP服务商更加可靠。下面一步一步告诉你如何实现用Discuz!论坛支持Gmail发信。
第一步,检查OpenSSL
首先查看phpinfo,查看看PHP是否支持OpenSSL,看到下面的字样,或者图片就标示支持OpenSSL。一般现在的PHP都会默认支持的。
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.8b 04 May 2006
第二步,修改Discuz!代码
在include/sendmail.inc.php文件中查找
fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)
替换为
fsockopen('ssl://' .$mail['server'], $mail['port'], $errno, $errstr, 30)
第三步,修改Gmail设置
1.登录到您的 Gmail 帐户。
2.点击任一 Gmail 页顶部的设置。
3.点击橙色框邮件设置中的转发和 POP。
4.选择针对所有邮件启用 POP 或者针对从现在起开始接收的邮件启用 POP。
5.使用 POP 访问 Gmail 邮件后,选择您要对邮件采用的处理方式。
第四步,配置Discuz!邮件设置
邮件发送方式:选择“通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)”
SMTP 服务器:smtp.gmail.com
SMTP 端口:465

⑤dz论坛找到的(不是这个原因)
近期黑客利用程序漏洞注入后使用 fsockopen 进行PHPDDOS 攻击,导致部分服务器不稳定,现在将危险函数 fsockopen 暂时禁用,部分程序功能可能有问题,以下列出已知问题及通用解决方法:


通用解决方法:
找到程序里的 fsockopen 函数,替换为:pfsockopen,即可解决所有问题,两个函数的区别在于 pfsockopen 保持 keep-alive,使得黑客无法进行 连接数攻击。


已知使用 fsockopen 函数的程序文件路径(在fsockopen 前加 p, 即fsockopen 修改为 pfsockopen 即可 ):


Discuz X2 安装提示不支持fsockopen:
将 /include/install_var.php 文件里的
$func_items = array(‘mysql_connect’, ‘fsockopen‘, ‘gethostbyname’, ‘file_get_contents’, ‘xml_parser_create’);
替换为:
$func_items = array(‘mysql_connect’, ‘pfsockopen‘, ‘gethostbyname’, ‘file_get_contents’, ‘xml_parser_create’);
即可正常安装。
X2全部包含fsockopen的文件(如果用邮件只修改邮件即可,其他文件都是自动判断 pfsockopen):


\api\manyou\Manyou.php
\api\trade\api_alipay.php
\install\include\install_function.php
\install\include\install_lang.php
\install\include\install_var.php
\source\admincp\admincp_addons.php
\source\admincp\admincp_checktools.php
\source\admincp\admincp_cloud.php
\source\admincp\admincp_misc.php
\source\admincp\cloud\cloud_doctor.php
\source\class\class_image.php
\source\class\class_sphinx.php
\source\class\class_sphinx.php
\source\class\block\xml\block_xml.php
\source\function\function_connect.php
\source\function\function_core.php
\source\function\function_filesock.php
\source\function\function_importdata.php
\source\function\function_mail.php 邮件相关
\source\function\function_plugin.php
\source\include\portalcp\portalcp_upload.php
\source\language\lang_admincp_cloud.php
\source\module\forum\forum_ajax.php
\source\module\misc\misc_manyou.php
\uc_client\client.php
\uc_client\lib\sendmail.inc.php 邮件相关
\uc_client\model\misc.php
\uc_server\install\func.inc.php
\uc_server\install\lang.inc.php
\uc_server\lib\sendmail.inc.php 邮件相关
\uc_server\model\misc.php


如果你在后台邮件测试提示错误,不必担心,测试邮箱还是会有邮件收到的!

省略其他与上面类似但又无用资料,试了n种方法都不行,最后去查了下错误日志,打开/data/log/日期_SMTP.php发现里面一直出错(ssl://smtp.gmail.com:465) PASSWORD - 534-5.7.14 ,后面查了下资料,需要打开https://accounts.google.com/b/0/DisplayUnlockCaptcha开放权限,其实一开始我也是认为是谷歌拦截了登录的问题,但是我已经将谷歌账号设定成了低安全性,所以也没多想了,结果真的是被谷歌拦截了。。。。

跳转到