/** * Get the existing campaign log entry by tracker key. * * @param string Target Key * @return array Campaign Log Row */ function getExistingCampaignLogEntry($identifier) { $row = FALSE; $targeted = new CampaignLog(); $where = "campaign_log.activity_type='targeted' and campaign_log.target_tracker_key='{$identifier}'"; $query = $targeted->create_new_list_query('', $where); $result = $targeted->db->query($query); $row = $targeted->db->fetchByAssoc($result); return $row; }
function campaign_process_bounced_emails(&$email, &$email_header) { global $sugar_config; $emailFromAddress = $email_header->fromaddress; $email_description = $email->description; $query1 = "SELECT id, file_mime_type FROM notes WHERE file_mime_type like 'message/r%' and parent_id = '" . $email->id . "'"; $result1 = $GLOBALS['db']->query($query1); if (count($result1) > 0) { $row = $GLOBALS['db']->fetchByAssoc($result1); $attachId = $row['id']; if ($fp = fopen($sugar_config['upload_dir'] . $attachId, 'rb')) { $contents = fread($fp, filesize($sugar_config['upload_dir'] . $attachId)); $emailFromAddress = $emailFromAddress . $contents; $email_description = $email_description . $contents; fclose($fp); } } if (preg_match('/MAILER-DAEMON|POSTMASTER/i', $emailFromAddress)) { //do we have the identifier tag in the email? $email_description = quoted_printable_decode($email_description); $matches = array(); if (preg_match('/index.php\\?entryPoint=removeme&identifier=[a-z0-9\\-]*/', $email_description, $matches)) { $identifiers = preg_split('/index.php\\?entryPoint=removeme&identifier=/', $matches[0], -1, PREG_SPLIT_NO_EMPTY); if (!empty($identifiers)) { //array should have only one element in it. $identifier = trim($identifiers[0]); if (!class_exists('CampaignLog')) { } $targeted = new CampaignLog(); $where = "campaign_log.activity_type='targeted' and campaign_log.target_tracker_key='{$identifier}'"; $query = $targeted->create_new_list_query('', $where); $result = $targeted->db->query($query); $row = $targeted->db->fetchByAssoc($result); if (!empty($row)) { //found entry //do not create another campaign_log record is we already have an //invalid email or send error entry for this tracker key. $query_log = "select * from campaign_log where target_tracker_key='{$row['target_tracker_key']}'"; $query_log .= " and (activity_type='invalid email' or activity_type='send error')"; $result_log = $targeted->db->query($query_log); $row_log = $targeted->db->fetchByAssoc($result_log); if (empty($row_log)) { $bounce = new CampaignLog(); $bounce->campaign_id = $row['campaign_id']; $bounce->target_tracker_key = $row['target_tracker_key']; $bounce->target_id = $row['target_id']; $bounce->target_type = $row['target_type']; $bounce->list_id = $row['list_id']; $bounce->marketing_id = $row['marketing_id']; $bounce->activity_date = $email->date_created; $bounce->related_type = 'Emails'; $bounce->related_id = $email->id; //do we have the phrase permanent error in the email body. if (preg_match('/permanent[ ]*error/', $email_description)) { //invalid email address $bounce->activity_type = 'invalid email'; } else { //other -bounced email. $bounce->activity_type = 'send error'; } $return_id = $bounce->save(); } } else { $GLOBALS['log']->info("Warning: skipping bounced email with this tracker_key(identifier) in the message body " . $identifier); } } else { //todo mark the email address as invalid. search for prospects/leads/contact associated //with this email address and set the invalid_email flag... also make email available. } } else { $GLOBALS['log']->info("Warning: skipping bounced email because it does not have the removeme link."); } } else { $GLOBALS['log']->info("Warning: skipping bounced email because the sender is not MAILER-DAEMON."); } }