ホームページ  >  記事  >  php教程  >  PHP バックグラウンドで 5 分ごとに電子メールが送信されます

PHP バックグラウンドで 5 分ごとに電子メールが送信されます

WBOY
WBOYオリジナル
2016-06-21 08:49:221230ブラウズ

 

1.5 分でメールが送信され、ファイルの内容は html モジュールによって生成されたテーブル
while(1)
  {
    //10分
    var_dump("タスクを確認してください。閉じないでください");
    
    //メールを送信
    processDBData($db);
    
    //在庫状態を処理します
    processInventoryState($db,$tasks);
    
    sleep(5*60);
  }

//データベースからテーブルデータを読み取ります
  関数 processDBData($db)
  {
    $testplan_id = '';
    $temp = '';
    $TotalCaseNum = 0;
    $projectName = '';
     
    // 完了したテスト計画テーブルを確認 -> タスク
    $sql="SELECT TK.id,TK.send_email,TK.user_id,TK.build_id,TK.case_ids,TK.testplan_id,TK.flag,TK.total
    タスクから AS TK WHERE current=total and flag='2' and ISNULL(send_email)";
    $controlInfor = $db->get_recordset($sql);
    
    if(null== $controlInfor)
    {
      戻る;
    }

    
    foreach($controlInfor as $key =>$item)
    {
      //モデルのHTMLを開く
      $fModel = fopen("report.model","r");
      if(null == $fModel)
      {
        var_dump("モデルなし");
      }
      
      $Modelhandle = fread($fModel,filesize("report.model"));
    
      $test_cases = $item['case_ids'];
      
      //合計数値を取得
      $TotalCaseNum = (int)$item['total'];

      //テストプランテーブル->テストプラン
      //$sql = "SELECT ノート,testproject_id FROM テストプラン WHERE id='{$item['testplan_id']}'";
      $sql = "nodes_hierarchy WHERE id='{$item['testplan_id']}'から名前を選択します";
      $result = $db->get_recordset($sql);
      $temp = str_replace("MODEL_TESLPLANE",$result[0]['name'],$Modelhandle);
      $Modelhandle = $temp;
      
      //製品テーブル->テストプロジェクト
      $sql = "テストプロジェクト WHERE id='{$result[0]['testproject_id']}'" からノートを選択します。
      var_dump($sql);
      $result = $db->get_recordset($sql);
      
      $temp = str_replace("MODEL_PRODUCTNAME",$result[0]['notes'],$Modelhandle);
      $Modelhandle = $temp;
      
      //テーブルを構築->構築
      $sql = "SELECT DB.name FROM builds AS DB WHERE testplan_id='{$item['testplan_id']}' and id='{$item['build_id']}'";
      $result = $db->get_recordset($sql);
      var_dump($sql);
      $temp = str_replace("MODEL_BUILD",$result[0]['name'],$Modelhandle);
      $projectName = $result[0]['名前'];
      $Modelhandle = $temp;
      
      //テスト結果テーブル -> 実行
      $cases = explode(',',$test_cases);
      $case_infor = get_ts_name_details($db,$cases);
      
      //var_dump(sizeof($case_infor));
      
      //プロセス html テストケースのコンテンツ nl2br()
      //コンテンツ追加後(table,body,html終了フラグ)
      var_dump($case_infor);
      
      $BeforSuiteNam = "";
      $successNum = 0;
      $TESTNUM = 0;
      
      //var_dump($case_infor);
      //var_dump($case_infor);
      foreach($case_infor as $k=>$case)
      {
        $Modelhandle = $temp;
        
        if($case['tsuite_name'] != $BeforSuiteNam)
        {
          $Modelhandle = $temp 。 "{$case['tsuite_name']}";
          $temp = $Modelhandle;
        }


        //名前 + 重要度 + 結果を入力します
        //var_dump(Integer.parseInt('c'));
        //成功番号を取得
        $sql="タスク AS TK WHERE current=total および flag='2 から TK.id,TK.send_email,TK.user_id,TK.case_ids,TK.testplan_id,TK.flag,TK.total,TK.user_id を選択します' ";
        
        $controlInfor = $db->get_recordset($sql);
        
        //合格/不合格情報を設定します
        //var_dump($case['status']);
        $pass = 'p';
        $finish ='c';
        
        if(($case['status'])== $finish)//$TotalCaseNum
        {
          // ケース情報を設定します
          $Modelhandle = $temp. 「
            
            {$case['name']}
            {$case['importance']}
            終了
          ";
        }
        else if($case['status'] == $pass)//$TotalCaseNum
        {
          $successNum++;
                    // ケース情報を設定します
          $Modelhandle = $temp. 「
            
            {$case['name']}
            {$case['importance']}
            パス
          ";
        }
        それ以外
        {
          $Modelhandle = $temp. 「
            
            {$case['name']}
            {$case['importance']}
            失敗
            ";
        }
        
        $temp = $Modelhandle;
        $BeforSuiteNam = $case['tsuite_name'];
      }
      
      //成功数を設定
      //var_dump($TotalCaseNum);
      //$TotalCaseNum
      $temp = str_replace("MODEL_SUCCESS","{$successNum}/{$TotalCaseNum}",$Modelhandle);
      $Modelhandle = $temp;
      
      $temp = str_replace("MODEL_FAIL",($TotalCaseNum-$successNum)."/".$TotalCaseNum,$Modelhandle);
      $Modelhandle = $temp;
      
      //HTML 終了記号を追加しました
      $Modelhandle = $temp 。 "
               
               ";
      
      $fHtml = fopen("report.html","w");
      
      if(fwrite($fHtml,$Modelhandle))
      {
        fclose($fModel);
        fclose($fHtml);
        //die("创建html成功");
      }
      それ以外
      {
        fclose($fModel);
        fclose($fHtml);
      }
      
      //メールアドレスを取得してメールを送信
      $sql="SELECT email,group_email from users WHERE id={$item['user_id']}";
      var_dump($sql);
      
      $result = $db->get_recordset($sql);
      
      if(SendEmail($result[0]['email'],$result[0]['group_email'],$projectName))
      {
        SignFinishEmail($db,$item['id']);
      }
      
      $successNum = 0;
    }
    
    //テストケースを取得
    true を返します;
  }
  
  //署名終了メール送信フラグ
  関数signFinishEmail($db,$TaskId)
  {
    $sql = "タスクを更新 SET send_email='1' WHERE id='{$TaskId}'";
    //var_dump($sql);
    $db->e​​xec_query($sql);
    戻る;
  }
  
  //メールコンテンツを作成します
  関数 CreateHtml()
  {
   $fModel = fopen("report.model","r");
    
    if($fModel)
    {
      $handle = fread($fModel,filesize("report.model"));
      //var_dump($handle);
      $fHtml = fopen("report.html","w");
      
      if(fwrite($fHtml,$handle))
      {
        fclose($fModel);
        fclose($fHtml);
      }
      それ以外
      {
        fclose($fModel);
        fclose($fHtml);
        die("HTML の作成成功");
      }
    }
    戻る;
  }
  
    /*
   関数: get_ts_name_details

   引数:
   
   戻り値: key=TCID
のマップ        値= assoc_array([tsuite_id => 5341
                 【詳細】=> ts1 としての私の詳細
                 [tcid] => 5343
                 [スイート名] => ts1)
  */
  function get_ts_name_details(&$db,$tcase_id)
  {
   $tables = array();
   $termCase = $tcase_id;

   $tables['testsuites'] = DB_TABLE_PREFIX 。 'テストスイート';
   $tables['nodes_hierarchy'] = DB_TABLE_PREFIX 。 'nodes_hierarchy';
    
   $rs = '';
   $do_query = true;
   $sql = "SELECT TS.id AS tsuite_id、TS.details、TCS.status、
         NHA.id AS tc_id、NHA.name、NHB.name AS tsuite_name、TV.importance
      {$tables['testsuites']} TS、{$tables['nodes_hierarchy']} NHA、
から          {$tables['nodes_hierarchy']} NHB、tcversions TV、実行 TCS
      WHERE TS.id=NHA.parent_id
      および NHB.id=NHA.parent_id
      かつ TCS.tcversion_id=NHA.id+1
      AND TV.id=NHA.id+1";

   if( is_array($tcase_id) && count($tcase_id) > 0)
   {
    //ノート開始ノード
    $tcase_id[count($tcase_id)-1] -= 1;
  
    $in_list = implode("-1,",$tcase_id);
    
    $sql .= " AND NHA.id IN (" . $in_list . ")";
   }
   else if(!is_null($tcase_id))
   {
    $sql .= " AND NHA.id={$tcase_id}";
   }
   それ以外
   {
    $do_query = false;
   }
   if($do_query)
   {
   var_dump($sql);
    $rs = $db->fetchRowsIntoMap($sql,'tc_id');
   }
   
   $rs を返します;
  }
  
  //メールを送信
  関数 SendEmail($emailAdress,$groupEmail,$projectName)
  {
    $MailTital="HATP:".$projectName;
    var_dump($groupEmail);
    if($emailAdress=="")
    {
      false を返します;
    }
    
    if(null !=$groupEmail)
    {
      //var_dump("ここで実行");
      $ReciveEmails =explode(";",$groupEmail);
    }
    
    //メール情報を処理します
    $mail = 新しい PHPMailer(true); //例外を有効にした新しいインスタンス

    $body = file_get_contents('report.html');
    //var_dump($body);
    $body = preg_replace('/\\/','', $body); // バックスラッシュを削除します

    $mail->IsSMTP(); // SMTP を使用するようにクラスに指示します
    $mail->SMTPAuth = true; // SMTP 認証を有効にする
    $mail->ポート = 25; // SMTP サーバーのポートを設定します
    $mail->ホスト = "172.20.0.6"; // SMTP サーバー
    $mail->ユーザー名 = "bugfree@hojy.com"; // SMTP サーバーのユーザー名
    $mail->Password = "バグフリー"; // SMTP サーバーのパスワード
    $mail->From = "テストリンク";
    $mail->FromName = "テストリンク";
    $mail->件名 = $MailTital;
    $mail->AltBody = "メッセージを表示するには、HTML 互換の電子メール ビューアを使用してください!"; // オプション、コメントアウトしてテストします
    $mail->WordWrap = 80; // ワードラップを設定します
    $mail->MsgHTML($body);
    $mail->IsHTML(true); // HTMLとして送信
    
    //テスターを追加
    $ReciveEmails[sizeof($ReciveEmails)] = $emailAdress;
    var_dump($ReciveEmails);
    foreach($ReciveEmails as $K=>$Item)
    {
      var_dump($Item);
      $mail->AddAddress($Item);//送信者
    }
    
    試してみてください
    {
      $mail->Send();
    }
    catch (phpmailerException $e)
    {
      echo $e->errorMessage();
      false を返します;
    }
    
    $ReciveEmails='';
    TRUE を返します;
  }



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。