ちょっと、探ってみました。
1. 「2.4.4」での動作を再度確認
2. 「2.12-dev」でのメールマガジンの実装を調査
3. fml(メーリングソフト)の経験から、メールマガジン予約配信に必要な要件を想定
1)bccでsmtpへ送信
2)エラーリターンメールの管理
3)メールマガジンの配信状況、管理
2.4.4では、これらは実装されておらず、2.11-dev時に、これらを実装するリソースがなく、
未実装によるリスクの回避として、リソース待ちとなっているのでは、と、推測します。
取り敢えず、2.12-devに対して<<<以下>>>の処置にて、動作確認(試運転)したところ、
SC_Helper_Mail_Ex::sfSendMailmagazine_retry($send_id)の$send_idの狙い撃ちでの
cronでの送信は出来ました。
<<<以下>>>
「regist_complete」で待機させ、cronで
→sendmail.php
→LC_Page_Admin_Mail_Sendmail_Ex.php
→LC_Page_Admin_Mail_Sendmail.php
→「retry」で、送信。。。
試運転としても、
1.$send_id
dtb_send_customer,dtb_send_historyから未送信の$send_idを取出し、
LC_Page_Admin_Mail_Sendmail.phpでの
SC_Helper_Mail_Ex::sfSendMailmagazine_retry($send_id);
を$send_id分繰り返す。
2.送信時間
1)dtb_send_historyの「start_date」に配送希望時間を設定する様に変更。
2)配送希望時間設定画面を追加
3.送信
1)LC_Page_Admin_Mail_Sendmail.php実行時刻が「start_date」を超えていたら「retry」実行
2)retryのretryは行わない、、、ステータスを3として、3は配信しない。
の実装が必要、、、といったところでしょうか。。。
基本部分の変更
 data/class/pages/admin/mail/LC_Page_Admin_Mail.php
 
     function action() {
            case 'regist_complete':
                $this->tpl_mainpage = 'mail/input.tpl';
                $this->lfAddParamSelectTemplate($objFormParam);
                $objFormParam->setParam($_POST);
                $this->arrErr = $objFormParam->checkError();
                if (SC_Utils_Ex::isBlank($this->arrErr)) {
                    $this->tpl_mainpage = 'mail/index.tpl';
                    
                    // ここでは、送信を止め「配信失敗」、つまりは「配信待ち」、、、とする。
                    SC_Helper_Mail_Ex::sfSendMailmagazine($this->lfRegisterData($objFormParam));  // DB登録・送信
                    SC_Response_Ex::sendRedirect('./history.php');
                }
                break;
            case 'retry':
                if (SC_Utils_Ex::sfIsInt($_GET['send_id'])) {
                
                    // 「再試行」での送信化
                    SC_Helper_Mail_Ex::sfSendMailmagazine_retry($_GET['send_id']);  // DB登録・送信
                    SC_Response_Ex::sendRedirect('./history.php');
                } else {
                    $this->tpl_onload = "window.alert('メール送信IDが正しくありません');";
                }
                break;
・本来のfunction sfSendMailmagazine($send_id) {}をfunction sfSendMailmagazine_retry($send_id) {}として複製する。
・直接送信時に「配信失敗」、つまりは「配信待ち」、、、とする。
data/class/helper/SC_Helper_Mail.php
    function sfSendMailmagazine($send_id) {
//            // テキストメール配信の場合
//            if ($arrMail['mail_method'] == 2) {
//                $sendResut = $objMail->sendMail();
//            // HTMLメール配信の場合
//            } else {
//                $sendResut = $objMail->sendHtmlMail();
//            }
            // 送信完了なら1、失敗なら2をメール送信結果フラグとしてDBに挿入
            if (!$sendResut) {
                $sendFlag = '2';
            } else {
                // 完了を 1 増やす
                $sendFlag = '1';
                $complete_count++;
            }
            // 送信結果情報を更新
            $objQuery->update('dtb_send_customer',
                              array('send_flag'=>$sendFlag),
                              'send_id = ? AND customer_id = ?',
                              array($send_id,$arrDestination['customer_id']));
        }
//        // メール全件送信完了後の処理
//        $objQuery->update('dtb_send_history',
//                          array('end_date'=>'CURRENT_TIMESTAMP', 'complete_count'=>$complete_count),
//                          'send_id = ?',
//                          array($send_id));
//
//        // 送信完了 報告メール
//        $compSubject = date('Y年m月d日H時i分') . '  下記メールの配信が完了しました。';
//        // 管理者宛に変更
//        $objMail->setTo($objSite['email03']);
//        $objMail->setSubject($compSubject);
//
//        // テキストメール配信の場合
//        if ($arrMail['mail_method'] == 2) {
//            $sendResut = $objMail->sendMail();
//        // HTMLメール配信の場合
//        } else {
//            $sendResut = $objMail->sendHtmlMail();
//        }
        return;
    }
    /**
     * retry メルマガ配送を行う
     *
     * @param integer $send_id dtb_send_history の情報
     * @return void
     */
    function sfSendMailmagazine_retry($send_id) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $objDb = new SC_Helper_DB_Ex();
        $objSite = $objDb->sfGetBasisData();
        $objMail = new SC_SendMail_Ex();
        $where = 'del_flg = 0 AND send_id = ?';
        $arrMail = $objQuery->getRow('*', 'dtb_send_history', $where, array($send_id));
        // 対象となる$send_idが見つからない
        if (SC_Utils_Ex::isBlank($arrMail)) return;
        // 送信先リストの取得
        $arrDestinationList = $objQuery->select(
            '*',
            'dtb_send_customer',
            'send_id = ? AND (send_flag = 2 OR send_flag IS NULL)',
            array($send_id)
        );
        // 現在の配信数
        $complete_count = $arrMail['complete_count'];
        if (SC_Utils_Ex::isBlank($arrMail)) {
            $complete_count = 0;
        }
        foreach ($arrDestinationList as $arrDestination) {
            // お名前の変換
            $customerName = trim($arrDestination['name']);
            $subjectBody = preg_replace('/{name}/', $customerName, $arrMail['subject']);
            $mailBody = preg_replace('/{name}/', $customerName, $arrMail['body']);
            $objMail->setItem(
                $arrDestination['email'],
                $subjectBody,
                $mailBody,
                $objSite['email03'],      // 送信元メールアドレス
                $objSite['shop_name'],    // 送信元名
                $objSite['email03'],      // reply_to
                $objSite['email04'],      // return_path
                $objSite['email04']       // errors_to
            );
            // テキストメール配信の場合
           if ($arrMail['mail_method'] == 2) {
                $sendResut = $objMail->sendMail();
            // HTMLメール配信の場合
            } else {
                $sendResut = $objMail->sendHtmlMail();
            }
            // 送信完了なら1、失敗なら2をメール送信結果フラグとしてDBに挿入
            if (!$sendResut) {
                $sendFlag = '2';
            } else {
                // 完了を 1 増やす
                $sendFlag = '1';
                $complete_count++;
            }
            // 送信結果情報を更新
            $objQuery->update('dtb_send_customer',
                              array('send_flag'=>$sendFlag),
                              'send_id = ? AND customer_id = ?',
                              array($send_id,$arrDestination['customer_id']));
        }
        // メール全件送信完了後の処理
        $objQuery->update('dtb_send_history',
                          array('end_date'=>'CURRENT_TIMESTAMP', 'complete_count'=>$complete_count),
                          'send_id = ?',
                          array($send_id));
        // 送信完了 報告メール
        $compSubject = date('Y年m月d日H時i分') . '  下記メールの配信が完了しました。';
        // 管理者宛に変更
        $objMail->setTo($objSite['email03']);
        $objMail->setSubject($compSubject);
        // テキストメール配信の場合
        if ($arrMail['mail_method'] == 2) {
            $sendResut = $objMail->sendMail();
        // HTMLメール配信の場合
        } else {
            $sendResut = $objMail->sendHtmlMail();
        }
        return;
    }
data/class/pages/admin/mail/LC_Page_Admin_Mail.php
を
data/class/pages/admin/mail/LC_Page_Admin_Mail_Sendmail.phpとして複製した後
data/class/pages/admin/mail/LC_Page_Admin_Mail_Sendmail.php
        ...
        // モードによる処理切り替え
        //switch ($this->getMode()) {
        $mode = 'retry';
        switch ($mode) {
        ...
        
        ...
        case 'retry':
        //if (SC_Utils_Ex::sfIsInt($_GET['send_id'])) {
        //SC_Helper_Mail_Ex::sfSendMailmagazine_retry($_GET['send_id']);  // DB登録・送信
        // 未送信の$send_id分繰り返す必要がある。
        SC_Helper_Mail_Ex::sfSendMailmagazine_retry($send_id);
        // SC_Response_Ex::sendRedirect('./history.php');
        //} else {
        // $this->tpl_onload = "window.alert('メール送信IDが正しくありません');";
        //}
        break;
        ...