ThinkPHP5.1发送邮件(PHPMailer带附件)

PHPMailer phpmailer composer phpmailer

用think PHP5.1发送邮件,为方便项目前后台都可调用,我这边写在了common.php里(application/common.php)

先切换到项目根目录,然后composer安装sdk,

composer  require  phpmailer/phpmailer

然后在common.php里引入:

use PHPMailer\PHPMailer\PHPMailer;


/**

 * @function    sendEmail

 * @intro        发送邮件(带附件)

 * @param $email     接收邮箱

 * @param $title     邮件标题

 * @param $from_name     发件人

 * @param $content     邮件内容

 * @param $attachmentFile     附件 (string | array)

 * @return  array

 */

function sendEmail($email='', $title='', $from_name='', $content='', $attachmentFile=''){

    date_default_timezone_set('PRC');       

    //Create a new PHPMailer instance

    $mail                       = new PHPMailer;

    //Tell PHPMailer to use SMTP

    $mail->isSMTP();

    //Enable SMTP debugging

    // 0 = off (for production use)

    // 1 = client messages

    // 2 = client and server messages

    $mail->SMTPDebug            = 0;

    //Ask for HTML-friendly debug output

    $mail->Debugoutput          = 'html';

    //charset

    $mail->CharSet              = 'UTF-8';

    //Set the hostname of the mail server

    $mail->Host                 = "";//请填写你的邮箱服务器

    //Set the SMTP port number - likely to be 25, 465 or 587

    $mail->Port                 = 25;//端口号

    //Whether to use SMTP authentication

    $mail->SMTPAuth             = true;

    //Username to use for SMTP authentication

    $mail->Username             = "";//发件邮箱用户名

    //Password to use for SMTP authentication

    $mail->Password             = "";//发件邮箱密码

    //Set who the message is to be sent from

    $mail->setFrom('发件邮箱用户名', $from_name);

    //Set an alternative reply-to address(用户直接回复邮件的地址)

    $mail->addReplyTo('发件邮箱用户名', $from_name);

    //Set who the message is to be sent to

    $mail->addAddress($email);

    //Set the subject line

    $mail->Subject              = $title;

    //Read an HTML message body from an external file, convert referenced images to embedded,

    //convert HTML into a basic plain-text alternative body

    $mail->msgHTML($content);

    //Replace the plain text body with one created manually

    $mail->AltBody              = '';

    if(is_array($attachmentFile)){

        for ($i=0; $i < count($attachmentFile); $i++) { 

            $mail->addAttachment($attachmentFile[$i],'Filename'.$i);//这里可以是多维数组,然后循环附件的文件和名称

        }

    }else{

        if($attachmentFile !=''){

            //Attach an image file

            $mail->addAttachment($attachmentFile, 'Filename');

        }

    }

    //send the message, check for errors

    if (!$mail->send()) {

        $status                 = 0;

        $data                   = "邮件发送失败" . $mail->ErrorInfo;;

    } else {

        $status                 = 1;

        $data                   = "邮件发送成功";   

    } 

    return ['status'=>$status,'data'=>$data];//返回值(可选)

}


在需要发邮件的地方调用这个方法:

sendEmail($email, '邮件标题', '发件人简称', $content, Env::get('root_path').'public/uploads/file/'.$file, 'file.jpg');