diff --git a/Action.php b/Action.php index bdd9e57..af14c67 100644 --- a/Action.php +++ b/Action.php @@ -53,7 +53,7 @@ public function action($data="") if ($mail->isError()) { $data = $at . ' ' . $mail->ErrorInfo; // 记录发信失败的日志 } else { // 记录发信成功的日志 - $data = PHP_EOL . $at . ' 发送成功! '; + $data = PHP_EOL . $at . ' 发送成功!! '; $data .= ' 发件人:' . $fromName; $data .= ' 发件邮箱:' . $from; $data .= ' 接收邮箱:' . $_REQUEST['to']; @@ -69,4 +69,4 @@ public function action($data="") } } -?> +?> \ No newline at end of file diff --git a/Plugin.php b/Plugin.php index 104349b..4bf1ca8 100644 --- a/Plugin.php +++ b/Plugin.php @@ -13,13 +13,19 @@ use Widget\Feedback; use Widget\Service; use Widget\Comments\Edit; +use PHPMailer\PHPMailer\PHPMailer; +use PHPMailer\PHPMailer\Exception; + +require dirname(__FILE__) . '/PHPMailer/PHPMailer.php'; +require dirname(__FILE__) . '/PHPMailer/SMTP.php'; +require dirname(__FILE__) . '/PHPMailer/Exception.php'; /** * typecho 评论通过时发送邮件提醒,要求typecho1.2.0及以上 * * @package CommentNotifier * @author 泽泽社长 - * @version 1.6.6 + * @version 1.6.8 * @link https://github.com/jrotty/CommentNotifier */ @@ -197,10 +203,17 @@ public static function config(Form $form) $plugin = Helper::options()->plugin('CommentNotifier'); $testurl=$apiurl.'?subject=标题&html=测试内容&to='.$plugin->adminfrom.'&fromName='.$plugin->fromName.'&auth='.$plugin->auth; } + + // smtp发信方案 + $smtptype = new Form\Element\Radio('smtptype', array('curl' => _t('默认Curl方案'), 'go' => _t('传统直发方案')), 'curl', _t('发信方案'), _t('传统方案兼容性好,适合用虚拟主机的用户')); + $form->addInput($smtptype); + $smtptype->setAttribute('class', 'typecho-option smtp'); + // 表情重载函数 $biaoqing = new Form\Element\Text('biaoqing', NULL, NULL, _t('表情重载'), _t('请填写您博客主题评论表情函数名,如:parseBiaoQing(我的Plain,Sinner,Dinner,Store主题),Mirages::parseBiaoqing(Mirages主题),(此项非必填项具体函数名请咨询主题作者,填写后邮件提醒将支持显示表情,更换主题后请同步更换此项内容或者删除此项内容)

设置好插件所有设置参数并保存设置后,可以点击下方链接进行测试邮件是否发信正常
点击测试邮件发信是否正常【仅适用于SMTP模式】

')); $form->addInput($biaoqing); + // 模板 $template = new Form\Element\Text('template', NULL, 'default', _t('邮件模板选择'), _t('该项请不要在插件设置里填写,请到邮件模板列表页面选择模板启动!')); $template->setAttribute('class', 'hidden'); @@ -427,6 +440,59 @@ public static function zemail($param) $apiurl=Helper::options()->siteUrl.$rewrite.'zemail'; $param['auth']=$plugin->auth;//密钥 + +if($plugin->smtptype=="go"){ +try { + $from = $plugin->from; // 发件邮箱 + $fromName = $plugin->fromName; // 发件人 + // Server settings + $mail = new PHPMailer(false); + $mail->CharSet = PHPMailer::CHARSET_UTF8; + $mail->Encoding = PHPMailer::ENCODING_BASE64; + $mail->isSMTP(); + $mail->Host = $plugin->STMPHost; // SMTP 服务地址 + $mail->SMTPAuth = true; // 开启认证 + $mail->Username = $plugin->SMTPUserName; // SMTP 用户名 + $mail->Password = $plugin->SMTPPassword; // SMTP 密码 + $mail->SMTPSecure = $plugin->SMTPSecure; // SMTP 加密类型 'ssl' or 'tls'. + $mail->Port = $plugin->SMTPPort; // SMTP 端口 + + $mail->setFrom($from, $fromName); + $mail->addAddress($param['to'], $paramT['fromName']); // 收件人 + $mail->Subject =$param['subject']; + + $mail->isHTML(); // 邮件为HTML格式 + // 邮件内容 + $mail->Body = $param['html']; + $mail->send(); + + // 记录日志 + if ($plugin->log) { + $at = date('Y-m-d H:i:s'); + if ($mail->isError()) { + $data = $at . ' ' . $mail->ErrorInfo; // 记录发信失败的日志 + } else { // 记录发信成功的日志 + $data = PHP_EOL . $at . ' 发送成功! '; + $data .= ' 发件人:' . $fromName; + $data .= ' 发件邮箱:' . $from; + $data .= ' 接收人:' . $paramT['fromName']; + $data .= ' 接收邮箱:' . $param['to'] . PHP_EOL; + } + $fileName = dirname(__FILE__) . '/log.txt'; + file_put_contents($fileName, $data, FILE_APPEND); + } + + } catch (Exception $e) { + if ($plugin->log) { + $fileName = dirname(__FILE__) . '/log.txt'; + $str = "\nerror time: " . date('Y-m-d H:i:s') . "\n"; + file_put_contents($fileName, $str, FILE_APPEND); + file_put_contents($fileName, $e, FILE_APPEND); + } + } +}else{ + + // 初始化Curl $ch = curl_init(); // 设置为POST请求 @@ -482,6 +548,8 @@ public static function zemail($param) // 写入文件 file_put_contents(dirname(__FILE__) . '/log.txt', "\n".$log."\n", FILE_APPEND); } + +} // 返回结果 return $flag; }