技术饭

PHPMailer实现PHP的邮件发送,附带附件

copylian    0 评论    15170 浏览    2020.09.23

phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。

phpMailer 的特点:

1、在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。

2、平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。

3、支持嵌入图像,附件,HTML 邮件。

4、可靠的强大的调试功能

5、支持 SMTP 认证。

6、自定义邮件头。

7、支持 8bit、base64、binary 和 quoted-printable 编码。

phpmailer 安装或者下载方式:

1、从 github 上下载: https://github.com/PHPMailer/PHPMailer/

2、使用 composer 安装:

composer require phpmailer/phpmailer

发送之前需要拥有自己的邮件服务器,测试的时候其实用自己申请的免费邮箱最方便了,不需要自己再搭建服务器了,可能要配置邮箱的SMTP服务,大部分公共邮箱(163、qq等)为了安全默认是关闭的。

网易邮箱配置如下图:

201102010936447869c.png


QQ 邮箱相关配置如下图:

邮箱            POP3服务器(端口995)      SMTP服务器(端口465或587)

qq.com       pop.qq.com                         smtp.qq.com    

当然除了网易和 QQ 邮箱其他邮箱也是可以的,下面给出 php 代码示例:

/**

 * [sendMail 发送邮件函数基于PHPMailer]

 * @param [string] $address [接收邮件地址]

 * @param [string] $title   [发送标题]

 * @param [string] $message [发送的内容]

 */

function sendMail($data = array()){

      //验证发送数据

      if(empty($data)){

            return ['code' => 0, 'msg' => '参数异常']; 

      }


      //验证邮件功能是否打开

      if(!config('email_open')){

            return ['code' => 0, 'msg' => '邮件功能未开启'];

      }


      //实例化邮件类,true表示开启异常

      $mail = new \PHPMailer\PHPMailer\PHPMailer(true);

      try {

            //服务器设置

            $mail->CharSet='UTF-8'; //设置邮件的字符编码,若不指定,则为'UTF-8'

            //$mail->SMTPDebug = 2; //启用调试输出

            $mail->isSMTP(); //设置使用SMTP

            $mail->Host = config('email_smtp_server'); //指定主和备份SMTP服务器

            $mail->SMTPAuth = true; //启用SMTP认证

            $mail->Username = config('email_account'); //SMTP账号

            $mail->Password = config('email_password'); //SMTP密码

            $mail->SMTPSecure = config('email_protocol'); //tls与ssl加密类型

            $mail->Port = config('email_smtp_port'); //tcp服务器端口号


            //接受邮件

            $mail->setFrom(config('email_email_address'), config('email_nickname')); //发件人

            //收件人,可以多次使用来添加多个收件人

            if(isset($data['address']) && !empty($data['address'])){

                  foreach($data['address'] as $key=>$value){

                        $mail->addAddress($value['email'], $value['nickname']); 

                  }

            }


            //设置回复地址

            $mail->addReplyTo(config('email_email_address'), config('email_nickname'));

            //$mail->addCC('cc@example.com');

            //$mail->addBCC('bcc@example.com');


            //添加附件

            if(isset($data['attachment']) && !empty($data['attachment'])){

                  foreach($data['attachment'] as $key=>$value){

                        $mail->addAttachment($value['file'], $value['name']); 

                  }

            }


            //发送内容

            $mail->isHTML(true); //将邮件格式设置为HTML

            $mail->Subject = $data['title']; //邮件标题

            $mail->Body    = $data['content']; //邮件正文

            $mail->AltBody = $data['content']; //邮件正文不支持HTML的备用显示


            //发送

            if($mail->send()){

                  return ['code' => 1, 'msg' => '邮件发送成功'];

            }

      } catch (\PHPMailer\PHPMailer\Exception $e) {

            return ['code' => 0, 'msg' => '邮件发送失败:'.$mail->ErrorInfo];

      }

}


发邮件:

if($data['nature'] == 1){


      //1、发送发票邮件

      //数据

      $data = [

            'address' => [

                  [

                        'email' => $data['email'],

                        'nickname' => '',

                  ]

            ],

            'title' => '活多多电子发票',

            'content' => '<b>尊敬的活多多用户,您好:</b><br><b>&emsp;&emsp;您申请的电子发票已开具,请查收。</b><br><br>&emsp;&emsp;<a href="'.$this->request->domain().'/uploads/hddimages/20200918/FP20200912164509F02041267-C1.pdf" target="_blank"><b>活多多电子发票链接</b></a>',

            'attachment' => [

                  [

                        'file' => './uploads/hddimages/20200918/FP20200912164509F02041267-C1.pdf',

                        'name' => 'FP20200912164509F02041267-C1.pdf'

                  ]

            ]

      ];


      //发送

      $res = sendMail($data);

      if($res['code']){

            $res4 = 1;

      } else {

            $res4 = 0;

            //返回数据

            $return['code'] = 0;

            $return['msg'] = $res['msg'];

            return json($return);

      }

}


发邮件结果:

1600848499(1).png

只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
PHPMailer PHP 邮件 附件 

文明上网理性发言!

  • 还没有评论,沙发等你来抢