/** * 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)); } } } }