/**
  * Dispatch (send) email that was queued.
  */
 static function dispatchQueue(Vtiger_Mailer_Listener $listener = null)
 {
     global $adb;
     if (!Vtiger_Utils::CheckTable('vtiger_mailer_queue')) {
         return;
     }
     $mailer = new self();
     $queue = $adb->pquery('SELECT * FROM vtiger_mailer_queue WHERE failed != ?', array(1));
     if ($adb->num_rows($queue)) {
         for ($index = 0; $index < $adb->num_rows($queue); ++$index) {
             $mailer->reinitialize();
             $queue_record = $adb->fetch_array($queue, $index);
             $queueid = $queue_record['id'];
             $relcrmid = $queue_record['relcrmid'];
             $mailer->From = $queue_record['fromemail'];
             $mailer->From = $queue_record['fromname'];
             $mailer->Subject = $queue_record['subject'];
             $mailer->Body = decode_html($queue_record['body']);
             $mailer->Mailer = $queue_record['mailer'];
             $mailer->ContentType = $queue_record['content_type'];
             $emails = $adb->pquery('SELECT * FROM vtiger_mailer_queueinfo WHERE id=?', array($queueid));
             for ($eidx = 0; $eidx < $adb->num_rows($emails); ++$eidx) {
                 $email_record = $adb->fetch_array($emails, $eidx);
                 if ($email_record[type] == 'TO') {
                     $mailer->AddAddress($email_record[email], $email_record[name]);
                 } else {
                     if ($email_record[type] == 'CC') {
                         $mailer->AddCC($email_record[email], $email_record[name]);
                     } else {
                         if ($email_record[type] == 'BCC') {
                             $mailer->AddBCC($email_record[email], $email_record[name]);
                         } else {
                             if ($email_record[type] == 'RPLYTO') {
                                 $mailer->AddReplyTo($email_record[email], $email_record[name]);
                             }
                         }
                     }
                 }
             }
             $attachments = $adb->pquery('SELECT * FROM vtiger_mailer_queueattachments WHERE id=?', array($queueid));
             for ($aidx = 0; $aidx < $adb->num_rows($attachments); ++$aidx) {
                 $attachment_record = $adb->fetch_array($attachments, $aidx);
                 if ($attachment_record['path'] != '') {
                     $mailer->AddAttachment($attachment_record['path'], $attachment_record['name'], $attachment_record['encoding'], $attachment_record['type']);
                 }
             }
             $sent = $mailer->Send(true);
             if ($sent) {
                 Vtiger_Event::trigger('vtiger.mailer.mailsent', $relcrmid);
                 if ($listener) {
                     $listener->mailsent($queueid);
                 }
                 $adb->pquery('DELETE FROM vtiger_mailer_queue WHERE id=?', array($queueid));
                 $adb->pquery('DELETE FROM vtiger_mailer_queueinfo WHERE id=?', array($queueid));
                 $adb->pquery('DELETE FROM vtiger_mailer_queueattachments WHERE id=?', array($queueid));
             } else {
                 if ($listener) {
                     $listener->mailerror($queueid);
                 }
                 $adb->pquery('UPDATE vtiger_mailer_queue SET failed=?, failreason=? WHERE id=?', array(1, $mailer->ErrorInfo, $queueid));
             }
         }
     }
 }