• [PHPMailer]PHP电子邮件教程


    前言

    这周也是刚放假回来,苦逼高中生一个,很多时候因为我是住宿生,难免没有硬件设备来跟互联网进行沟通,有的时候我们想要给别人一个祝福,比如说某某人生日,但是你在学校,怎么给他祝福呢?这个时候PHPMailer就派上用场了,结合nonebot定时插件,还有api接口,我们就可以很轻松的去实现这个功能,具体怎么做,往下看

    开始

    QQ邮箱相关设置

    首先我们登录qq邮箱

    接着点开设置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-76UEO9gP-1662949693454)(https://zsy.juncikeji.xyz/i/img/qqmail-setting.png)]

    点开账户

    qqmail-account

    开启SMTP服务

    qqmail-smtp

    开启过程可能会要求验证身份,按照指引来一般就可以获得授权码,这个授权码一定要记住,后面会用到

    下载PHPMailer及环境准备

    项目地址:https://github.com/Synchro/PHPMailer

    先对环境进行一个配置,因为邮件发送需要ssl服务,所以我们需要openssl

    openssl

    确保PHP环境开启openssl,如果未开启,检查ext文件夹下是否有php_openssl.dllphp_sockets.dll两个dll,php.ini文件中把img前面的去掉

    我们也可以通过composer来下载PHPMailer

    composer require phpmailer/phpmailer

    下载完成我们打开vendor文件夹

    将phpmailer整个文件夹复制到你项目根目录

    然后将phpmailer/phpmailer/路径下的src也复制到根目录

    这样你就完成了各项配置

    代码部分

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    我这里因为做成api所以各种配置还需要各位大佬自行填写

    在接口返回json数据,并且状态码为200即为发信成功

    就像这样

    api-mail-sucess

    结果

    mail-receive

    可以看到我们成功发送了一封电子邮件

    总结

    本教程没有放上nonebot写法,因为我也没写,所以,各位大佬,开动你们的脑筋,写个定时插件,加上邮件api,这样一个定时邮件插件就做好啦

  • 相关阅读:
    【问题排查】InheritableThreadLocal类引发的生产事故
    Linux 搭建Owncloud 私有云
    vue项目推荐组件/工具库清单
    JAVA小游戏拼图
    基于LADRC自抗扰控制的VSG三相逆变器预同步并网控制策略(Simulink仿真实现)
    Android 10.0 系统修改usb连接电脑mtp和PTP的显示名称
    XSS-labs1-20关通过手册
    【图像分割】基于萤火虫优化的半监督谱聚类彩色图像分割方法(Matlab代码实现)
    Java多线程问题
    038Node.js后端服务处理端口号被占用的解决方案portfinder
  • 原文地址:https://blog.csdn.net/m0_66648798/article/details/126814100