PHPMailer使用 (邮箱发送)

本文介绍在ThinkPHP5框架中如何利用PHPMailer组件发送邮件,包括配置openssl和sockets扩展、安装PHPMailer、设置SMTP及编写发送邮件的公共方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本例是在TP5下进行:

使用phpmailer需要PHP开启php_sockets和php_fileinfo

使用phpinfo()函数查看socket和openssl扩展信息(wamp server默认启用了该扩展);

1.首先检查php.ini中; extension = php_openssl.dll是否存在,如果存在的话去掉前面的注释符';',如果不存在这行,那么添加extension = php_openssl.dll;

2.打开的php.ini文件,需要做以下事情:

(1)启用extension_dir =“ext”

(2)启用扩展= p​​hp_sockets.dll

可以执行这样一段代码看是否开启了插座(也可信息()查看):

<?php
if(extension_loaded('sockets')){
echo "已开启";
}else{
echo "未开启";
}
?>

3.下载phpmailer    https://sourceforge.net/projects/phpmailer/files/

将下载压缩包中的这五个文件考出来

在自己项目中的供应商文件夹下创建一个PHPMailer的文件夹并将之前考的五个文件复制进去

打开供应商的文件下的composer.json文件添加这样一行代码

将PHPMailer的文件夹下的5个文件的命名空间修改为

namespace ven \ PHPMailer;

设置将发件人开启SMTP:

此地以QQ邮箱为例:在邮件的设置 - >账户中开启,跟着系统操作会生成一个授权码,用于填写在的common.php的文件中客户端授权码那个位置;

4.写公共方法common.php,根据注释修改成自己的配置项

/**
 * 发送邮件
 * @param $toemail 收件人email
 * @param $subject 邮件主题
 * @param $message 正文
 * @param $from 发件人
 * @param $cfg 邮件配置信息
 * @param $sitename 邮件站点名称
 */
function send_email($toemail, $subject, $message, $from = '', $cfg = array(), $sitename = '')
{
    //判断openssl是否开启
    $openssl_funcs = get_extension_funcs('openssl');
    if (!$openssl_funcs) {
        return array('status' => -1, 'msg' => '请先开启openssl扩展');
    }
    //表单提交 测试发送
    /*if ($cfg && is_array($cfg)) {
    $from = $cfg['from'];
    $email = $cfg;
    } else {
    $config = cache('Config');
 
    }*/
 
    // $config = cache('Config');
    $mail = new ven\PHPMailer\PHPMailer();
    //Server settings
    // var_dump($mail);die;
    $mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
    $mail->SMTPDebug = 0; // Enable verbose debug output
    $mail->isSMTP(); // Set mailer to use SMTP
    $mail->Host = 'smtp.qq.com'; // Specify main and backup SMTP servers
    $mail->SMTPAuth = true; // Enable SMTP authentication
    $mail->Username = '设置开启了SMTP的邮箱号'; // SMTP username
    $mail->Password = 'SMTP的客户端授权码'; // SMTP password
    $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 25; //端口 - likely to be 25, 465 or 587
    //Recipients
    $mail->setFrom('发邮件的账号(例如:3127835346@qq.com)', '发邮件的账户名'); //发送方地址和昵称
    $mail->addAddress($toemail, 'Joe User'); // Add a recipient
    //$mail->addReplyTo('info@example.com', 'Information'); //回复地址
 
    //Content
    $mail->isHTML(true); // Set email format to HTML
    $mail->Subject = $subject; //标题
    $mail->Body = $message; //内容
    //$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    if (!$mail->send()) {
        return array('status' => -1, 'msg' => '发送失败: ' . $mail->ErrorInfo);
    } else {
        return array('status' => 1, 'msg' => '发送成功');
    }
 
}

5.打开命令行,cd到自己的项目目录运行以下这串代码会生成一个文件

composer dump-autoload

6.写方法运行

<?php
namespace app\index\controller;


use think\Controller;
use Psr\Log\Logger;


class Index extends Controller
{
    public function index()
    {
        // send_email($toemail, $subject, $message, $from = '', $cfg = array(), $sitename = '')
        send_email('3127835379@qq.com', '大兄弟你赶紧滴儿', '<a href="http://www.baidu.com/">我跟你说啊,我等半个小时了都,扛不住啦我的天啦!!!</a>', $from = '发件人', $cfg = array(), $sitename = '站点名称');
        echo "yes";
    }


}

运行指标下的指标控制器;发送邮件!

7.ok,成功发送邮件

 

补充:
 

$site =  $_SERVER['SERVER_NAME'];
        
        // if($r){
            $url_r = "<a href='http://".$site."/index.php/default/e_regist.html?email=".$data['email']."&code=".$code."'>http://".$site."/index.php/default/e_regist.html?email={$data['email']}&code={$code}</a>";
            $mail_to = $data['email'];
            $mail_subject = "注册账号";
            $mail_body = "
            <pre>
你正在执行找回密码操作!
请点击 {$url_r}链接完成激活。
如果您没有在找回密码,你可以安全地忽略本邮件。  
            </pre>";
            $res = Email::send_email($mail_to, $mail_subject, $mail_body, $from = '发件人', $cfg = array(), $sitename = '注册账号');

        $this->jssuccess('验证信息已发送到你的邮箱,请验证后登陆');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值