您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
OpenCart 邮件设置及发不出邮件常见问题 (mail)( Password not accepted from server)
发布时间:2024-10-14 17:38:13编辑:雪饮阅读()
-
邮件发送与配置
首先咱们需要知道opencart后台手动发邮件的地方其实是在Marketing=>Mail中,然后这里要进行发送邮件在To里面选择Customers然后会出现Customer的列表,那么也就是说这里可以发送多个邮件,你可以选择多个人的意思咯。如果这个列表里面没有任何东西,那你就需要在opencart前台这里注册一个用户来了。用户的邮件就是你要测试发送的目标邮箱了。
那么一般opencart是默认没有配置邮箱发件人信息的。
在System=>Settings=>Store List=>选择一个Store,例如Default这个Store进入Edit
这里Mail Engine我这里选择SMTP,这个看情况,我这里用SMTP方便。
Mail Parameters感觉好像没有什么用处,我就直接填写发件人的邮箱地址,例如xxx@qq.com
SMTP Hostname我这里填写的是smtp.qq.com
因为我接下来要用qq邮箱的smtp服务。
SMTP Username这个就填写发件人邮箱账号,不带后缀,例如不带@qq.com,但是我感觉带了应该也是可以发送成功的。
SMTP Password这个可以在发件qq邮箱后台的“账号”=》”POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”中去开启smtp服务并获取授权码后填写在这里即可。
SMTP Port填写465,腾讯的发件smtp支持ssl的端口是465(现在腾讯好像是不允许非ssl了)
那么对于你的php则可能还得配置下ssl
Ssl如果开启的情况下,也是要配置pem文件的,一般默认情况下
去这里
https://curl.haxx.se/ca/cacert.pem
下载到的pem文件放置于\usr\local\openssl\certscacert.pem
当然这个是针对我这里的情况的,不同软件环境下情况不一样,具体后面的debug里面可以看到的(如果有这个没有配置的话)。
上面的都配置保存后。
接下来你可以试试发送邮件,不出意外的话,还是出现了意外。
会报错中有核心关键信息Password not accepted from server
这个处理方式也挺多,一种是直接在原来的\www\wwwroot\www.opencart3039.com\system\library\mail\smtp.php
中修改send方法。
当时太麻烦。而且代码还是那种很老旧的代码。很不优雅。
我个人的建议当然是用现在主流的一些解决方案。
来到这里
https://github.com/PHPMailer/PHPMailer
下载Download Zip
这里我是不建议用composer,这opencart老项目没有用这家伙,反而直接用这种zip解压后引入比较方便。
那么最后可以参考我修改的\www\wwwroot\www.opencart3039.com\system\library\mail\smtp.php
中的两处
第一处:
namespace Mail;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require $_SERVER["DOCUMENT_ROOT"]."/system/PHPMailer-master/src/Exception.php";
require $_SERVER["DOCUMENT_ROOT"]."/system/PHPMailer-master/src/PHPMailer.php";
require $_SERVER["DOCUMENT_ROOT"]."/system/PHPMailer-master/src/SMTP.php";
第二处:
public function send() {
$mail = new PHPMailer(true);
try {
//开启debug到最详细的细节,便于调试,生产环境则是不建议的
$mail->SMTPDebug = \PHPMailer\PHPMailer\SMTP::DEBUG_LOWLEVEL;
$mail->isSMTP();
$mail->Host = $this->smtp_hostname;
$mail->SMTPAuth = true;
$mail->Username = $this->smtp_username;
$mail->Password = $this->smtp_password;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = $this->smtp_port;
$mail->setFrom($this->from, $this->sender);
$mail->addAddress($this->to);
$mail->isHTML(true);
$mail->Subject = $this->subject;
$mail->Body = $this->html;
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
exit();
}
当然我这个只是为了解决邮件不能发送的问题,由于这里邮件是批量发送的,可以多个,或还需要处理批量的兼容问题,以及和系统其它地方的关联情况。这个就需要自己慢慢研究了,但总体来说还是比较方便的一个方案。
本期词汇:
Engine 发动机,引擎
Parameters 参数;人口参数
accepted 接受;相信
关键字词:opencart,mail,Password,no,accepted,from,server