zoukankan      html  css  js  c++  java
  • PHPMailer发送邮件

      背景:用户经过测评系统之后,会生成一份测评报告,但是由于邮件系统和测评系统是两份独立的系统,某天突然有500封测评报告产生,需要在24小时之内将测评报告发送给测评着。每个人的测评报告都是唯一的,因此附件内容都不一致。

      利用PHPMailer批量发送附件内容,只要将用户的附件和邮箱匹配成功就可以发送。因此,这个难题就变成了如何在短时间内发送500封邮件。

      再分析一下,就是我的数据库中有500条记录,需要一一处理掉,这不就是又成了熟悉的生产者和消费者的事情了吗?

      直接用crontab的定时脚本执行邮件发送的方法就OK了。

      代码设置如下:

    定时脚本,每隔10秒钟从池子中去消费,逐一发邮件。定时shell脚本如下:

    1 #!/bin/sh
    2 cd /root/pengjun/vipEmail/PHPMailer/
    3 step=10 #间隔的秒数,不能大于60
    4 for (( i = 0; i < 60; i=(i+step) )); do
    5     $(/usr/local/php/bin/php 'sendEmail.php')
    6     sleep $step
    7 done
    8 exit 0
    */1 * * * * root sh  /root/pengjun/sh/perVipMail.sh

    sendEmail.php的代码如下:

    <?php
    
    
    //邮件发送的流程
    /**
     * 1. 从数据库或者文件中读取邮箱,准备一一发送
     * 2. 读取附件内容,进行邮件发送
     * 3. 每次发送之后,需要记住是否发送成功、失败, 发送成功写入,成功的文件 ,记住发送失败的邮箱,写入发送失败文件
     *
     * 数据格式 array("邮箱"=>"附件")
     */
    
    require('class.phpmailer.php');
    include_once "./DB/DBHelper.php";
    define('HOST', '192.168.1.188');
    define('USER', 'root');
    define('PASSWORD', 'root');
    define('DBNAME', 'test');
    
    class db extends DBHelper{
    
        function __construct()
        {
            parent::__construct();
        }
    
        public function getEmail(){
            $sql = "SELECT name , email from sendEmail where status = 0 limit 1";
            $ret = $this->find($sql);
            return $ret;
        }
    
        public function updateEmail($email){
             $sql = "UPDATE sendEmail set status = 1 where email = '{$email}' and status = 0";
             return $this->executesql($sql);
        }
    }
    
    
    $dbMail = new db();
    $mail = new PHPMailer(); //实例化
    
    $mail->IsSMTP(); // 启用SMTP
    
    $mail->Host = "smtp.163.com"; //SMTP服务器 163邮箱例子
    //$mail->Host = "smtp.126.com"; //SMTP服务器 126邮箱例子
    //$mail->Host = "smtp.qq.com"; //SMTP服务器 qq邮箱例子
    
    $mail->Port = 25;  //邮件发送端口
    $mail->SMTPAuth   = true;  //启用SMTP认证
    
    $mail->CharSet  = "UTF-8"; //字符集
    $mail->Encoding = "base64"; //编码方式
    
    $mail->Username = "18025439531@163.com";  //你的邮箱
    $mail->Password = "#######";  //你的密码
    $mail->Subject = "【主题】这是邮件的主题"; //邮件标题
    
    $mail->From = "18025439531@163.com";  //发件人地址(也就是你的邮箱)
    $mail->FromName = "彭军";   //发件人姓名
    
    
    $name_email = $dbMail->getEmail();
    /*$name_email = array(
        array("name" => "彭军" , "email" =>"pengjun@shixiba.com"),
        array("name" => "彭小军" , "email" =>"1098325951@qq.com"),
        array("name" => "彭f军" , "email" =>"pengjun132@foxmail.com"),
        array("name" => "张琳" , "email" =>"zhanglin@shixiba.com"),
        array("name" => "邢杰" , "email" =>"xingjie@shixiba.com"),
        );*/
    $path = "./sendEmail/";
    $template = file_get_contents("./template.html");//定义发送模版
    foreach ($name_email as $key => $value) {
    
        $address = $value['email'];//收件人email
        $mail->AddAddress($address,$value['email']);    //添加收件人1(地址,昵称)
        $attachment = $value['name']."-".$value['email'];
        $file = $path.$value['email']."-vip.html";
        $mail->AddAttachment($file,$attachment.".html"); // 添加附件,并指定名称,,记住要添加附件尾椎
    
        $mail->IsHTML(true); //支持html格式内容
        //$mail->AddEmbeddedImage("test.jpg", "my-attach", "test.jpg"); //设置邮件中的图片
        $mail->Body = $template; //邮件主体内容
    
        //发送
        if(!$mail->Send()) {
          echo $attachment."===发送失败
    ";
          file_put_contents("error.txt", $attachment."===发送失败
    " , FILE_APPEND);
          echo "error: " . $mail->ErrorInfo;
          continue ;
        } else {
            $status = $dbMail->updateEmail($value['email']);
            if ($status) {
                echo $attachment."===发送成功
    ";
                file_put_contents("success.txt", $attachment."===发送成功-".date('Y-m-d H:i:s')."
    " , FILE_APPEND);
            }else{
                echo $attachment."===发送失败
    ";
                file_put_contents("error.txt", $attachment."===发送失败".date('Y-m-d H:i:s')."
    ", FILE_APPEND);
            }
        }
    }
    
    ?>

    邮件发送,会使用到phpmailer这个类,这个类只需要到网上下载即可。http://download.csdn.net/download/qq_23885541/10024847

  • 相关阅读:
    [刘阳Java]_eayui-pagination分页组件_第5讲
    [刘阳Java]_easyui-draggable拖动组件_第4讲
    [刘阳Java]_easyui-panel组件入门级_第3讲
    [刘阳Java]_TortoiseSVN基础应用_第1讲
    [刘阳Java]_SpringMVC文件上传第2季_第11讲
    [刘阳Java]_Spring中IntrospectorCleanupListener的用途【补充】_第16讲
    使用fetch代替ajax请求 post传递方式
    react购物车demo
    react-redux异步数据操作
    redux模块化demo
  • 原文地址:https://www.cnblogs.com/xs-yqz/p/7678866.html
Copyright © 2011-2022 走看看