public function mailQueueProcessAction()
 {
     include 'libs/class.phpmailer.php';
     include 'libs/class.smtp.php';
     $config = Application::getConfig()['mail'];
     $items = Model_MailQueue::getUnprocessedItem();
     $processedIds = array();
     foreach ($items as $item) {
         $mail = new phpMailer();
         $mail->XMailer = 'Foxmail 6.1';
         //$mail->SMTPDebug = 3;
         $mail->isSmtp(true);
         $mail->SMTPAuth = true;
         $mail->SMTPSecure = $config['smtp_secure'];
         $mail->Host = $config['smtp_host'];
         $mail->Port = $config['smtp_port'];
         $mail->Username = $config['smtp_user'];
         $mail->Password = $config['smtp_password'];
         $mail->From = $config['smtp_user'];
         $mail->FromName = 'RCR Notify';
         $mail->CharSet = 'UTF-8';
         $mail->isHtml();
         $recipients = explode(',', $item['to']);
         foreach ($recipients as $r) {
             $mail->addAddress(trim($r));
         }
         $mail->Subject = $item['subject'];
         $mail->Body = $item['message'];
         if ($mail->send()) {
             $processedIds[] = $item['id'];
         } else {
             echo $mail->ErrorInfo;
         }
     }
     Model_MailQueue::setItemAsProcessedBatch($processedIds);
 }
    public function bookingAction()
    {
        $this->view->activeMenu = 'booking';
        $this->view->vehicleTypes = (new Model_VehicleType())->fetchPagedList(1, 999999)['rows'];
        if (!$this->_request->isPost()) {
            return;
        }
        $arp = new AjaxResponse();
        $arp->setStatus(AjaxResponse::STATUS_FAILED);
        $availableParams = array('forwho', 'city', 'contact-name', 'contact-email', 'contact-phone', 'passenger-names', 'passenger-phone', 'passenger-num', 'when', 'pickup-address', 'dropoff-address', 'vehicle', 'payment-method', 'notes');
        $via = $this->_getParam('via-address', array());
        $viaToSave = array();
        if (is_array($via)) {
            foreach ($via as $k => $v) {
                if (!empty(trim($v))) {
                    $viaToSave[] = trim($v);
                }
            }
        }
        $via = json_encode($viaToSave);
        $sn = Model_Order::generateSn();
        $order = new Model_Order();
        $order->set('sn', $sn);
        $order->set('user_id', $this->user->get('id'));
        foreach ($availableParams as $paramName) {
            $value = trim($this->getParam($paramName, ''));
            $colName = str_replace('-', '_', $paramName);
            $order->set($colName, $value);
        }
        $order->set('via', $via);
        $order->set('created_time', time());
        $order->save();
        //Mail it.
        $time = date('Y-m-d H:i', $order->get('created_time'));
        $mailBody = <<<EOT
<!DOCTYPE html>
<html lang="en">
<head>
\t<meta charset="UTF-8">
\t<title>新订单</title>
</head>
<body>
<style>
dt {
\tfont-weight:bold;
\tfont-size:12px;
}
dd {
\tfont-size:14px;
}
</style>
<h2>新订单:{$order->get('sn')}</h2>
<dl>
<dt>下单时间</dt><dd>{$time}</dd>
<dt>下单人</dt><dd>{$order->get('contact_name')}</dd>
<dt>乘客</dt><dd>{$order->get('passenger_names')}</dd>
<dt>时间</dt><dd>{$order->get('when')}</dd>
<dt>城市</dt><dd>{$order->get('city')}</dd>
<dt>起始地</dt><dd>{$order->get('pickup_address')}</dd>
<dt>终点</dt><dd>{$order->get('dropoff_address')}</dd>
</dl>
<p><a href="http://www.carrentalsbeijing.com/private-car-management/order-detail?sn={$order->get('sn')}" target="_blank">查看订单详情</a></p>
✉
</body>
</html>
EOT;
        $mailSubject = "新订单 {$order->get('passenger_names')}从{$order->get('pickup_address')}到{$order->get('dropoff_address')}";
        $mailRecipients = Application::getConfig()['order_mail_recipients'];
        $mailQueue = new Model_MailQueue();
        $mailQueue->set('to', $mailRecipients);
        $mailQueue->set('subject', $mailSubject);
        $mailQueue->set('message', $mailBody);
        $mailQueue->set('created_time', time());
        $mailQueue->save();
        $arp->setStatus(AjaxResponse::STATUS_OK);
        $arp->setMessage($sn);
        $this->json($arp);
    }