前言
这周也是刚放假回来,苦逼高中生一个,很多时候因为我是住宿生,难免没有硬件设备来跟互联网进行沟通,有的时候我们想要给别人一个祝福,比如说某某人生日,但是你在学校,怎么给他祝福呢?这个时候PHPMailer就派上用场了,结合nonebot定时插件,还有api接口,我们就可以很轻松的去实现这个功能,具体怎么做,往下看
开始
QQ邮箱相关设置
首先我们登录qq邮箱
接着点开设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-76UEO9gP-1662949693454)(https://zsy.juncikeji.xyz/i/img/qqmail-setting.png)]
点开账户
开启SMTP服务
开启过程可能会要求验证身份,按照指引来一般就可以获得授权码,这个授权码一定要记住,后面会用到
下载PHPMailer及环境准备
项目地址:https://github.com/Synchro/PHPMailer
先对环境进行一个配置,因为邮件发送需要ssl服务,所以我们需要openssl
确保PHP环境开启openssl,如果未开启,检查ext文件夹下是否有php_openssl.dll、php_sockets.dll两个dll,php.ini文件中把前面的去掉
我们也可以通过composer来下载PHPMailer
composer require phpmailer/phpmailer
下载完成我们打开vendor文件夹
将phpmailer整个文件夹复制到你项目根目录
然后将phpmailer/phpmailer/路径下的src也复制到根目录
这样你就完成了各项配置
代码部分
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;require './src/Exception.php';
require './src/PHPMailer.php';
require './src/SMTP.php';$mail = new PHPMailer(true); // Passing `true` enables exceptions
$username = $_GET['username'];
$password = $_GET['password'];
$name = $_GET['name'];
$to = $_GET['to'];
$toname = $_GET['toname'];
$resname = $_GET['resname'];
$msg = $_GET['msg'];
$title = $_GET['title'];
try {//服务器配置$mail->CharSet ='UTF-8'; //设定邮件编码$mail->SMTPDebug = 0; // 调试模式输出$mail->isSMTP(); // 使用SMTP$mail->Host = 'smtp.qq.com'; // SMTP服务器$mail->SMTPAuth = true; // 允许 SMTP 认证$mail->Username = $username; // SMTP 用户名 即邮箱的用户名$mail->Password = $password; // SMTP 密码 部分邮箱是授权码(例如163邮箱)$mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议$mail->Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持$mail->setFrom($username, $name); //发件人$mail->addAddress($to, $toname); // 收件人//$mail->addAddress('ellen@example.com'); // 可添加多个收件人$mail->addReplyTo($resname, 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致//$mail->addCC('cc@example.com'); //抄送//$mail->addBCC('bcc@example.com'); //密送//发送附件// $mail->addAttachment('../xy.zip'); // 添加附件// $mail->addAttachment('../thumb-1.jpg', 'new.jpg'); // 发送附件并且重命名//Content$mail->isHTML(true); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容$mail->Subject = $title;$mail->Body = $msg;$mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';$mail->send();$mes = array('code'=>400,'msg'=>'发信成功');$json_mes = json_encode($mes,JSON_UNESCAPED_UNICODE);echo $json_mes;
} catch (Exception $e) {$mes = array('code'=>400,'msg'=>'erro','data'=>'邮件发送失败: '.$mail->ErrorInfo);$json_mes = json_encode($mes,JSON_UNESCAPED_UNICODE);echo $json_mes;
}
我这里因为做成api所以各种配置还需要各位大佬自行填写
在接口返回json数据,并且状态码为200即为发信成功
就像这样
结果
可以看到我们成功发送了一封电子邮件
总结
本教程没有放上nonebot写法,因为我也没写,所以,各位大佬,开动你们的脑筋,写个定时插件,加上邮件api,这样一个定时邮件插件就做好啦