Set('BaseURL', $ROOTURL); $Email_API->Set('TablePrefix', $TABLEPREFIX); $Email_API->Set('SendType', 'Auto'); $report_emails_attempted = $report_emails_sent = 0; $query = "SELECT a.ListID, l.ListName FROM " . $TABLEPREFIX . "autoresponders a, " . $TABLEPREFIX . "lists l WHERE a.listid=l.listid GROUP BY a.ListID, ListName"; $list_result = mysql_query($query); while($list_row = mysql_fetch_assoc($list_result)) { $listid = (int)$list_row['ListID']; $members_qry = "SELECT * FROM " . $TABLEPREFIX . "members WHERE ListID='" . addslashes($listid) . "'"; $members = mysql_query($members_qry); while($member = mysql_fetch_assoc($members)) { $member['Email'] = stripslashes($member['Email']); $hours = floor(($SYSTEMTIME-$member['SubscribeDate'])/3600); $found_responder = false; $lrList = mysql_query("SELECT * FROM " . $TABLEPREFIX . "autoresponders WHERE AutoresponderID='". addslashes((int)$member['LastResponderID']) ."'"); if($lr = mysql_fetch_array($lrList)) { $lasthours = $lr['HoursAfterSubscription']; $found_responder = true; } else { $lasthours = 0; } mysql_free_result($lrList); unset($lr); if ($lasthours > 0) { $found_responder = true; } // if we found the last autoresponder for this subscriber // but we can't load it (maybe it has been deleted ??) // then just go to the next subscriber. if ((int)$member['LastResponderID'] > 0 && !$found_responder) { continue; } $responder_query = "SELECT * FROM " . $TABLEPREFIX . "autoresponders WHERE ListID='".addslashes($listid)."' AND HoursAfterSubscription >= '".(int)$lasthours."' AND AutoResponderID != '" . $member['LastResponderID'] . "' ORDER BY HoursAfterSubscription ASC LIMIT 1"; $responder_result = mysql_query($responder_query); $autoresponder = mysql_fetch_assoc($responder_result); mysql_free_result($responder_result); if (empty($autoresponder)) { continue; } if ($hours < $autoresponder['HoursAfterSubscription']) { continue; } // if both bodies are empty, keep going. if (empty($autoresponder['HTMLBody']) && empty($autoresponder['TextBody'])) { continue; } // double check they aren't banned. if (Banned($member['Email'], $listid)) { log_mailing_error(DisplayDate(time()) . ',' . $member['Email'] . ',' . 'Email address (or domain) is banned from the mailing list'); continue; } $update_autoresponder_query = "UPDATE " . $TABLEPREFIX . "members SET LastResponderID='" . addslashes($autoresponder['AutoresponderID']) . "' WHERE MemberID='" . addslashes($member['MemberID']) . "'"; // We want to spread out the emails getting sent over the whole hour (if the user has throttling). // how many can we send per hour? $user_query = "SELECT * FROM " . $TABLEPREFIX . "admins WHERE AdminID='".addslashes($autoresponder['AdminID'])."'"; $user_result = mysql_query($user_query); $USER_DETAILS = mysql_fetch_assoc($user_result); mysql_free_result($user_result); $CURRENTADMIN = $USER_DETAILS; $PAUSE = 0; if ((int)$USER_DETAILS['PerHour'] > 0) { $PAUSE = 3600/(int)$USER_DETAILS['PerHour']; } $search_criteria = unserialize(stripslashes($autoresponder['SearchCriteria'])); // if it's an old autoresponder - these won't be set. if (!isset($search_criteria['Status'])) $search_criteria['Status'] = '1'; if (!isset($search_criteria['Confirmed'])) $search_criteria['Confirmed'] = '1'; if (!isset($search_criteria['SearchFormat'])) $search_criteria['SearchFormat'] = 'ALL'; if (!isset($search_criteria['Email'])) $search_criteria['Email'] = ''; if (!isset($search_criteria['HaveClickedLink'])) $search_criteria['HaveClickedLink'] = ''; if (!isset($search_criteria['HaveOpenedNewsletter'])) $search_criteria['HaveOpenedNewsletter'] = '0'; if (!isset($search_criteria['Fields'])) $search_criteria['Fields'] = array(); $fields = array(); if (!empty($search_criteria['Fields'])) { foreach(array_keys($search_criteria['Fields']) as $pos) { $key = current(array_keys($search_criteria['Fields'][$pos])); $fields[$key] = $search_criteria['Fields'][$pos][$key]; } } $subscribedateinfo = array(); if (isset($search_criteria['SubscribeDate'])) { if (is_array($search_criteria['SubscribeDate']) && isset($search_criteria['SubscribeDate']['enable']) && $search_criteria['SubscribeDate']['enable'] == 'on') { $subscribedateinfo = $search_criteria['SubscribeDate']; } } // make sure the member is part of this autoresponder.. $member_search = ReturnMembers($listid, $search_criteria['Email'], $search_criteria['Status'], $search_criteria['Confirmed'], $fields, $search_criteria['HaveClickedLink'], $search_criteria['SearchFormat'], false, array(), true, array(), 'Email', 'Up', $member['MemberID'], $subscribedateinfo, $search_criteria['HaveOpenedNewsletter']); unset($search_criteria); if (empty($member_search)) { mysql_query($update_autoresponder_query); continue; } if (empty($autoresponder['TextBody']) && empty($autoresponder['HTMLBody'])) { mysql_query($update_autoresponder_query); unset($autoresponder); continue; } $Email_API->SetSmtp(false); $Email_API->ClearRecipients(); $Email_API->ForgetEmail(); $Email_API->ClearAttachments(); $Email_API->Set('Subject', $autoresponder['Subject']); if ($USER_DETAILS['EmailServer'] || $USER_DETAILS['EmailServer'] != '') { if (strpos($USER_DETAILS['EmailServer'], ';') !== false) { list($servername, $username, $password) = explode(';', str_replace(' ', '', $USER_DETAILS['EmailServer'])); } else { $servername = $USER_DETAILS['EmailServer']; $username = $password = false; } $Email_API->SetSmtp($servername, $username, $password); } $Email_API->Set('Multipart', false); if ($autoresponder['Multipart']) { $Email_API->Set('Multipart', true); } switch($member['Format']) { case '1': $format = 'text'; break; case '2': case '3': $format = 'html'; break; } if (empty($autoresponder['HTMLBody'])) { $format = 'text'; $e['Format'] = '1'; } $Email_API->AddRecipient($member['Email'], '', $format, $member['MemberID']); $Email_API->TrackLinks($autoresponder['TrackLinks']); $Email_API->TrackOpens($autoresponder['TrackOpens']); $Email_API->Set('AdminID', $USER_DETAILS['AdminID']); $Email_API->Set('ComposedID', $autoresponder['AutoresponderID']); $Email_API->Set('ReplyTo', $autoresponder['ReplyTo']); $Email_API->Set('BounceAddress', $autoresponder['ReturnPath']); $Email_API->Set('FromAddress', $autoresponder['SendFrom']); $Email_API->Set('FromName', $autoresponder['SendName']); $Email_API->Set('Subject', html_entity_decode(stripslashes($autoresponder['Subject']))); $Email_API->AddBody('text', stripslashes($autoresponder['TextBody'])); $Email_API->AddBody('html', stripslashes($autoresponder['HTMLBody'])); if (empty($autoresponder['HTMLBody']) || empty($autoresponder['TextBody'])) { $Email_API->Set('Multipart', false); } $attachment_ids = explode(':', $autoresponder['AttachmentIDs']); if (!empty($attachment_ids) && $attachment_ids[0] != '') { $attachment_filename_result = mysql_query("SELECT AttachmentName, AttachmentFilename FROM " . $TABLEPREFIX . "attachments WHERE AttachmentID IN (" . implode(',', $attachment_ids) . ")"); while($attachment_row = mysql_fetch_assoc($attachment_filename_result)) { $attachment_file = dirname(__FILE__) . '/' . $attachment_row['AttachmentFilename']; $Email_API->AddAttachment($attachment_file, $attachment_row['AttachmentName']); } } $custom_fields_to_replace = $Email_API->GetCustomFields(); $custom_fields = array(); if (!empty($custom_fields_to_replace)) { $query = "SELECT v.FieldID AS FieldID, Value, FieldType, AllValues, DefaultValue FROM " . $TABLEPREFIX . "list_field_values v, " . $TABLEPREFIX . "list_fields f WHERE v.FieldID=f.FieldID AND v.ListID='" . addslashes($autoresponder['ListID']) . "' AND v.UserID='".addslashes($member['MemberID'])."' AND v.FieldID IN (" . implode(',', $custom_fields_to_replace) . ")"; $customfields_result = mysql_query($query); while($customfields_row = mysql_fetch_assoc($customfields_result)) { $value = stripslashes($customfields_row['Value']); switch($customfields_row['FieldType']) { case 'checkbox': if ($customfields_row['Value'] == 'CHECKED') { $value = 'Yes'; } else { $value = 'No'; } break; case 'longtext': if ($format=='HTML') { $value=nl2br($customfields_row['Value']); } break; case 'multicheckbox': $myvals = explode(':', $value); $value = ''; $fieldvals=explode(';',$customfields_row['AllValues']); foreach($fieldvals as $fieldval){ if (!$fieldval) continue; list($sys,$lab)=explode('->',$fieldval); if (in_array($sys, $myvals)) $value .= $lab . ', '; } $value = substr($value, 0, -2); break; case 'datebox': $order = explode(',', $customfields_row['AllValues']); list($day, $month, $year) = explode(':', $value); $value = ''; foreach($order as $o) { if (!in_array($o, array('month', 'day', 'year'))) continue; $value .= $$o . '/'; } $value = substr($value, 0, -1); break; } $custom_fields[] = array('fieldid' => $customfields_row['FieldID'], 'data' => $value); } } if ($member['Confirmed'] == 1) { $confirmation = 'Confirmed'; } else { $confirmation = 'Unconfirmed'; } if ($member['Status'] == 1) { $status = 'Active'; } else { $status = 'Inactive'; } switch($member['Format']) { case '1': $cf_format = 'Text'; break; case '2': case '3': $cf_format = 'HTML'; break; } $customfield_info = array( 'listid' => $autoresponder['ListID'], 'confirmcode' => $member['ConfirmCode'], 'sendid' => $autoresponder['AutoresponderID'], 'CustomFields' => $custom_fields, 'subscriberid' => $member['MemberID'], 'subscribedate' => $member['SubscribeDate'], 'confirmation' => $confirmation, 'status' => $status, 'format' => $cf_format, 'listname' => $list_row['ListName'] ); $Email_API->AddCustomFieldInfo($member['Email'], $customfield_info); $report_emails_attempted++; $mail_result = $Email_API->Send(true); if ($mail_result['success'] > 0) { $email_result = true; } else { $email_result = false; list($bad_email, $servermsg) = current($mail_result['fail']); } if (!$email_result) { $logmsg = 'Unable to Email'; if ($servermsg) $logmsg .= ': ' . $servermsg; log_mailing_error(DisplayDate(time()) . ',' . $bad_email . ',' . $logmsg); } else { $report_emails_sent++; } mysql_query($update_autoresponder_query); if ($PAUSE > 0 && $PAUSE < 1) { $p = floor($PAUSE*1000000); usleep($p); } else { sleep(floor($PAUSE)); } unset($autoresponder); } mysql_free_result($members); } @unlink($autoresponder_lock_file); ?>