/** * Insert/Update the data of email address into DB * * @param array Data of returned email: * 'address' * 'errormsg' * 'message' * 'headers' * 'errtype' */ function dre_save_email_address_data($email_returned) { global $DB; if (empty($email_returned['address'])) { // No emails, Exit here return; } $EmailAddressCache =& get_EmailAddressCache(); // Get an existing email address to update if it exist $EmailAddress =& $EmailAddressCache->get_by_name($email_returned['address'], false); if (!$EmailAddress) { // Insert new email address $EmailAddress = new EmailAddress(); $EmailAddress->set('address', $email_returned['address']); } switch ($email_returned['errtype']) { // Error type of the returned email: case 'P': // Permanent error $EmailAddress->increase_counter('prmerror'); // Update only the adresses with NOT spammer statuses $EmailAddress->set_status('prmerror'); break; case 'T': // Temporary error if (in_array($EmailAddress->get('status'), array('suspicious1', 'suspicious2', 'suspicious3'))) { // If current status already is defined as 'suspicious1', 'suspicious2' or 'suspicious3' if ($EmailAddress->get('sent_last_returnerror') <= 1) { if ($EmailAddress->get('status') == 'suspicious1') { // Increase status from suspicious1 to suspicious2 $EmailAddress->set('status', 'suspicious2'); } elseif ($EmailAddress->get('status') == 'suspicious2') { // Increase status from suspicious2 to suspicious3 $EmailAddress->set('status', 'suspicious3'); } } } elseif ($EmailAddress->get('status') == 'redemption') { // IF current status is 'redemption' we should set it as 'suspicious3' $EmailAddress->set_status('suspicious3'); } else { // Update only the email addresses with level status less then Suspicious 1 $EmailAddress->set_status('suspicious1'); } $EmailAddress->increase_counter('tmperror'); break; case 'S': // Spam suspicion $EmailAddress->increase_counter('spamerror'); // Update only the email addresses with 'unknown' status $EmailAddress->set_status('warning'); break; default: // Other errors $EmailAddress->increase_counter('othererror'); // Update only the email addresses with 'unknown' status $EmailAddress->set_status('warning'); break; } // Insert/Update an email address $EmailAddress->dbsave(); }