Source for file LC_Page_Admin_Mail_Sendmail.php

Documentation is available at LC_Page_Admin_Mail_Sendmail.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26.  
  27. /**
  28.  * メール配信履歴 のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id$
  33.  */
  34.     
  35.     var $objMail;
  36.     // }}}
  37.     // {{{ functions
  38.  
  39.     /**
  40.      * Page を初期化する.
  41.      *
  42.      * @return void 
  43.      */
  44.     function init({
  45.          // SC_SendMailの拡張
  46.         if(file_exists(MODULE_PATH "mdl_speedmail/SC_SpeedMail.php")) {
  47.             require_once(MODULE_PATH "mdl_speedmail/SC_SpeedMail.php");
  48.             // SpeedMail対応
  49.             $this->objMail = new SC_SpeedMail();
  50.         else {
  51.             $this->objMail = new SC_SendMail_Ex();
  52.         }
  53.         
  54.         parent::init();
  55.     }
  56.  
  57.     /**
  58.      * Page のプロセス.
  59.      *
  60.      * @return void 
  61.      */
  62.     function process({
  63.         $conn new SC_DbConn();
  64.         $objSite new SC_SiteInfo($conn);
  65.  
  66.         if(MELMAGA_SEND != true{
  67.             exit;
  68.         }
  69.  
  70.         //リアルタイム配信モードがオンのとき
  71.         if($_GET['mode'== 'now'{
  72.             //---- 未送信データを取得する
  73.             $time_data $conn->getAll"SELECT send_id FROM dtb_send_history  WHERE complete_count = 0 AND del_flg = 0 AND end_date IS NULL ORDER BY send_id ASC, start_date ASC" );
  74.         else {
  75.             // postgresql と mysql とでSQLをわける
  76.             if (DB_TYPE == "pgsql"{
  77.                 $sql "SELECT send_id FROM dtb_send_history  ";
  78.                 $sql.= "WHERE start_date  BETWEEN current_timestamp + '- 5 minutes' AND current_timestamp + '5 minutes' AND del_flg = 0  AND end_date IS NULL ORDER BY send_id ASC, start_date ASC";
  79.             }else if (DB_TYPE == "mysql"{
  80.                 $sql "SELECT send_id FROM dtb_send_history  ";
  81.                 $sql.= "WHERE start_date  BETWEEN date_add(now(),INTERVAL -5 minute) AND date_add(now(),INTERVAL 5 minute) AND del_flg = 0  AND end_date IS NULL ORDER BY send_id ASC, start_date ASC";
  82.             }
  83.             //---- 30分毎にCronが送信時間データ確認
  84.             $time_data $conn->getAll($sql);
  85.         }
  86.  
  87.         //未送信メルマガの数
  88.         $count count($time_data);
  89.  
  90.         //未送信メルマガがあれば送信処理を続ける。なければ中断する。
  91.         if$count ){
  92.             print("start sending <br />\n");
  93.         else {
  94.             print("not found <br />\n");
  95.             exit;
  96.         }
  97.  
  98.         //---- メール送信準備
  99.         for$i 0$i $count$i++ {
  100.             // 送信先リストの取得
  101.             $sql "SELECT * FROM dtb_send_customer WHERE send_id = ? AND (send_flag = 2 OR send_flag IS NULL)";
  102.             $list_data[$conn->getAll$sqlarray$time_data[$i]["send_id") );
  103.             // 送信先データの取得
  104.             $sql "SELECT * FROM dtb_send_history WHERE send_id = ?";
  105.             $mail_data[$conn->getAll$sqlarray$time_data[$i]["send_id") );
  106.         }
  107.  
  108.         //---- 送信結果フラグ用SQL
  109.         $sql_flag ="UPDATE dtb_send_customer SET send_flag = ? WHERE send_id = ? AND customer_id = ?";
  110.  
  111.         //---- メール生成と送信
  112.         for$i 0$i $count$i++ {
  113.             for$j 0$j count$list_data[$i)$j ++ {
  114.                 $customerName "";
  115.                 $mailBody "";
  116.                 $sendFlag "";
  117.  
  118.                 //-- 顧客名の変換
  119.                 $name trim($list_data[$i][$j]["name"]);
  120.  
  121.                 if ($name == ""{
  122.                     $name "お客";
  123.                 }
  124.  
  125.                 $customerName htmlspecialchars($name);
  126.                 $subjectBody ereg_replace"{name}"$customerName $mail_data[$i][0]["subject");
  127.                 $mailBody ereg_replace"{name}"$customerName ,  $mail_data[$i][0]["body");
  128.  
  129.                 $this->objMail->setItem(
  130.                                                 $list_data[$i][$j]["email"]
  131.                                                ,$subjectBody
  132.                                                ,$mailBody
  133.                                                ,$objSite->data["email03"]                  // 送信元メールアドレス
  134.                                                ,$objSite->data["company_name"]             // 送信元名
  135.                                                ,$objSite->data["email03"]                  // reply_to
  136.                                                ,$objSite->data["email04"]                  // return_path
  137.                                                ,$objSite->data["email04"]                  // errors_to
  138.                                     );
  139.  
  140.                 //-- テキストメール配信の場合
  141.                 if$mail_data[$i][0]["mail_method"== {
  142.                     $sendResut $this->objMail->sendMail();
  143.                 //--  HTMLメール配信の場合
  144.                 else {
  145.                     $sendResut $this->objMail->sendHtmlMail();
  146.                 }
  147.  
  148.                 //-- 送信完了なら1、失敗なら-1をメール送信結果フラグとしてDBに挿入
  149.                 if$sendResut ){
  150.                     $sendFlag "-1";
  151.                 else {
  152.                     $sendFlag "1";
  153.  
  154.                     // 完了を 1 増やす
  155.                     $sql "UPDATE dtb_send_history SET complete_count = complete_count + 1 WHERE send_id = ?";
  156.                     $conn->query$sqlarray($mail_data[$i][0]["send_id"]));
  157.                 }
  158.                 $conn->query$sql_flagarray$sendFlag$mail_data[$i][0]["send_id"]$list_data[$i][$j]["customer_id") );
  159.             }
  160.  
  161.             //--- メール全件送信完了後の処理
  162.             $completeSql "UPDATE dtb_send_history SET end_date = now() WHERE send_id = ?";
  163.             $conn->query$completeSqlarray$time_data[$i]["send_id") );
  164.  
  165.             //--- 送信完了 報告メール
  166.             $compSubject =  date("Y年m月d日H時i分" "  下記メールの配信が完了しました。" );
  167.             // 管理者宛に変更
  168.             $this->objMail->setTo($objSite->data["email03"]);
  169.             $this->objMail->setSubject($compSubject);
  170.  
  171.             //-- テキストメール配信の場合
  172.             if$mail_data[$i][0]["mail_method"== {
  173.                 $sendResut $this->objMail->sendMail();
  174.             //--  HTMLメール配信の場合
  175.             else {
  176.                 $sendResut $this->objMail->sendHtmlMail();
  177.             }
  178.         }
  179.         if ($_GET['mode'"now"{
  180.             header("Location: " URL_DIR "admin/mail/history.php");
  181.         }
  182.         echo "complete\n";
  183.     }
  184.  
  185.     /**
  186.      * デストラクタ.
  187.      *
  188.      * @return void 
  189.      */
  190.     function destroy({
  191.         parent::destroy();
  192.     }
  193. }
  194. ?>

Documentation generated on Tue, 28 Apr 2009 18:11:18 +0900 by phpDocumentor 1.4.2