THINKPHP使用PHPMAILER发送邮件,亲测可用!-Howingwah

环境:Thinkphp5,利用PHPMAILER来发送邮件,亲测可用!

将[phpmailer类]类文件下载到项目/extend,即是:project/extend/phpmailer。

1.新建email的config文件,位置在project/application/extra/email.php

<?php
return [

     'EMAIL_HOST'        =>'smtp.qq.com',          //Email SMTP
     'EMAIL_ADDRESS'     =>'465206670@qq.com',     //Email地址
     'EMAIL_LOGINNAME'   =>'465206670@qq.com',     //Email帐号
     'EMAIL_PASSWORD'    =>'XXXXXXXXXXXX',         //Email密码
    
    'EMAIL_PORT'        =>'25',                    //Email端口
    'EMAIL_FROMNAME'    =>'howingwah',		   //来自名称
    'EMAIL_SETFROM'     =>'howingwah',
    'EMAIL_ADD_ADDRESS' =>'howingwah',
    'EMAIL_ADD_REPLYTO' =>'howingwah',
    
    'EMAIL_CHARSET'     =>'UTF-8',                  //编码
    'EMAIL_DEBUG'         =>'0',                    //debug类型
    'EMAIL_AUTH'          =>'true',                 //是否开启smtp验证
    'EMAIL_SECURE'        =>'tls',                  //Enable TLS encryption, `ssl` also accepted
    
    
];

 

2.在project/application/function.php,加载phpmailer类,并且新建一个方法叫sendEmail,代码如下。

<?php
use phpmailer\Phpmailer;
/**
 * 发送邮件
 * @param $toemail 收件人email
 * @param $subject 邮件主题
 * @param $message 正文
 * @param $file 附件
 * @param $from 发件人
 * @param $cfg 邮件配置信息
 * @param $sitename 邮件站点名称
 */

function sendEmail($toemail, $subject, $message, $filename = array(), $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');
        
    }
    $mail = new PHPMailer();           //实例化PHPMailer对象
    //Server settings
    $mail->CharSet = config('email.EMAIL_CHARSET'); //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
    $mail->SMTPDebug = config('email.EMAIL_DEBUG'); // Enable verbose debug output
    $mail->isSMTP(); // Set mailer to use SMTP
    $mail->SMTPAuth = config('email.EMAIL_AUTH'); // 启用SMTP验证功能
    $mail->Host = config('email.EMAIL_HOST'); // Specify main and backup SMTP servers
    $mail->Username = config('email.EMAIL_LOGINNAME'); // SMTP username
    $mail->Password = config('email.EMAIL_PASSWORD'); // SMTP password
    $mail->From = config('email.EMAIL_ADDRESS'); //邮件发送者email地址
    $mail->SMTPSecure = config('email.EMAIL_SECURE'); // Enable TLS encryption, `ssl` also accepted
    $mail->Port = config('email.EMAIL_PORT'); //端口 - likely to be 25, 465 or 587
    
	
	
    //Recipients
	
	$mail->FromName = config('email.EMAIL_FROMNAME');
	$mail->setFrom($from, config('email.EMAIL_SETFROM')); //发送方地址和昵称
	$mail->addAddress($toemail, config('email.EMAIL_ADD_ADDRESS')); // Add a recipient
	$mail->addReplyTo($toemail, config('email.EMAIL_ADD_REPLYTO')); //回复地址
    
    //Content
    $mail->isHTML(true); // Set email format to HTML
    $mail->Subject = $subject; //标题
    $mail->Body = $message; //内容
	
    
    //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称
    $mail->addAttachment($filename['filename']);//可以多文件上传,逗号分隔。
	//$mail->addAttachment($filename);//可以多文件上传,逗号分隔。
    //同样该方法可以多次调用 上传多个附件
    // $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');
    
    //$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' => '发送成功');
    }
    
}

3.调用sendEmail函数进行发送邮件。demo:

<?php
$sendEmail = sendEmail('邮件地址', '邮件标题', '邮件内容','附件绝对地址');
        
        if ($sendEmail['status']=='-1'){
            echo '失败';
        }else{
            echo '成功';
        }
?>