private function findMessage($token, $user) { $i = 0; do { $mailbox = new fMailbox('imap', EMAIL_SERVER, $user, EMAIL_PASSWORD); $messages = $mailbox->listMessages(); foreach ($messages as $number => $headers) { if (strpos($headers['subject'], $token) !== FALSE) { $message = $mailbox->fetchMessage($number, TRUE); $mailbox->deleteMessages($number); return $message; } } $mailbox->close(); usleep(500000); } while ($i < 20); throw new Exception('Email message ' . $token . ' never arrived'); }
<?php include_once 'support/constants.php'; date_default_timezone_set('America/New_York'); define('EMAIL_SERVER', 'mail.flourishlib.com'); define('EMAIL_USER', 'tests'); define('EMAIL_ADDRESS', '*****@*****.**'); // The EMAIL_PASSWORD needs to be passed to the test runner as a // parameter in the form: =EMAIL_PASSWORD:password // Delete any messages that shouldn't be there if (defined('EMAIL_PASSWORD')) { function email_autoload($class_name) { $file = '../classes/' . $class_name . '.php'; if (file_exists($file)) { require_once $file; return; } } spl_autoload_register('email_autoload'); $reference_date = strtotime('5/1/2010'); $mailbox = new fMailbox('imap', EMAIL_SERVER, EMAIL_USER, EMAIL_PASSWORD); $messages = $mailbox->listMessages(); foreach ($messages as $uid => $info) { $date = strtotime($info['date']); if ($date > $reference_date) { $mailbox->deleteMessages($uid); } } }
function email__retrieve_incoming() { global $settings, $settings__email_server_type, $settings__email_server_name, $settings__email_server_port, $settings__email_username, $settings__email_password, $settings__email_ssl; $continue = true; $result = array(); $result['errors'] = array(); if (!isset($settings__email_server_type) || !in_array($settings__email_server_type, array('pop3', 'imap'))) { $result['errors'][] = 'No valid email server type given.'; $continue = false; } if (!isset($settings__email_server_name) || !$settings__email_server_name) { $result['errors'][] = 'No email server name given.'; $continue = false; } if (!isset($settings__email_username) || !$settings__email_username) { $result['errors'][] = 'No email username name given.'; $continue = false; } if (!isset($settings__email_password) || !$settings__email_password) { $result['errors'][] = 'No email username name given.'; $continue = false; } if (!isset($settings__email_server_port) || !$settings__email_server_port) { $settings__email_server_port = NULL; } if (!isset($settings__email_ssl) || !$settings__email_ssl) { $settings__email_ssl = FALSE; } else { $settings__email_ssl = TRUE; } if ($continue) { include_once '../tagsets/class.fmailbox.php'; $mailbox = new fMailbox($settings__email_server_type, $settings__email_server_name, $settings__email_username, $settings__email_password, $settings__email_server_port, $settings__email_ssl); $messages = $mailbox->listMessages(); $count = 0; foreach ($messages as $message) { $continue = true; if (isset($settings['email_module_delete_emails_from_server']) && $settings['email_module_delete_emails_from_server'] == 'n') { if (!isset($all_email_ids)) { $query = "SELECT message_id FROM " . table('emails'); $qresult = or_query($query); $all_email_ids = array(); while ($m = pdo_fetch_assoc($qresult)) { $all_email_ids[] = $m['message_id']; } } if (in_array($message['message_id'], $all_email_ids)) { $continue = false; } } if ($continue) { // download message $email = $mailbox->fetchMessage($message['uid'], TRUE); // prepare and save to db if (isset($email['text'])) { $body = email__strip_html($email['text']); } elseif (isset($email['html'])) { $body = email__strip_html($email['html']); } if (isset($email['attachment']) && count($email['attachment']) > 0) { $has_attachments = 1; $data_string = email__attachment_array_to_dbstring($email['attachment']); } else { $has_attachments = 0; $data_string = ''; } $to_adds = array(); $cc_adds = array(); foreach ($email['headers']['to'] as $to_add) { $to_adds[] = $to_add['mailbox'] . "@" . $to_add['host']; } if (isset($email['headers']['cc']) && is_array($email['headers']['cc'])) { foreach ($email['headers']['cc'] as $cc_add) { $cc_adds[] = $cc_add['mailbox'] . "@" . $cc_add['host']; } } $pars = array(); $pars[':message_id'] = $message['message_id']; $pars[':message_type'] = 'incoming'; $pars[':timestamp'] = strtotime($message['date']); $pars[':from_address'] = $email['headers']['from']['mailbox'] . "@" . $email['headers']['from']['host']; $pars[':from_name'] = isset($email['headers']['from']['personal']) ? $email['headers']['from']['personal'] : ''; $pars[':reply_to_address'] = ''; if (isset($email['headers']['reply-to'])) { $pars[':reply_to_address'] = $email['headers']['reply-to']['mailbox'] . "@" . $email['headers']['reply-to']['host']; } $pars[':to_address'] = implode(",", $to_adds); $pars[':cc_address'] = implode(",", $cc_adds); $pars[':subject'] = email__strip_html($message['subject']); if (!$pars[':subject']) { $pars[':subject'] = "no subject"; } $pars[':body'] = $body; $pars[':has_attachments'] = $has_attachments; $pars[':attachment_data'] = $data_string; $pars[':thread_id'] = $message['message_id']; $pars[':thread_time'] = $pars[':timestamp']; $pars[':mailbox'] = 'not_assigned'; $query = "INSERT IGNORE INTO " . table('emails') . "\n SET message_id= :message_id,\n message_type= :message_type,\n timestamp= :timestamp,\n from_address= :from_address,\n from_name= :from_name,\n reply_to_address= :reply_to_address,\n to_address= :to_address,\n cc_address= :cc_address,\n subject= :subject,\n body= :body,\n has_attachments= :has_attachments,\n attachment_data= :attachment_data,\n thread_id = :thread_id,\n thread_time = :thread_time,\n mailbox = :mailbox\n "; $done = or_query($query, $pars); if (pdo_num_rows($done) > 0) { $count++; } // delete from server if (!(isset($settings['email_module_delete_emails_from_server']) && $settings['email_module_delete_emails_from_server'] == 'n')) { $mailbox->deleteMessages($message['uid']); } } } $result['count'] = $count; } return $result; }