diff --git a/Make_statuscodes.php b/Make_statuscodes.php index ef16be8..93dc9ec 100644 --- a/Make_statuscodes.php +++ b/Make_statuscodes.php @@ -1,59 +1,123 @@ 5 - $a[1] = preg_replace('/\n\s*/', ' ', $a[1]); #remove line breaks - $a[1] = preg_replace('/\s\s+/', ' ', $a[1]); #remove double spaces - $a[1] = preg_replace('/"/', '\\"', $a[1]); #requote quotes - $a[2] = preg_replace('/\n\s*/', ' ', $a[2]); #remove line breaks - $a[2] = preg_replace('/\s\s+/', ' ', $a[2]); #remove double spaces - $a[2] = preg_replace('/"/', '\\"', $a[2]); #requote quotes - print "\$status_code_classes['$a[0]']['title'] = \"". $a[1]. "\"; # $a[3]\n"; - print "\$status_code_classes['$a[0]']['descr'] = \"". $a[2]. "\";\n"; - } - fclose ($fh); +/** + * Make status codes file + * + * Create the include file with all of the latest IANA standards RFC3463 + changes + * + * PHP version 5 + * + * @category Email + * @package BounceHandler + * @author Multiple + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ + */ + +$codes_1_url='http://www.iana.org/assignments/smtp-enhanced-status-codes/'. + 'smtp-enhanced-status-codes-1.csv'; +$codes_3_url='http://www.iana.org/assignments/smtp-enhanced-status-codes/'. + 'smtp-enhanced-status-codes-3.csv'; + +$nl="\n"; + + +/** + * Split a line into sections to avoid going over 80 character limit + * whilst preserving PEAR standards. + * + * @param string $describer Describer line + * @param string $line Line to split + * @param string $nl New line character(s) + * + * @return void + */ +function splitIt($describer,$line,$nl) +{ + if (strlen($describer.$line)>70) { + $line_start = $nl . str_repeat(' ', 7) . '"'; + $line_continues = '".'; + print $describer . $nl; + print str_repeat(' ', 4) . '= "'; + $split = chunk_split($line, 72, $line_continues . $line_start); + print substr($split, 0, -strlen($line_continues . $line_start)); + print '";' . $nl . $nl; + } else { + print $describer.'="'.$line.'";'.$nl; + } } -print "\n"; +print ''.$nl; +print ' * @license http://opensource.org/licenses/BSD-2-Clause BSD'.$nl; +print ' * @link https://github.com/cfortune/PHP-Bounce-Handler/'.$nl; +print ' */'.$nl.$nl; +$fh = fopen($codes_1_url, "r"); +if ($fh !== false) { + $a = fgets($fh); // 1st line is titles + while (!feof($fh)) { + $a = fgetcsv($fh, 0, ',', '"'); + if (false===isset($a[0]) || false===isset($a[1]) + || false===isset($a[2]) + ) { + die('Unable to read CSV line: '.print_r($a, true)); + } + $a[0] = preg_replace('/\..*/', '', $a[0]); // 5.x.x -> 5 + $a[1] = preg_replace('/\n\s*/', ' ', $a[1]); // remove line breaks + $a[1] = preg_replace('/\s\s+/', ' ', $a[1]); // remove double spaces + $a[1] = preg_replace('/"/', '\\"', $a[1]); // requote quotes + $a[2] = preg_replace('/\n\s*/', ' ', $a[2]); // remove line breaks + $a[2] = preg_replace('/\s\s+/', ' ', $a[2]); // remove double spaces + $a[2] = preg_replace('/"/', '\\"', $a[2]); // requote quotes + print '// '.$a[3].$nl; + splitIt('$status_code_classes[\''.$a[0].'\'][\'title\']', $a[1], $nl); + splitIt('$status_code_classes[\''.$a[0].'\'][\'descr\']', $a[2], $nl); -#X.7.17,Mailbox owner has changed,5XX,"This status code is returned when a message is -#received with a Require-Recipient-Valid-Since -#field or RRVS extension and the receiving -#system is able to determine that the intended -#recipient mailbox has not been under -#continuous ownership since the specified date.",[RFC-ietf-appsawg-rrvs-header-field-10] (Standards Track),M. Kucherawy,IESG - - -$fh = fopen("http://www.iana.org/assignments/smtp-enhanced-status-codes/smtp-enhanced-status-codes-3.csv", "r"); -if ($fh !== FALSE) { - $a = fgets($fh); # 1st line is titles - while (!feof($fh)) { - $a = fgetcsv($fh, 0, ',', '"'); - $a[0] = preg_replace('/^X./i', '', $a[0]); #X.5.0 -> 5.0 - $a[1] = preg_replace('/\n\s*/', ' ', $a[1]); #remove line breaks - $a[1] = preg_replace('/\s\s+/', ' ', $a[1]); #remove double spaces - $a[1] = preg_replace('/"/', '\\"', $a[1]); #requote quotes - $a[3] = preg_replace('/\n\s*/', ' ', $a[3]); #remove line breaks - $a[3] = preg_replace('/\s\s+/', ' ', $a[3]); #remove double spaces - $a[3] = preg_replace('/"/', '\\"', $a[3]); #requote quotes - print "\$status_code_subclasses['$a[0]']['title'] = \"". $a[1]. "\"; # $a[4]\n"; - print "\$status_code_subclasses['$a[0]']['descr'] = \"". $a[3]. "\";\n"; - } - fclose ($fh); + } + fclose($fh); } -print "\n\n?>"; +print "\n"; + + +// X.7.17,Mailbox owner has changed,5XX,"This status code is +// returned when a message is +// received with a Require-Recipient-Valid-Since +// field or RRVS extension and the receiving +// system is able to determine that the intended +// recipient mailbox has not been under +// continuous ownership since the specified date.", +// [RFC-ietf-appsawg-rrvs-header-field-10] (Standards Track),M. Kucherawy,IESG + + +$fh = fopen($codes_3_url, "r"); +if ($fh !== false) { + $a = fgets($fh); // 1st line is titles + while (!feof($fh)) { + $a = fgetcsv($fh, 0, ',', '"'); + $a[0] = preg_replace('/^X./i', '', $a[0]); // X.5.0 -> 5.0 + $a[1] = preg_replace('/\n\s*/', ' ', $a[1]); // remove line breaks + $a[1] = preg_replace('/\s\s+/', ' ', $a[1]); // remove double spaces + $a[1] = preg_replace('/"/', '\\"', $a[1]); // requote quotes + $a[3] = preg_replace('/\n\s*/', ' ', $a[3]); // remove line breaks + $a[3] = preg_replace('/\s\s+/', ' ', $a[3]); // remove double spaces + $a[3] = preg_replace('/"/', '\\"', $a[3]); // requote quotes + + print '// '.$a[4].$nl; + splitIt('$status_code_subclasses[\''.$a[0].'\'][\'title\']', $a[1], $nl); + splitIt('$status_code_subclasses[\''.$a[0].'\'][\'descr\']', $a[3], $nl); -?> + } + fclose($fh); +} \ No newline at end of file diff --git a/README.html b/README.html new file mode 100644 index 0000000..37bf0fd --- /dev/null +++ b/README.html @@ -0,0 +1,75 @@ +

Quick and dirty bounce handler

+

Usage

+
+ require_once('bounce_driver.class.php'); + $bouncehandler=new Bouncehandler(); + $multiArray=$bouncehandler->get_the_facts(\$strEmail) +
+ +

( $multiArray=$bouncehandler->get_the_facts(\$strEmail) can be replaced by $multiArray = $bouncehandler->parse_email($strEmail) )

+

Returns a multi-dimensional associative array of bounced recipient addresses and their SMTP status codes (if available) - see + print_r(\$multiArray);

+ +

Will return recipient's email address, the RFC1893 error code, and the action. Action can be one of the following:

+
transient
Temporary problem
+
failed
Permanent problem
+
autoresponse
Vacation auto-response/auto-responder
+
""
Empty string - not classified
+

+ +You could dereference the \$multiArray in a 'for loop', for example...

+
+    foreach($multiArray as $the){
+        switch($the['action']){
+            case 'failed':
+                //do something
+                kill_him($the['recipient']);
+                break;
+            case 'transient':
+                //do something else
+                $num_attempts  = delivery_attempts($the['recipient']);
+                if($num_attempts  > 10){
+                    kill_him($the['recipient']);
+                }
+                else{
+                    insert_into_queue($the['recipient'], ($num_attempts+1));
+                }
+                break;
+            case 'autoresponse':
+                //do something different
+                postpone($the['recipient'], '7 days');
+                break;
+            default:
+                //don't do anything
+                break;
+        }
+    }
+
+ +Or, if it is an FBL, you could use the class variables to access the +data (Unlike Multipart-reports, FBL's report only one bounce) +You could also use them if the output array has only one index: + +
+    if($bouncehandler->type == 'fbl'
+       or count($bouncehandler->output) == 1)
+    {
+        echo $bouncehandler->action;
+        echo $bouncehandler->status;
+        echo $bouncehandler->recipient;
+        echo $bouncehandler->feedback_type;
+    }
+
+ +These class variables are safe for all bounce types: + + +

That's all you need to know, but if you want to get more complicated you can. Most methods are public. See source code.

\ No newline at end of file diff --git a/bounce_driver.class.php b/bounce_driver.class.php index d9a140b..adaf3c6 100644 --- a/bounce_driver.class.php +++ b/bounce_driver.class.php @@ -1,137 +1,376 @@ + * Original development. http://cfortune.kics.bc.ca + * @author Richard Bairwell + * Code cleanups and restructuring. http://blog.rac.me.uk + * @author "Kanon" + * @author Jamie McClelland + * https://mayfirst.org/jamie-mcclelland + * @author Michael Cooper + * @author Thomas Seifert + * @author Tim Petrowsky + * http://neuecouch.de + * @author Willy T. Koch + * http://apeland.no + * @author ganeshaspeaks.com + * FBL development + * @author Richard Catto + * FBL development + * @author Scott Brynen + * FBL development http://visioncritical.com + * https://github.com/visioncritical/PHP-Bounce-Handler + * @copyright 2006-2014 Chris Fortune and others. + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ + * @link http://www.anti-spam-man.com/php_bouncehandler/v7.3/ + * @link http://www.phpclasses.org/browse/file/11665.html + */ -/* BOUNCE HANDLER Class, Version 7.4 - * Description: "chops up the bounce into associative arrays" - * ~ http://www.anti-spam-man.com/php_bouncehandler/v7.3/ - * ~ https://github.com/cfortune/PHP-Bounce-Handler/ - * ~ http://www.phpclasses.org/browse/file/11665.html +/** + * Class BounceHandler. + * + * Interprets email bounces. + * + * @category Email + * @package BounceHandler + * @author Multiple + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ */ +class BounceHandler +{ -/* Debugging / Contributers: - * "Kanon" - * Jamie McClelland http://mayfirst.org - * Michael Cooper - * Thomas Seifert - * Tim Petrowsky http://neuecouch.de - * Willy T. Koch http://apeland.no - * ganeshaspeaks.com - FBL development - * Richard Catto - FBL development - * Scott Brynen - FBL development http://visioncritical.com -*/ - - -/* - The BSD License - Copyright (c) 2006-forever, Chris Fortune http://cfortune.kics.bc.ca - All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the BounceHandler nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -class BounceHandler{ - - /**** VARS ****************************************************************/ + /** + * Extracted header information. + * + * @var array + */ public $head_hash = array(); + /** + * Extracted ARF/FBL data. + * + * @var array + */ public $fbl_hash = array(); - public $body_hash = array(); // not necessary - private $bouncelist = array(); // from bounce_responses - private $autorespondlist = array(); // from bounce_responses - private $bouncesubj = array(); // from bounce_responses - + /** + * Not necessary(?) + * + * @var array + */ + public $body_hash = array(); + /** + * Set if this looks like a bounce. + * + * @var bool + */ public $looks_like_a_bounce = false; + /** + * Set if this looks like an ARF/FBL "abuse" request. + * + * @var bool + */ public $looks_like_an_FBL = false; + /** + * Set if this looks like an autoresponder. + * + * @var bool + */ public $looks_like_an_autoresponse = false; + /** + * Set if this looks like a Hotmail FBL request. + * + * @var bool + */ public $is_hotmail_fbl = false; - - // these are for feedback reports, so you can extract uids from the emails - // eg X-my-custom-header: userId12345 - // eg + /** + * Regular expression to look for web beacons from emails. + * + * E.g. + * + * @var string + */ public $web_beacon_preg_1 = ""; + /** + * Regular expression to look for web beacons from emails. + * + * E.g. + * + * @var string + */ public $web_beacon_preg_2 = ""; + /** + * String to look for beacons in the email headers. + * + * E.g. X-my-custom-header: userId12345 + * + * @var string + */ public $x_header_search_1 = ""; + + /** + * String to look for beacons in the email headers. + * + * E.g. X-my-custom-header: userId12345 + * + * @var string + */ public $x_header_search_2 = ""; - // accessors - public $type = ""; + /** + * Type of email - either autoresponse, fbl, bounce or "false" + * + * @var string|bool + */ + public $type = false; + + /** + * Result of the $web_beacon_preg_1 regular expression. + * + * @var string + */ public $web_beacon_1 = ""; + + /** + * Result of the $web_beacon_preg_2 regular expression. + * + * @var string + */ public $web_beacon_2 = ""; + + /** + * FBL feedback type if any. + * + * @var string + */ public $feedback_type = ""; + + /** + * Result of the x_header_search_1 search. + * + * @var string + */ public $x_header_beacon_1 = ""; + + /** + * Result of the x_header_search_2 search. + * + * @var string + */ public $x_header_beacon_2 = ""; - - // these accessors are useful only for FBL's - // or if the output array has only one index + + /** + * An accessor for $this->_bouncehandler->get_the_facts()[0]['action'] + * + * Recommendation action for the email. + * + * Only useful for FBL's or if the output array only has one index + * + * @var string + */ public $action = ""; + + /** + * An accessor for $this->_bouncehandler->get_the_facts()[0]['status']. + * + * Status of the email. + * Only useful for FBL's or if the output array only has one index. + * + * @var string + */ public $status = ""; + + /** + * An accessor for $this->_bouncehandler->get_the_facts()[0]['subect']. + * + * Subject of the email. + * Only useful for FBL's or if the output array only has one index. + * + * @var string + */ public $subject = ""; - public $recipient = ""; - // the raw data set, a multiArray + /** + * An accessor for $this->_bouncehandler->get_the_facts()[0]['recipient']. + * + * Recipient of the original email. + * Only useful for FBL's or if the output array only has one index. + * + * @var string + */ + public $recipient = ""; + /** + * @var array + */ public $output = array(); - - /**** INSTANTIATION *******************************************************/ - public function __construct(){ - $this->output[0]['action'] = ""; - $this->output[0]['status'] = ""; - $this->output[0]['recipient'] = ""; - require('bounce_responses.php'); - $this->bouncelist = $bouncelist; - $this->autorespondlist = $autorespondlist; - $this->bouncesubj = $bouncesubj; + /** + * Our cached list of bounce strings to look out for. + * + * @var array + */ + private $_bouncelist = array(); + + /** + * Cached list of auto-respond subjects to look out for. + * + * @var array + */ + private $_autorespondlist = array(); + + /** + * Cached list of bounce subjects to look out for. + * + * @var array + */ + private $_bouncesubj = array(); + + /** + * @var array + */ + private $_first_body_hash = array(); + + /** + * If this is an auto-response, how did we detect it? + * + * @var string + */ + private $_autoresponse = ''; + + + /** + * Constructor. + * + * If bouncelist, autorespondlist or bouncesubj is empty, then load them + * in from the bounce_responses.php file. + * + * @param array $bouncelist text in messages from which to figure out + * kind of bounce this is. + * @param array $autorespondlist triggers for autoresponders + * @param array $bouncesubj trigger subject lines for bounces + */ + public function __construct( + $bouncelist = array(), + $autorespondlist = array(), + $bouncesubj = array() + ) { + $this->_bouncelist = $bouncelist; + $this->_autorespondlist = $autorespondlist; + $this->_bouncesubj = $bouncesubj; + if (empty($bouncelist) || empty($autorespondlist) + || empty($bouncesubj) + ) { + include 'bounce_responses.php'; + if (empty($this->_bouncelist)) { + $this->_bouncelist = $bouncelist; + } + if (empty($this->_autorespondlist)) { + $this->_autorespondlist = $autorespondlist; + } + if (empty($bouncesubj)) { + $this->_bouncesubj = $bouncesubj; + } + } + $this->init_bouncehandler(); + } - - /**** METHODS *************************************************************/ - // this is the most commonly used public method - // quick and dirty - // useage: $multiArray = $this->get_the_facts($strEmail); - public function parse_email($eml){ + /** + * Most commonly used public method - quick and dirty email parsing. + * + * Usage: $multiArray = $this->get_the_facts($strEmail); + * + * @param string $eml Contents of the email. + * + * @return array + */ + public function parse_email($eml) + { return $this->get_the_facts($eml); } - public function get_the_facts($eml){ + + /** + * Gets the facts about the email + * + * @param string $eml Contents of the email. + * + * @return array + */ + public function get_the_facts($eml) + { // fluff up the email $bounce = $this->init_bouncehandler($eml); - if (strpos($bounce, "\r\n\r\n") !== FALSE) + if (strpos($bounce, "\r\n\r\n") !== false) { list($head, $body) = preg_split("/\r\n\r\n/", $bounce, 2); - else + } else { list($head, $body) = array($bounce, ''); + } $this->head_hash = $this->parse_head($head); // parse the email into data structures - $boundary = isset($this->head_hash['Content-type']['boundary']) ? $this->head_hash['Content-type']['boundary'] : ''; + $boundary = isset($this->head_hash['Content-type']['boundary']) + ? $this->head_hash['Content-type']['boundary'] : ''; $mime_sections = $this->parse_body_into_mime_sections($body, $boundary); - $this->body_hash = split("\r\n", $body); - $this->first_body_hash = isset($mime_sections['first_body_part']) ? $this->parse_head($mime_sections['first_body_part']) : array(); + $this->body_hash = preg_split("/\r\n/", $body); + $this->_first_body_hash = isset($mime_sections['first_body_part']) + ? $this->parse_head($mime_sections['first_body_part']) : array(); - $this->looks_like_a_bounce = $this->is_a_bounce(); + $this->looks_like_a_bounce + = $this->is_RFC1892_multipart_report() || $this->is_a_bounce(); $this->looks_like_an_FBL = $this->is_an_ARF(); - $this->looks_like_an_autoresponse = !$this->looks_like_a_bounce && !$this->looks_like_an_FBL && $this->is_an_autoresponse(); - - /* If you are trying to save processing power, and don't care much - * about accuracy then uncomment this statement in order to skip the - * heroic text parsing below. - */ - //if(!$this->looks_like_a_bounce && !$this->looks_like_an_FBL && !$this->looks_like_an_autoresponse){ - // return "unknown"; - //} - + $this->looks_like_an_autoresponse = $this->is_an_autoresponse(); - /*** now we try all our weird text parsing methods (E-mail is weird!) ******************************/ + /* now we try all our weird text parsing methods (E-mail is weird!) */ - // is it a Feedback Loop, in Abuse Feedback Reporting Format (ARF)? - // http://en.wikipedia.org/wiki/Abuse_Reporting_Format#Abuse_Feedback_Reporting_Format_.28ARF.29 - if($this->looks_like_an_FBL){ + /** + * Is it a feedback loop in abuse feedback reporting format (ARF)? + * + * @link http://en.wikipedia.org/wiki/Abuse_Reporting_Format + * #Abuse_Feedback_Reporting_Format_.28ARF.29 + */ + if ($this->looks_like_an_FBL) { $this->output[0]['action'] = 'failed'; $this->output[0]['status'] = "5.7.1"; - $this->subject = trim(str_ireplace("Fw:", "", $this->head_hash['Subject'])); - if ($this->is_hotmail_fbl === true){ + $this->subject = trim( + str_ireplace("Fw:", "", $this->head_hash['Subject']) + ); + if ($this->is_hotmail_fbl === true) { // fill in the fbl_hash with sensible values $this->fbl_hash['Source-ip'] = ''; $this->fbl_hash['Original-mail-from'] = ''; @@ -140,129 +379,211 @@ public function get_the_facts($eml){ $this->fbl_hash['Content-disposition'] = 'inline'; $this->fbl_hash['Content-type'] = 'message/feedback-report'; $this->fbl_hash['User-agent'] = 'Hotmail FBL'; - if (isset($this->first_body_hash['Date'])) - $this->fbl_hash['Received-date'] = $this->first_body_hash['Date']; - if (isset($this->head_hash['Subject']) && preg_match('/complaint about message from ([0-9.]+)/', $this->head_hash['Subject'], $matches)) + if (isset($this->_first_body_hash['Date'])) { + $this->fbl_hash['Received-date'] + = $this->_first_body_hash['Date']; + } + if (isset($this->head_hash['Subject']) + && preg_match( + '/complaint about message from ([0-9.]+)/', + $this->head_hash['Subject'], $matches + ) + ) { $this->fbl_hash['Source-ip'] = $matches[1]; - if (!empty($this->recipient)) + } + if (!empty($this->recipient)) { $this->fbl_hash['Original-rcpt-to'] = $this->recipient; - if (isset($this->first_body_hash['X-sid-pra'])) - $this->fbl_hash['Original-mail-from'] = $this->first_body_hash['X-sid-pra']; - } - else { - $this->fbl_hash = $this->standard_parser($mime_sections['machine_parsable_body_part']); - $returnedhash = $this->standard_parser($mime_sections['returned_message_body_part']); - if (!empty($returnedhash['Return-path'])) - $this->fbl_hash['Original-mail-from'] = $returnedhash['Return-path']; - elseif (empty($this->fbl_hash['Original-mail-from']) && !empty($returnedhash['From'])) - $this->fbl_hash['Original-mail-from'] = $returnedhash['From']; - if (empty($this->fbl_hash['Original-rcpt-to']) && !empty($this->fbl_hash['Removal-recipient']) ) - $this->fbl_hash['Original-rcpt-to'] = $this->fbl_hash['Removal-recipient']; - elseif (isset($returnedhash['To'])) + } + if (isset($this->_first_body_hash['X-sid-pra'])) { + $this->fbl_hash['Original-mail-from'] + = $this->_first_body_hash['X-sid-pra']; + } + } else { + $this->fbl_hash = $this->standard_parser( + $mime_sections['machine_parsable_body_part'] + ); + $returnedhash = $this->standard_parser( + $mime_sections['returned_message_body_part'] + ); + if (!empty($returnedhash['Return-path'])) { + $this->fbl_hash['Original-mail-from'] + = $returnedhash['Return-path']; + } elseif (empty($this->fbl_hash['Original-mail-from']) + && !empty($returnedhash['From']) + ) { + $this->fbl_hash['Original-mail-from'] + = $returnedhash['From']; + } + if (empty($this->fbl_hash['Original-rcpt-to']) + && !empty($this->fbl_hash['Removal-recipient']) + ) { + $this->fbl_hash['Original-rcpt-to'] + = $this->fbl_hash['Removal-recipient']; + } elseif (isset($returnedhash['To'])) { $this->fbl_hash['Original-rcpt-to'] = $returnedhash['To']; - else + } else { $this->fbl_hash['Original-rcpt-to'] = ''; - if (!isset($this->fbl_hash['Source-ip'])) - if (!empty($returnedhash['X-originating-ip'])) - $this->fbl_hash['Source-ip'] = $this->strip_angle_brackets($returnedhash['X-originating-ip']); - else + } + if (!isset($this->fbl_hash['Source-ip'])) { + if (!empty($returnedhash['X-originating-ip'])) { + $this->fbl_hash['Source-ip'] + = $this->_strip_angle_brackets( + $returnedhash['X-originating-ip'] + ); + } else { $this->fbl_hash['Source-ip'] = ''; + } + } } - // warning, some servers will remove the name of the original intended recipient from the FBL report, - // replacing it with redacted@rcpt-hostname.com, making it utterly useless, of course (unless you used a web-beacon). - // here we try our best to give you the actual intended recipient, if possible. - if (preg_match('/Undisclosed|redacted/i', $this->fbl_hash['Original-rcpt-to']) && isset($this->fbl_hash['Removal-recipient']) ) { - $this->fbl_hash['Original-rcpt-to'] = @$this->fbl_hash['Removal-recipient']; + // warning, some servers will remove the name of the original + // intended recipient from the FBL report, + // replacing it with redacted@rcpt-hostname.com, making it utterly + // useless, of course (unless you used a web-beacon). + // here we try our best to give you the actual intended recipient, + // if possible. + if (preg_match( + '/Undisclosed|redacted/i', + $this->fbl_hash['Original-rcpt-to'] + ) + && isset($this->fbl_hash['Removal-recipient']) + ) { + $this->fbl_hash['Original-rcpt-to'] + = @$this->fbl_hash['Removal-recipient']; } - if (empty($this->fbl_hash['Received-date']) && !empty($this->fbl_hash[@'Arrival-date']) ) { - $this->fbl_hash['Received-date'] = @$this->fbl_hash['Arrival-date']; + if (empty($this->fbl_hash['Received-date']) + && !empty($this->fbl_hash[@'Arrival-date']) + ) { + $this->fbl_hash['Received-date'] + = @$this->fbl_hash['Arrival-date']; } - $this->fbl_hash['Original-mail-from'] = $this->strip_angle_brackets(@$this->fbl_hash['Original-mail-from']); - $this->fbl_hash['Original-rcpt-to'] = $this->strip_angle_brackets(@$this->fbl_hash['Original-rcpt-to']); + $this->fbl_hash['Original-mail-from'] = $this->_strip_angle_brackets( + @$this->fbl_hash['Original-mail-from'] + ); + $this->fbl_hash['Original-rcpt-to'] = $this->_strip_angle_brackets( + @$this->fbl_hash['Original-rcpt-to'] + ); $this->output[0]['recipient'] = $this->fbl_hash['Original-rcpt-to']; - } - -#??? else if (preg_match("/auto.{0,20}reply|vacation|(out|away|on holiday).*office/i", $this->head_hash['Subject'])){ -# // looks like a vacation autoreply, ignoring -# $this->output[0]['action'] = 'autoreply'; -# } - - // is this an autoresponse ? - elseif ($this->looks_like_an_autoresponse) { - $this->output[0]['action'] = 'autoresponse'; #??? 'transient' 'autoreply' ?? - $this->output[0]['autoresponse'] = $this->autoresponse; #??? 4.3.2 + } elseif ($this->looks_like_an_autoresponse) { + // is this an autoresponse ? + $this->output[0]['action'] = 'autoresponse'; + $this->output[0]['autoresponse'] = $this->_autoresponse; + $this->output[0]['status'] = '2.0'; // grab the first recipient and break - $this->output[0]['recipient'] = isset($this->head_hash['Return-path']) ? $this->strip_angle_brackets($this->head_hash['Return-path']) : ''; - if(empty($this->output[0]['recipient'])){ + $this->output[0]['recipient'] + = isset($this->head_hash['Return-path']) + ? $this->_strip_angle_brackets($this->head_hash['Return-path']) + : ''; + if (empty($this->output[0]['recipient'])) { + $this->output[0]['recipient'] + = isset($this->head_hash['From']) + ? $this->_strip_angle_brackets($this->head_hash['From']) + : ''; + } + if (empty($this->output[0]['recipient'])) { $arrFailed = $this->find_email_addresses($body); - for($j=0; $joutput[$j]['recipient'] = trim($arrFailed[$j]); - break; + break; } } - } + } else if ($this->is_RFC1892_multipart_report() === true) { - else if ($this->is_RFC1892_multipart_report() === TRUE){ - $rpt_hash = $this->parse_machine_parsable_body_part($mime_sections['machine_parsable_body_part']); + $rpt_hash = $this->parse_machine_parsable_body_part( + $mime_sections['machine_parsable_body_part'] + ); if (isset($rpt_hash['per_recipient'])) { - for($i=0; $ioutput[$i]['recipient'] = $this->find_recipient($rpt_hash['per_recipient'][$i]); - $mycode = @$this->format_status_code($rpt_hash['per_recipient'][$i]['Status']); - $this->output[$i]['status'] = @$mycode['code']; - $this->output[$i]['action'] = @$rpt_hash['per_recipient'][$i]['Action']; + for ($i = 0; $i < count($rpt_hash['per_recipient']); $i++) { + $this->output[$i]['recipient'] = $this->find_recipient( + $rpt_hash['per_recipient'][$i] + ); + $mycode = @$this->format_status_code( + $rpt_hash['per_recipient'][$i]['Status'] + ); + $this->output[$i]['status'] = $mycode['code']; + + $this->output[$i]['action'] + = $this->get_action_from_status_code($mycode['code']); } - } - else { - $arrFailed = $this->find_email_addresses($mime_sections['first_body_part']); - for($j=0; $jfind_email_addresses( + $mime_sections['first_body_part'] + ); + for ($j = 0; $j < count($arrFailed); $j++) { $this->output[$j]['recipient'] = trim($arrFailed[$j]); - $this->output[$j]['status'] = $this->get_status_code_from_text($this->output[$j]['recipient'],0); - $this->output[$j]['action'] = $this->get_action_from_status_code($this->output[$j]['status']); + $this->output[$j]['status'] + = $this->get_status_code_from_text( + $this->output[$j]['recipient'], 0 + ); + $this->output[$j]['action'] + = $this->get_action_from_status_code( + $this->output[$j]['status'] + ); } - } - } - - else if(isset($this->head_hash['X-failed-recipients'])) { + } + } else if (isset($this->head_hash['X-failed-recipients'])) { // Busted Exim MTA // Up to 50 email addresses can be listed on each header. // There can be multiple X-Failed-Recipients: headers. - (not supported) - $arrFailed = split(',', $this->head_hash['X-failed-recipients']); - for($j=0; $joutput[$j]['recipient'] = trim($arrFailed[$j]); - $this->output[$j]['status'] = $this->get_status_code_from_text($this->output[$j]['recipient'],0); - $this->output[$j]['action'] = $this->get_action_from_status_code($this->output[$j]['status']); - } - } - - else if(!empty($boundary) && $this->looks_like_a_bounce){ - // oh god it could be anything, but at least it has mime parts, so let's try anyway - $arrFailed = $this->find_email_addresses($mime_sections['first_body_part']); - for($j=0; $jhead_hash['X-failed-recipients']); + for ($j = 0; $j < count($arrFailed); $j++) { $this->output[$j]['recipient'] = trim($arrFailed[$j]); - $this->output[$j]['status'] = $this->get_status_code_from_text($this->output[$j]['recipient'],0); - $this->output[$j]['action'] = $this->get_action_from_status_code($this->output[$j]['status']); + $this->output[$j]['status'] = $this->get_status_code_from_text( + $this->output[$j]['recipient'], 0 + ); + $this->output[$j]['action'] + = $this->get_action_from_status_code( + $this->output[$j]['status'] + ); + $this->looks_like_a_bounce = true; } - } - - else if($this->looks_like_a_bounce){ - // last ditch attempt - // could possibly produce erroneous output, or be very resource consuming, - // so be careful. You should comment out this section if you are very concerned - // about 100% accuracy or if you want very fast performance. - // Leave it turned on if you know that all messages to be analyzed are bounces. - $arrFailed = $this->find_email_addresses($body); - for($j=0; $joutput[$j]['recipient'] = trim($arrFailed[$j]); - $this->output[$j]['status'] = $this->get_status_code_from_text($this->output[$j]['recipient'],0); - $this->output[$j]['action'] = $this->get_action_from_status_code($this->output[$j]['status']); + } else { + if (!empty($boundary)) { + // oh god it could be anything, but at least it has mime parts, + // so let's try anyway + $arrFailed = $this->find_email_addresses( + $mime_sections['first_body_part'] + ); + for ($j = 0; $j < count($arrFailed); $j++) { + $this->output[$j]['recipient'] = trim($arrFailed[$j]); + $this->output[$j]['status'] + = $this->get_status_code_from_text( + $this->output[$j]['recipient'], 0 + ); + $this->output[$j]['action'] + = $this->get_action_from_status_code( + $this->output[$j]['status'] + ); + } + } else { + // last ditch attempt + // could possibly produce erroneous output, or be very resource + // consuming, so be careful. You should comment out this + // section if you are very concerned + // about 100% accuracy or if you want very fast performance. + // Leave it turned on if you know that all messages to be + // analyzed are bounces. + $arrFailed = $this->find_email_addresses($body); + for ($j = 0; $j < count($arrFailed); $j++) { + $this->output[$j]['recipient'] = trim($arrFailed[$j]); + $this->output[$j]['status'] + = $this->get_status_code_from_text( + $this->output[$j]['recipient'], 0 + ); + $this->output[$j]['action'] + = $this->get_action_from_status_code( + $this->output[$j]['status'] + ); + } } } // else if()..... add a parser for your busted-ass MTA here - + // remove empty array indices $tmp = array(); - foreach($this->output as $arr){ - if(empty($arr['recipient']) && empty($arr['status']) && empty($arr['action']) ){ + foreach ($this->output as $arr) { + if (empty($arr['recipient']) && empty($arr['status']) + && empty($arr['action']) + ) { continue; } $tmp[] = $arr; @@ -273,35 +594,60 @@ public function get_the_facts($eml){ data (Unlike Multipart-reports, FBL's report only one bounce) */ $this->type = $this->find_type(); - $this->action = isset($this->output[0]['action']) ? $this->output[0]['action'] : ''; - $this->status = isset($this->output[0]['status']) ? $this->output[0]['status'] : ''; - $this->subject = ($this->subject) ? $this->subject : $this->head_hash['Subject']; - $this->recipient = isset($this->output[0]['recipient']) ? $this->output[0]['recipient'] : ''; - $this->feedback_type = (isset($this->fbl_hash['Feedback-type'])) ? $this->fbl_hash['Feedback-type'] : ""; + $this->action = isset($this->output[0]['action']) + ? $this->output[0]['action'] : ''; + $this->status = isset($this->output[0]['status']) + ? $this->output[0]['status'] : ''; + $this->subject = ($this->subject) ? $this->subject + : $this->head_hash['Subject']; + $this->recipient = isset($this->output[0]['recipient']) + ? $this->output[0]['recipient'] : ''; + $this->feedback_type = (isset($this->fbl_hash['Feedback-type'])) + ? $this->fbl_hash['Feedback-type'] : ""; // sniff out any web beacons - if($this->web_beacon_preg_1) - $this->web_beacon_1 = $this->find_web_beacon($body, $this->web_beacon_preg_1); - if($this->web_beacon_preg_2) - $this->web_beacon_2 = $this->find_web_beacon($body, $this->web_beacon_preg_2); - if($this->x_header_search_1) - $this->x_header_beacon_1 = $this->find_x_header ($this->x_header_search_1); - if($this->x_header_search_2) - $this->x_header_beacon_2 = $this->find_x_header ($this->x_header_search_2); + if ($this->web_beacon_preg_1) { + $this->web_beacon_1 = $this->find_web_beacon( + $body, $this->web_beacon_preg_1 + ); + } + if ($this->web_beacon_preg_2) { + $this->web_beacon_2 = $this->find_web_beacon( + $body, $this->web_beacon_preg_2 + ); + } + if ($this->x_header_search_1) { + $this->x_header_beacon_1 = $this->find_x_header( + $this->x_header_search_1 + ); + } + if ($this->x_header_search_2) { + $this->x_header_beacon_2 = $this->find_x_header( + $this->x_header_search_2 + ); + } return $this->output; } - - function init_bouncehandler($blob, $format='string'){ + /** + * Setup/reset thge bounce handler. + * + * @param string $blob Inbound email + * @param string $format Not currently used + * + * @return string Contents of email + */ + function init_bouncehandler($blob = '', $format = 'string') + { $this->head_hash = array(); $this->fbl_hash = array(); - $this->body_hash = array(); + $this->body_hash = array(); $this->looks_like_a_bounce = false; $this->looks_like_an_FBL = false; $this->is_hotmail_fbl = false; - $this->type = ""; + $this->type = false; $this->feedback_type = ""; $this->action = ""; $this->status = ""; @@ -311,498 +657,1006 @@ function init_bouncehandler($blob, $format='string'){ $this->output[0]['action'] = ''; $this->output[0]['status'] = ''; $this->output[0]['recipient'] = ''; + $strEmail = ''; + if ('' !== $blob) { + // TODO: accept several formats (XML, string, array) + // currently accepts only string + //if($format=='xml_array'){ + // $strEmail = ""; + // $out = ""; + // for($i=0; $i<$blob; $i++){ + // $out = preg_replace("/
/i", "", $blob[$i]); + // $out = preg_replace("/
/i", "", $out); + // $out = preg_replace("//i", "", $out); + // $out = preg_replace("//i", "", $out); + // $out = rtrim($out) . "\r\n"; + // $strEmail .= $out; + // } + //} + //else if($format=='string'){ - // TODO: accept several formats (XML, string, array) - // currently accepts only string - //if($format=='xml_array'){ - // $strEmail = ""; - // $out = ""; - // for($i=0; $i<$blob; $i++){ - // $out = preg_replace("/
/i", "", $blob[$i]); - // $out = preg_replace("/
/i", "", $out); - // $out = preg_replace("//i", "", $out); - // $out = preg_replace("//i", "", $out); - // $out = rtrim($out) . "\r\n"; - // $strEmail .= $out; - // } - //} - //else if($format=='string'){ - - $strEmail = str_replace("\r\n", "\n", $blob); // line returns 1 - $strEmail = str_replace("\n", "\r\n", $strEmail);// line returns 2 -# $strEmail = str_replace("=\r\n", "", $strEmail); // remove MIME line breaks (would never exist as #1 above would have dealt with) -# $strEmail = str_replace("=3D", "=", $strEmail); // equals sign - dealt with in the MIME decode section now -# $strEmail = str_replace("=09", " ", $strEmail); // tabs - - //} - //else if($format=='array'){ - // $strEmail = ""; - // for($i=0; $i<$blob; $i++){ - // $strEmail .= rtrim($blob[$i]) . "\r\n"; - // } - //} + $strEmail = str_replace("\r\n", "\n", $blob); // line returns 1 + $strEmail = str_replace("\n", "\r\n", $strEmail);// line returns 2 + // $strEmail = str_replace("=\r\n", "", $strEmail); + // remove MIME line breaks (would never exist as #1 above would have + // have dealt with) + // $strEmail = str_replace("=3D", "=", $strEmail); + // equals sign - dealt with in the MIME decode section now + // $strEmail = str_replace("=09", " ", $strEmail); // tabs + //} + //else if($format=='array'){ + // $strEmail = ""; + // for($i=0; $i<$blob; $i++){ + // $strEmail .= rtrim($blob[$i]) . "\r\n"; + // } + //} + } return $strEmail; } - // general purpose recursive heuristic function - // to try to extract useful info from the bounces produced by busted MTAs - function get_status_code_from_text($recipient, $index){ - for($i=$index; $ibody_hash); $i++){ - $line = trim($this->body_hash[$i]); - //skip Message-ID lines - if (stripos($line, 'Message-ID') !== FALSE) - continue; - - /******** recurse into the email if you find the recipient ********/ - if(stristr($line, $recipient)!==FALSE){ - // the status code MIGHT be in the next few lines after the recipient line, - // depending on the message from the foreign host... What a laugh riot! - $status_code = $this->get_status_code_from_text($recipient, $i+1); - if($status_code){ - return $status_code; + /** + * Try to extract useful info from the headers bounces produced by + * busted MTAs. + * + * @param string|array $headers Headers of the email + * + * @return array + */ + function parse_head($headers) + { + if (!is_array($headers)) { + $headers = explode("\r\n", $headers); + } + $hash = $this->standard_parser($headers); + if (isset($hash['Content-type'])) { + //preg_match('/Multipart\/Report/i', $hash['Content-type'])){ + $multipart_report = explode(';', $hash['Content-type']); + $hash['Content-type'] = ''; + $hash['Content-type']['type'] = strtolower($multipart_report[0]); + foreach ($multipart_report as $mr) { + if (preg_match('/([^=.]*?)=(.*)/i', $mr, $matches)) { + // didn't work when the content-type boundary ID contained + // an equal sign, + // that exists in bounces from many Exchange servers + //if(preg_match('/([a-z]*)=(.*)?/i', $mr, $matches)){ + $hash['Content-type'][strtolower(trim($matches[1]))] + = str_replace('"', '', $matches[2]); } - - } - - /******** exit conditions ********/ - // if it's the end of the human readable part in this stupid bounce - if(stristr($line, '------ This is a copy of the message')!==FALSE){ - break; } - //if we see an email address other than our current recipient's, - if(count($this->find_email_addresses($line))>=1 - && stristr($line, $recipient) === FALSE - && strstr($line, 'FROM:<') === FALSE) { // Kanon added this line because Hotmail puts the e-mail address too soon and there actually is error message stuff after it. - break; - } - - //******** pattern matching ********/ - foreach ($this->bouncelist as $bouncetext => $bouncecode) { - if (preg_match("/$bouncetext/i", $line, $matches)) - return (isset($matches[1])) ? $matches[1] : $bouncecode; - } - - // Search for a rfc3463 style return code - if (preg_match('/\W([245]\.[01234567]\.[0-9]{1,2})\W/', $line, $matches)) { - return $matches[1]; -#??? this seems somewhat redundant -# $mycode = str_replace('.', '', $matches[1]); -# $mycode = $this->format_status_code($mycode); -# return implode('.', $mycode['code']); #x.y.z format - } - - // search for RFC2821 return code - // thanks to mark.tolman@gmail.com - // Maybe at some point it should have it's own place within the main parsing scheme (at line 88) - if (preg_match('/\]?: ([45][01257][012345]) /', $line, $matches) || - preg_match('/^([45][01257][012345]) (?:.*?)(?:denied|inactive|deactivated|rejected|disabled|unknown|no such|not (?:our|activated|a valid))+/i', $line, $matches)) - { - $mycode = $matches[1]; - // map RFC2821 -> RFC3463 codes - if ($mycode == '550' || $mycode == '551' || $mycode == '553' || $mycode == '554') - return '5.1.1'; #perm error - elseif ($mycode == '452' || $mycode == '552') - return '4.2.2'; #mailbox full - elseif ($mycode == '450' || $mycode == '421') - return '4.3.2'; #temp unavailable - #???$mycode = $this->format_status_code($mycode); - #???return implode('.', $mycode['code']); - } - } - return '5.5.0'; #other or unknown status - } - function is_RFC1892_multipart_report(){ - return @$this->head_hash['Content-type']['type']=='multipart/report' - && @$this->head_hash['Content-type']['report-type']=='delivery-status' - && @$this->head_hash['Content-type'][boundary]!==''; + return $hash; } - function parse_head($headers){ - if(!is_array($headers)) - $headers = explode("\r\n", $headers); - $hash = $this->standard_parser($headers); - if(isset($hash['Content-type'])) {//preg_match('/Multipart\/Report/i', $hash['Content-type'])){ - $multipart_report = explode (';', $hash['Content-type']); - $hash['Content-type']=''; - $hash['Content-type']['type'] = strtolower($multipart_report[0]); - foreach($multipart_report as $mr){ - if(preg_match('/([^=.]*?)=(.*)/i', $mr, $matches)){ - // didn't work when the content-type boundary ID contained an equal sign, - // that exists in bounces from many Exchange servers - //if(preg_match('/([a-z]*)=(.*)?/i', $mr, $matches)){ - $hash['Content-type'][strtolower(trim($matches[1]))]= str_replace('"','',$matches[2]); + /** + * Try and understand information from the headers of the email. + * + * @param string|array $content Header of the email + * + * @return array + */ + function standard_parser($content) + { + // associative array orstr + // receives email head as array of lines + // simple parse (Entity: value\n) + $hash = array('Received' => ''); + if (!is_array($content)) { + $content = explode("\r\n", $content); + } + foreach ($content as $line) { + if (preg_match('/^([^\s.]*):\s*(.*)\s*/', $line, $array)) { + $entity = ucfirst(strtolower($array[1])); + if (isset($array[2]) && strpos($array[2], '=?') !== false) { + // decode MIME Header encoding (subject lines etc) + $array[2] = iconv_mime_decode( + $array[2], ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8" + ); } + if (empty($hash[$entity])) { + $hash[$entity] = trim($array[2]); + } else if ($hash['Received']) { + // grab extra Received headers :( + // pile it on with pipe delimiters, + // oh well, SMTP is broken in this way + if ($entity and $array[2] and $array[2] != $hash[$entity]) { + $hash[$entity] .= "|" . trim($array[2]); + } + } + } elseif (isset($line) && isset($entity) + && preg_match( + '/^\s+(.+)\s*/', $line, $array + ) + && $entity + ) { + $line = trim($line); + if (true === isset($array[1]) + && strpos($array[1], '=?') !== false + ) { + $line = iconv_mime_decode( + $array[2], ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8" + ); + } + $hash[$entity] .= ' ' . $line; } } + // special formatting + $hash['Received'] = @explode('|', $hash['Received']); + $hash['Subject'] = isset($hash['Subject']) ? $hash['Subject'] : ''; return $hash; } - function contenttype_decode ($mimepart) { + /** + * Split an email into multiple mime sections + * + * @param string|array $body Body of the email + * @param string $boundary The boundary MIME separator. + * + * @return array + */ + function parse_body_into_mime_sections($body, $boundary) + { + + if (!$boundary) { + return array(); + } + if (is_array($body)) { + $body = implode("\r\n", $body); + } + $body = explode(rtrim($boundary, '='), $body); + + $mime_sections['first_body_part'] = isset($body[1]) + ? $this->contenttype_decode($body[1]) : ''; // proper MIME decode + $mime_sections['machine_parsable_body_part'] = isset($body[2]) + ? $this->contenttype_decode($body[2]) : ''; + $mime_sections['returned_message_body_part'] = isset($body[3]) + ? $this->contenttype_decode($body[3]) : ''; + return $mime_sections; + } + + /** + * Decode a content transfer-encoded part of the email. + * + * @param string $mimepart MIME encoded email body + * + * @return string + */ + function contenttype_decode($mimepart) + { $encoding = '7bit'; $decoded = ''; foreach (explode("\r\n", $mimepart) as $line) { - if (preg_match("/^Content-Transfer-Encoding:\s*(\S+)/", $line, $match)) { + if (preg_match( + "/^Content-Transfer-Encoding:\s*(\S+)/", $line, $match + )) { $encoding = $match[1]; $decoded .= $line . "\r\n"; - } - else switch ($encoding) { - case 'quoted-printable': { - if (substr($line, -1) == '=') + } else { + switch ($encoding) { + case 'quoted-printable': + if (substr($line, -1) == '=') { $line = substr($line, 0, -1); - else + } else { $line .= "\r\n"; - $decoded .= preg_replace("/=([0-9A-F][0-9A-F])/e", 'chr(hexdec("$1"))', $line); - } - case 'base64': { + } + $decoded .= preg_replace_callback( + "/=([0-9A-F][0-9A-F])/", function ($matches) { + return chr(hexdec($matches[0])); + }, $line + ); + break; + case 'base64': $decoded .= base64_decode($line); break; + default: // 7bit, 8bit, binary + $decoded .= $line . "\r\n"; } - default: # 7bit, 8bit, binary - $decoded .= $line."\r\n"; } } + return $decoded; } - function parse_body_into_mime_sections($body, $boundary){ - if(!$boundary) return array(); - if (is_array($body)) - $body = implode("\r\n", $body); - $body = explode($boundary, $body); - $mime_sections['first_body_part'] = isset($body[1]) ? $this->contenttype_decode($body[1]) : ''; #proper MIME decode - $mime_sections['machine_parsable_body_part'] = isset($body[2]) ? $this->contenttype_decode($body[2]) : ''; - $mime_sections['returned_message_body_part'] = isset($body[3]) ? $this->contenttype_decode($body[3]) : ''; - return $mime_sections; + /** + * Sees if this is an "obvious bounce". + * + * @return bool + */ + function is_a_bounce() + { + if (true === isset($this->head_hash['From']) + && preg_match( + '/^(postmaster|mailer-daemon)\@?/i', $this->head_hash['From'] + ) + ) { + return true; + } + foreach ($this->_bouncesubj as $s) { + if (preg_match("/^$s/i", $this->head_hash['Subject'])) { + return true; + } + } + return false; } + /** + * Sees if this is an obvious "Abuse reporting format" email. + * + * @return bool + */ + function is_an_ARF() + { + if (isset($this->head_hash['Content-type']['report-type']) + && preg_match( + '/feedback-report/', + $this->head_hash['Content-type']['report-type'] + ) + ) { + return true; + } + if (isset($this->head_hash['X-loop']) + && preg_match( + '/scomp/', $this->head_hash['X-loop'] + ) + ) { + return true; + } + if (isset($this->head_hash['X-hmxmroriginalrecipient'])) { + $this->is_hotmail_fbl = true; + $this->recipient = $this->head_hash['X-hmxmroriginalrecipient']; - function standard_parser($content){ // associative array orstr - // receives email head as array of lines - // simple parse (Entity: value\n) - $hash = array('Received'=>''); - if(!is_array($content)) $content = explode("\r\n", $content); - foreach($content as $line){ - if(preg_match('/^([^\s.]*):\s*(.*)\s*/', $line, $array)){ - $entity = ucfirst(strtolower($array[1])); - if (isset($array[2]) && strpos($array[2], '=?') !== FALSE) // decode MIME Header encoding (subject lines etc) - $array[2] = iconv_mime_decode($array[2], ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8"); - if(empty($hash[$entity])){ - $hash[$entity] = trim($array[2]); + return true; + } + if (isset($this->_first_body_hash['X-hmxmroriginalrecipient'])) { + $this->is_hotmail_fbl = true; + $this->recipient + = $this->_first_body_hash['X-hmxmroriginalrecipient']; + + return true; + } + + return false; + } + + /** + * Sees if this is an obvious autoresponder email. + * + * @return bool + */ + function is_an_autoresponse() + { + if (true === isset($this->head_hash['Auto-submitted'])) { + if (preg_match( + '/auto-notified|vacation|away/i', + $this->head_hash['Auto-submitted'] + )) { + $this->_autoresponse + = 'Auto-submitted: ' . $this->head_hash['Auto-submitted']; + return true; + } + } + if (true === isset($this->head_hash['X-autorespond'])) { + if (preg_match( + '/auto-notified|vacation|away/i', + $this->head_hash['X-autorespond'] + )) { + $this->_autoresponse + = 'X-autorespond: ' . $this->head_hash['X-autorespond']; + return true; + } + } + if (true === isset($this->head_hash['Precedence']) + && preg_match( + '/^auto-reply/i', $this->head_hash['Precedence'] + ) + ) { + $this->_autoresponse + = 'Precedence: ' . $this->head_hash['Precedence']; + return true; + } + if (true === isset($this->head_hash['X-Precedence']) + && preg_match( + '/^auto-reply/i', $this->head_hash['X-Precedence'] + ) + ) { + $this->_autoresponse + = 'X-Precedence: ' . $this->head_hash['X-Precedence']; + return true; + } + if (true == isset($this->head_hash['Subject'])) { + foreach ($this->_autorespondlist as $a) { + $result = preg_match("/$a/i", $this->head_hash['Subject']); + if (false === $result) { + die('Bad autoresponse regular expression (' + . preg_last_error() . ') while processing:' . $a); } - else if($hash['Received']){ - // grab extra Received headers :( - // pile it on with pipe delimiters, - // oh well, SMTP is broken in this way - if ($entity and $array[2] and $array[2] != $hash[$entity]){ - $hash[$entity] .= "|" . trim($array[2]); - } + if (1 === $result) { + $this->_autoresponse = $this->head_hash['Subject']; + return true; } } - elseif (isset($line) && isset($entity) && preg_match('/^\s+(.+)\s*/', $line) && $entity) { - $line = trim($line); - if (strpos($array[2], '=?') !== FALSE) - $line = iconv_mime_decode($array[2], ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8"); - $hash[$entity] .= ' '. $line; - } } - // special formatting - $hash['Received']= @explode('|', $hash['Received']); - $hash['Subject'] = isset($hash['Subject']) ? : ''; - return $hash; + + + return false; + } + + /** + * Strip angled brackets. + * + * @param string $recipient Removes angled brackets from an email address. + * + * @return string + */ + private function _strip_angle_brackets($recipient) + { + if (preg_match('/[<[](.*)[>\]]/', $recipient, $matches)) { + return trim($matches[1]); + } else { + return trim($recipient); + } } - function parse_machine_parsable_body_part($str){ + /** + * Finds email addresses in a body. + * + * @param string $first_body_part Body of the email + * + * @return array + * + * @TODO Appears that it should return multiple email addresses. + */ + function find_email_addresses($first_body_part) + { + /** + * Regular expression for searching for email addresses + * + * @link https://bitbucket.org/bairwell/emailcheck/src/ + * 81c6a1a25d28a8abda1673ae1fbec3ba55b72bce/emailcheck.php + * Doesn't currently do any "likely domain valid" or similar checks + */ + $regExp + = '/(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^'. + '_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-'. + '\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z'. + '0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25['. + '0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|'. + '[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-'. + '\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/iS'; + + $matched = preg_match($regExp, $first_body_part, $matches); + if (1 === $matched) { + return array($matches[0]); + } else { + return array(); + } + } + + /** + * Is this an RFC 1892 multiple return email? + * + * @param array $head_hash Associative array of headers. If not set, will + * use $this->head_hash + * + * @return bool + */ + public function is_RFC1892_multipart_report($head_hash = array()) + { + if (empty($head_hash)) { + $head_hash = $this->head_hash; + } + if (isset($head_hash['Content-type']['type']) + && isset($head_hash['Content-type']['report-type']) + && isset($head_hash['Content-type']['boundary']) + && 'multipart/report' === $head_hash['Content-type']['type'] + && 'delivery-status' === $head_hash['Content-type']['report-type'] + && '' !== $head_hash['Content-type']['boundary'] + ) { + return true; + } + return false; + } + + /** + * Parse delivery service notification sections. + * + * @param string $str Email + * + * @return array + */ + function parse_machine_parsable_body_part($str) + { //Per-Message DSN fields $hash = $this->parse_dsn_fields($str); $hash['mime_header'] = $this->standard_parser($hash['mime_header']); - $hash['per_message'] = isset($hash['per_message']) ? $this->standard_parser($hash['per_message']) : array(); - if(isset($hash['per_message']['X-postfix-sender'])){ - $arr = explode (';', $hash['per_message']['X-postfix-sender']); - $hash['per_message']['X-postfix-sender']=''; + $hash['per_message'] = isset($hash['per_message']) + ? $this->standard_parser($hash['per_message']) : array(); + if (isset($hash['per_message']['X-postfix-sender'])) { + $arr = explode(';', $hash['per_message']['X-postfix-sender']); + $hash['per_message']['X-postfix-sender'] = ''; $hash['per_message']['X-postfix-sender']['type'] = @trim($arr[0]); $hash['per_message']['X-postfix-sender']['addr'] = @trim($arr[1]); } - if(isset($hash['per_message']['Reporting-mta'])){ - $arr = explode (';', $hash['per_message']['Reporting-mta']); - $hash['per_message']['Reporting-mta']=''; + if (isset($hash['per_message']['Reporting-mta'])) { + $arr = explode(';', $hash['per_message']['Reporting-mta']); + $hash['per_message']['Reporting-mta'] = ''; $hash['per_message']['Reporting-mta']['type'] = @trim($arr[0]); $hash['per_message']['Reporting-mta']['addr'] = @trim($arr[1]); } //Per-Recipient DSN fields - if(isset($hash['per_recipient'])) { - for($i=0; $istandard_parser(explode("\r\n", $hash['per_recipient'][$i])); - $arr = isset($temp['Final-recipient']) ? explode (';', $temp['Final-recipient']) : array(); - $temp['Final-recipient'] = $this->format_final_recipient_array($arr); + if (isset($hash['per_recipient'])) { + for ($i = 0; $i < count($hash['per_recipient']); $i++) { + $temp = $this->standard_parser( + explode("\r\n", $hash['per_recipient'][$i]) + ); + $arr = isset($temp['Final-recipient']) ? explode( + ';', $temp['Final-recipient'] + ) : array(); + $temp['Final-recipient'] = $this->format_final_recipient_array( + $arr + ); //$temp['Final-recipient']['type'] = trim($arr[0]); //$temp['Final-recipient']['addr'] = trim($arr[1]); - $temp['Original-recipient']= array(); - $temp['Original-recipient']['type'] = isset($arr[0]) ? trim($arr[0]) : ''; - $temp['Original-recipient']['addr'] = isset($arr[1]) ? trim($arr[1]) : ''; - $arr = isset($temp['Diagnostic-code']) ? explode (';', $temp['Diagnostic-code']) : array(); + $temp['Original-recipient'] = array(); + $temp['Original-recipient']['type'] = isset($arr[0]) ? trim( + $arr[0] + ) : ''; + $temp['Original-recipient']['addr'] = isset($arr[1]) ? trim( + $arr[1] + ) : ''; + $arr = isset($temp['Diagnostic-code']) ? explode( + ';', $temp['Diagnostic-code'] + ) : array(); $temp['Diagnostic-code'] = array(); - $temp['Diagnostic-code']['type'] = isset($arr[0]) ? trim($arr[0]) : ''; - $temp['Diagnostic-code']['text'] = isset($arr[1]) ? trim($arr[1]) : ''; - // now this is wierd: plenty of times you see the status code is a permanent failure, - // but the diagnostic code is a temporary failure. So we will assert the most general + $temp['Diagnostic-code']['type'] = isset($arr[0]) ? trim( + $arr[0] + ) : ''; + $temp['Diagnostic-code']['text'] = isset($arr[1]) ? trim( + $arr[1] + ) : ''; + // now this is weird: plenty of times you see the status code + // is a permanent failure, + // but the diagnostic code is a temporary failure. So we will + // assert the most general // temporary failure in this case. - $ddc=''; $judgement=''; - $ddc = $this->decode_diagnostic_code($temp['Diagnostic-code']['text']); + $ddc = $this->decode_diagnostic_code( + $temp['Diagnostic-code']['text'] + ); $judgement = $this->get_action_from_status_code($ddc); - if($judgement == 'transient'){ - if(stristr($temp['Action'],'failed')!==FALSE){ - $temp['Action']='transient'; - $temp['Status']='4.3.0'; + if ($judgement == 'transient') { + if (stristr($temp['Action'], 'failed') !== false) { + $temp['Action'] = 'transient'; + $temp['Status'] = '4.3.0'; } } - $hash['per_recipient'][$i]=''; - $hash['per_recipient'][$i]=$temp; + $hash['per_recipient'][$i] = ''; + $hash['per_recipient'][$i] = $temp; } } - return $hash; - } - function get_head_from_returned_message_body_part($mime_sections){ - $temp = explode("\r\n\r\n", $mime_sections[returned_message_body_part]); - $head = $this->standard_parser($temp[1]); - $head['From'] = $this->extract_address($head['From']); - $head['To'] = $this->extract_address($head['To']); - return $head; - } - - function extract_address($str){ - $from_stuff = preg_split('/[ \"\'\<\>:\(\)\[\]]/', $str); - foreach ($from_stuff as $things){ - if (strpos($things, '@')!==FALSE){$from = $things;} - } - return $from; + return $hash; } - function find_recipient($per_rcpt){ - $recipient = ''; - if($per_rcpt['Original-recipient']['addr'] !== ''){ - $recipient = $per_rcpt['Original-recipient']['addr']; + /** + * Parse delivery service notification fields. + * + * @param array|string $dsn_fields List of fields. + * + * @return array + */ + function parse_dsn_fields($dsn_fields) + { + if (!is_array($dsn_fields)) { + $dsn_fields = explode("\r\n\r\n", $dsn_fields); } - else if($per_rcpt['Final-recipient']['addr'] !== ''){ - $recipient = $per_rcpt['Final-recipient']['addr']; - } - $recipient = $this->strip_angle_brackets($recipient); - return $recipient; - } - - function find_type(){ - if($this->looks_like_a_bounce) - return "bounce"; - elseif ($this->looks_like_an_FBL) - return "fbl"; - elseif ($this->looks_like_an_autoresponse) - return "autoresponse"; - else - return false; - } - - function parse_dsn_fields($dsn_fields){ - if(!is_array($dsn_fields)) $dsn_fields = explode("\r\n\r\n", $dsn_fields); + $hash = array(); $j = 0; reset($dsn_fields); - for($i=0; $i '', + 'type' => '' + ); + if (isset($arr[1])) { + if (strpos($arr[0], '@') !== false) { + $output['addr'] = $this->_strip_angle_brackets($arr[0]); + $output['type'] = (!empty($arr[1])) ? trim($arr[1]) : 'unknown'; + } else { + $output['type'] = trim($arr[0]); + $output['addr'] = $this->_strip_angle_brackets($arr[1]); + } + } elseif (isset($arr[0])) { + if (strpos($arr[0], '@') !== false) { + $output['addr'] = $this->_strip_angle_brackets($arr[0]); + $output['type'] = 'unknown'; + } } - return $ret; + + return $output; } - function fetch_status_messages($code){ - include_once ("bounce_statuscodes.php"); - $ret = $this->format_status_code($code); - $arr = explode('.', $ret['code']); - $str = "

". $status_code_classes[$arr[0]]['title'] . " - " .$status_code_classes[$arr[0]]['descr']. " ". $status_code_subclasses[$arr[1].".".$arr[2]]['title'] . " - " .$status_code_subclasses[$arr[1].".".$arr[2]]['descr']. "

"; - return $str; + /** + * Decode the diagnostic code into just the code number. + * + * @param string $dcode The diagnostic code + * + * @return string + */ + function decode_diagnostic_code($dcode) + { + if (preg_match("/(\d\.\d\.\d)\s/", $dcode, $array)) { + return $array[1]; + } else if (preg_match("/(\d\d\d)\s/", $dcode, $array)) { + return $array[1]; + } + + return ''; } - function get_action_from_status_code($code){ - if($code=='') + /** + * Get a brief status/recommend action from the status code. + * + * @param string $code The status code string supplied. + * + * @return string Either "success", "transient", "failed" or "" (unknown). + */ + function get_action_from_status_code($code) + { + if ($code == '') { return ''; + } $ret = $this->format_status_code($code); - switch (isset($ret['code']) ? $ret['code'][0] : '') { - case(2): - return 'success'; - break; - case(4): - return 'transient'; - break; - case(5): - return 'failed'; - break; - default: - return ''; - break; + /** + * We weren't able to read the code + */ + if ($ret['code'] === '') { + return ''; + } + /** + * Work out the rough status from the first digit of the code + */ + switch (substr($ret['code'], 0, 1)) { + case(2): + return 'success'; + break; + case(4): + return 'transient'; + break; + case(5): + return 'failed'; + break; + default: + return ''; + break; } } - function decode_diagnostic_code($dcode){ - if(preg_match("/(\d\.\d\.\d)\s/", $dcode, $array)){ - return $array[1]; - } - else if(preg_match("/(\d\d\d)\s/", $dcode, $array)){ - return $array[1]; + /** + * Extract the code and text from a status code string. + * + * @param string $code A status code string in the format 12.34.56 Reason or 123456 reason + * Reason or 123456 reason + * @param bool $strict Only accept triplets (12.34.56) and not that + * "breaks RFC" 12.34 format + * + * @return array Associative array containing code (two or three decimal + * separated numbers) and text + */ + function format_status_code($code, $strict = false) + { + $ret = array('code' => '', 'text' => ''); + $matches = array(); + if (preg_match( + '/([245]\.[01234567]\.\d{1,2})\s*(.*)/', $code, $matches + )) { + $ret['code'] = $matches[1]; + $ret['text'] = $matches[2]; + } else if (preg_match( + '/([245])([01234567])(\d{1,2})\s*(.*)/', $code, $matches + )) { + $ret['code'] = $matches[1] . '.' . $matches[2] . '.' . $matches[3]; + $ret['text'] = $matches[4]; + } else if (false === $strict + && preg_match( + '/([245]\.[01234567])\s*(.*)/', $code, $matches + ) + ) { + /** + * Handle major.minor code style (which is against RFCs - should + * always be major.minor.sub) + */ + $ret['code'] = $matches[1] . '.0'; + $ret['text'] = $matches[2]; + } else if (false === $strict + && preg_match( + '/([245])([01234567])\s*(.*)/', $code, $matches + ) + ) { + /** + * Handle major.minor code style (which is against RFCs - should + * always be major.minor.sub) + */ + $ret['code'] = $matches[1] . '.' . $matches[2] . '.0'; + $ret['text'] = $matches[3]; } + return $ret; } - function is_a_bounce(){ - foreach ($this->bouncesubj as $s) - if (preg_match("/^$s/i", $this->head_hash['Subject'])) - return true; - #if(@preg_match('/auto_reply/',$this->head_hash['Precedence'])) return true; # autoresponse, not bounce - if (isset($this->head_hash['From']) && - preg_match("/^(postmaster|mailer-daemon)\@?/i", $this->head_hash['From'])) - return true; - return false; - } - - function find_email_addresses($first_body_part){ - // not finished yet. This finds only one address. - if (preg_match("/\b([A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4})\b/i", $first_body_part, $matches)){ - return array($matches[1]); + /** + * Find the recipient from either the original-recipient or + * final-recipieint settings. + * + * @param array $per_rcpt Headers + * + * @return string Email address + */ + function find_recipient($per_rcpt) + { + $recipient = ''; + if ($per_rcpt['Original-recipient']['addr'] !== '') { + $recipient = $per_rcpt['Original-recipient']['addr']; + } else if ($per_rcpt['Final-recipient']['addr'] !== '') { + $recipient = $per_rcpt['Final-recipient']['addr']; } - else - return array(); + $recipient = $this->_strip_angle_brackets($recipient); + + return $recipient; } + /** + * @param $recipient + * @param $index + * + * @return string + */ + function get_status_code_from_text($recipient, $index) + { + for ($i = $index; $i < count($this->body_hash); $i++) { + $line = trim($this->body_hash[$i]); - // these functions are for feedback loops - function is_an_ARF(){ - if(isset($this->head_hash['Content-type']['report-type']) && preg_match('/feedback-report/',$this->head_hash['Content-type']['report-type'])) - return true; - if(isset($this->head_hash['X-loop']) && preg_match('/scomp/',$this->head_hash['X-loop'])) - return true; - if(isset($this->head_hash['X-hmxmroriginalrecipient'])) { - $this->is_hotmail_fbl = TRUE; - $this->recipient = $this->head_hash['X-hmxmroriginalrecipient']; - return true; - } - if(isset($this->first_body_hash['X-hmxmroriginalrecipient']) ) { - $this->is_hotmail_fbl = TRUE; - $this->recipient = $this->first_body_hash['X-hmxmroriginalrecipient']; - return true; - } - return false; - } - - // look for common auto-responders - function is_an_autoresponse() { - foreach (array ('Auto-submitted', 'X-autorespond') as $a) { - if (isset($this->head_hash[$a])) { - $this->autoresponse = "$a: ". $this->head_hash[$a]; - return TRUE; + //skip Message-ID lines + if (stripos($line, 'Message-ID') !== false) { + continue; } - } - foreach (array ('Precedence', 'X-precedence') as $a) { - if (isset($this->head_hash[$a]) && preg_match('/^(auto|junk)/i', $this->head_hash[$a])) { - $this->autoresponse = "$a: ". $this->head_hash[$a]; - return TRUE; + + /* recurse into the email if you find the recipient **/ + if (stristr($line, $recipient) !== false) { + // the status code MIGHT be in the next few lines after the + // recipient line, + // depending on the message from the foreign host... + $status_code = $this->get_status_code_from_text( + $recipient, $i + 1 + ); + if ($status_code) { + return $status_code; + } + } - } - - $subj = isset($this->head_hash['Subject']) ? $this->head_hash['Subject'] : ''; - foreach ($this->autorespondlist as $a) { - if (preg_match("/$a/i", $subj)) { - $this->autoresponse = $this->head_hash['Subject']; - return TRUE; + + /******** exit conditions ********/ + // if it's the end of the human readable part in this stupid bounce + if (stristr($line, '------ This is a copy of the message') !== false + ) { + break; + } + //if we see an email address other than our current recipient's, + if (count($this->find_email_addresses($line)) >= 1 + && stristr($line, $recipient) === false + && strstr($line, 'FROM:<') === false + ) { + // Kanon added this line because Hotmail puts the e-mail + //address too soon and there actually is error message stuff + //after it. + break; } + + //******** pattern matching ********/ + foreach ($this->_bouncelist as $bouncetext => $bouncecode) { + if (preg_match("/$bouncetext/i", $line, $matches)) { + return (isset($matches[1])) ? $matches[1] : $bouncecode; + } + } + + // Search for a rfc3463 style return code + if (preg_match( + '/\W([245]\.[01234567]\.[0-9]{1,2})\W/', $line, $matches + )) { + return $matches[1]; + // ??? this seems somewhat redundant + // $mycode = str_replace('.', '', $matches[1]); + // $mycode = $this->format_status_code($mycode); + // return implode('.', $mycode['code']); #x.y.z format + } + + // search for RFC2821 return code + // thanks to mark.tolman@gmail.com + // Maybe at some point it should have it's own place within the + // main parsing scheme (at line 88) + if (preg_match('/\]?: ([45][01257][012345]) /', $line, $matches) + || preg_match( + '/^([45][01257][012345]) (?:.*?)(?:denied|inactive|'. + 'deactivated|rejected|disabled|unknown|no such|'. + 'not (?:our|activated|a valid))+/i', + $line, $matches + ) + ) { + $mycode = $matches[1]; + // map RFC2821 -> RFC3463 codes + if ($mycode == '550' || $mycode == '551' || $mycode == '553' + || $mycode == '554' + ) { + // perm error + return '5.1.1'; + } elseif ($mycode == '452' || $mycode == '552') { + // mailbox full + return '4.2.2'; + } elseif ($mycode == '450' || $mycode == '421') { + // temp unavailable + return '4.3.2'; + } + // ???$mycode = $this->format_status_code($mycode); + // ???return implode('.', $mycode['code']); + } + } - return FALSE; + + return '5.5.0'; // other or unknown status } - - - - // use a perl regular expression to find the web beacon - public function find_web_beacon($body, $preg){ - if(!isset($preg) || !$preg) - return ""; - if(preg_match($preg, $body, $matches)) + + + /** + * Returns the type of email - either autoresponse, fbl, bounce or "false". + * + * @return bool|string + */ + function find_type() + { + if ($this->looks_like_an_autoresponse) { + return "autoresponse"; + } elseif ($this->looks_like_an_FBL) { + return "fbl"; + } elseif ($this->looks_like_a_bounce) { + return "bounce"; + } else { + return false; + } + } + + // look for common auto-responders + + /** + * Search for a web beacon in the email body. + * + * @param string $body Email body. + * @param string $preg Regular expression to look for. + * + * @return string + */ + public function find_web_beacon($body, $preg) + { + if (!isset($preg) || !$preg) { + return ''; + } + if (preg_match($preg, $body, $matches)) { return $matches[1]; + } + + return ''; } - - public function find_x_header($xheader){ + + + /** + * use a PECL regular expression to find the web beacon + * + * @param string $xheader Header string to look for. + * + * @return string + */ + public function find_x_header($xheader) + { $xheader = ucfirst(strtolower($xheader)); // check the header - if(isset($this->head_hash[$xheader])){ + if (isset($this->head_hash[$xheader])) { return $this->head_hash[$xheader]; } // check the body too $tmp_body_hash = $this->standard_parser($this->body_hash); - if(isset($tmp_body_hash[$xheader])){ + if (isset($tmp_body_hash[$xheader])) { return $tmp_body_hash[$xheader]; } - return ""; + + return ''; } - - private function find_fbl_recipients($fbl){ - if(isset($fbl['Original-rcpt-to'])){ - return $fbl['Original-rcpt-to']; - } - else if(isset($fbl['Removal-recipient'])){ - return trim(str_replace('--', '', $fbl['Removal-recipient'])); - } + + /** + * @param $mime_sections + * + * @return array + */ + function get_head_from_returned_message_body_part($mime_sections) + { + $temp = explode( + "\r\n\r\n", $mime_sections['returned_message_body_part'] + ); + $head = $this->standard_parser($temp[1]); + $head['From'] = $this->extract_address($head['From']); + $head['To'] = $this->extract_address($head['To']); + + return $head; } - private function strip_angle_brackets($recipient){ - if (preg_match('/[<[](.*)[>\]]/', $recipient, $matches)) - return trim($matches[1]); - else - return trim($recipient); + /** + * @param $str + * + * @return mixed + */ + function extract_address($str) + { + $from = ''; + $from_stuff = preg_split('/[ \"\'\<\>:\(\)\[\]]/', $str); + foreach ($from_stuff as $things) { + if (strpos($things, '@') !== false) { + $from = $things; + } + } + + return $from; } + /** + * Format a status code into a HTML marked up reason. + * + * @param string $code A status code line. + * @param array $status_code_classes Rough description of status code. + * @param array $status_code_subclasses Details of each specific subcode. + * + * @return string HTML marked up reason + */ + function fetch_status_messages( + $code, $status_code_classes = array(), $status_code_subclasses = array() + ) { + $array = $this->fetch_status_message_as_array( + $code, $status_code_classes, $status_code_subclasses + ); + $str = '

' . $array['title'] . ' - ' . $array['description'] + . ' ' . $array['sub_title'] . ' - ' + . $array['sub_description']; + return $str; + } - /*The syntax of the final-recipient field is as follows: - "Final-Recipient" ":" address-type ";" generic-address - */ - private function format_final_recipient_array($arr){ - $output = array('addr'=>'', - 'type'=>''); - if (isset($arr[1])) { - if (strpos($arr[0], '@') !== FALSE){ - $output['addr'] = $this->strip_angle_brackets($arr[0]); - $output['type'] = (!empty($arr[1])) ? trim($arr[1]) : 'unknown'; + /** + * Get human readable details of an SMTP status code. + * + * Loads in bounce_statuscodes if $status_code_classes or + * $status_code_subclasses is empty. + * + * @param string $code A status code line or number. + * @param array $status_code_classes Rough description of the code. + * @param array $status_code_subclasses Details of each specific subcode. + * + * @return array Human readable details of the code. + */ + public function fetch_status_message_as_array( + $code, + $status_code_classes = array(), + $status_code_subclasses = array() + ) { + $code_classes = $status_code_classes; + $sub_classes = $status_code_subclasses; + /** + * Load from the provided bounce_statuscodes.php file if not set + */ + if (empty($code_classes) || empty($sub_classes)) { + include "bounce_statuscodes.php"; + if (empty($code_classes)) { + $code_classes = $status_code_classes; } - else { - $output['type'] = trim($arr[0]); - $output['addr'] = $this->strip_angle_brackets($arr[1]); + if (empty($sub_classes)) { + $sub_classes = $status_code_subclasses; } } - return $output; + $return = array( + 'input_code' => $code, + 'formatted_code_code' => '', + 'formatted_code_text=' > '', + 'major_code' => '', + 'sub_code' => '', + 'title' => 'No major code found', + 'description' => '', + 'sub_title' => 'No sub code found', + 'sub_description' => '' + ); + $formatted_code = $this->format_status_code($code); + if ('' === $formatted_code['code']) { + $return['title'] = 'Could not parse code'; + $return['sub_title'] = 'Could not parse code'; + } else { + $arr = explode('.', $formatted_code['code']); + $return['formatted_code_code'] = $formatted_code['code']; + $return['formatted_code_text'] = $formatted_code['text']; + if (true === isset($arr[0])) { + $return['major_code'] = $arr[0]; + if (true === isset($code_classes[$arr[0]])) { + if (true === isset($code_classes[$arr[0]]['title'])) { + $return['title'] = $code_classes[$arr[0]]['title']; + } else { + $return['title'] + = 'No title available for major code: ' . $arr[0]; + } + if (true === isset($code_classes[$arr[0]]['descr'])) { + $return['description'] + = $code_classes[$arr[0]]['descr']; + } + } else { + $return['title'] + = 'Unrecognised major code: ' . $arr[0] . 'xxx'; + } + } + $sub_label = ''; + if (true === isset($arr[1]) && true === isset($arr[2])) { + $sub_label = $arr[1] . '.' . $arr[2]; + } elseif (true === isset($arr[1])) { + $sub_label = $arr[1]; + } + if ('' !== $sub_label) { + $return['sub_code'] = $sub_label; + if (true === isset($sub_classes[$sub_label])) { + if (true === isset($sub_classes[$sub_label]['title'])) { + $return['sub_title'] + = $sub_classes[$sub_label]['title']; + } else { + $return['sub_title'] + = 'No sub title available for sub code: ' + . $sub_label; + } + if (true === isset($sub_classes[$sub_label]['descr'])) { + $return['sub_description'] + = $sub_classes[$sub_label]['descr']; + } + } else { + $return['sub_title'] + = 'Unrecognised sub code: ' . $sub_label; + } + } + } + return $return; } -}/** END class BounceHandler **/ -?> +} diff --git a/bounce_responses.php b/bounce_responses.php index 37b1bf9..e65c725 100644 --- a/bounce_responses.php +++ b/bounce_responses.php @@ -1,239 +1,263 @@ + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ +*/ -# text in messages from which to figure out what kind of bounce +// text in messages from which to figure out what kind of bounce $bouncelist = array( - '[45]\d\d[- ]#?([45]\.\d\.\d{1,2})' => 'x', # use the code from the regex - 'Diagnostic[- ][Cc]ode: smtp; ?\d\d\ ([45]\.\d\.\d{1,2})' => 'x', # use the code from the regex - 'Status: ([45]\.\d\.\d{1,2})' => 'x', # use the code from the regex - - 'not yet been delivered' => '4.2.0', # - 'Message will be retried for' => '4.2.0', # - 'Connection frequency limited\. http:\/\/service\.mail\.qq\.com' => '4.2.0', - - 'Benutzer hat zuviele Mails auf dem Server' => '4.2.2', #.DE "mailbox full" - 'exceeded storage allocation' => '4.2.2', # - 'Mailbox full' => '4.2.2', # - 'mailbox is full' => '4.2.2', #BH - 'Mailbox quota usage exceeded' => '4.2.2', #BH - 'Mailbox size limit exceeded' => '4.2.2', # - 'over ?quota' => '4.2.2', # - 'quota exceeded' => '4.2.2', # - 'Quota violation' => '4.2.2', # - 'User has exhausted allowed storage space' => '4.2.2', # - 'User has too many messages on the server' => '4.2.2', # - 'User mailbox exceeds allowed size' => '4.2.2', # - 'mailfolder is full' => '4.2.2', # - 'user has Exceeded' => '4.2.2', # - 'not enough storage space' => '4.2.2', # - - 'Delivery attempts will continue to be made for' => '4.3.2', #SB: 4.3.2 is a more generic 'defer'; Kanon added. From Symantec_AntiVirus_for_SMTP_Gateways@uqam.ca Im not sure why Symantec delayed this message, but x.2.x means something to do with the mailbox, which seemed appropriate. x.5.x (protocol) or x.7.x (security) also seem possibly appropriate. It seems a lot of times its x.5.x when it seems to me it should be x.7.x, so maybe x.5.x is standard when mail is rejected due to spam-like characteristics instead of x.7.x like I think it should be. - 'delivery temporarily suspended' => '4.3.2', # - 'Greylisted for 5 minutes' => '4.3.2', # - 'Greylisting in action' => '4.3.2', # - 'Server busy' => '4.3.2', # - 'server too busy' => '4.3.2', # - 'system load is too high' => '4.3.2', # - 'temporarily deferred' => '4.3.2', # - 'temporarily unavailable' => '4.3.2', # - 'Throttling' => '4.3.2', # - 'too busy to accept mail' => '4.3.2', # - 'too many connections' => '4.3.2', # - 'too many sessions' => '4.3.2', # - 'Too much load' => '4.3.2', # - 'try again later' => '4.3.2', # - 'Try later' => '4.3.2', # - 'retry timeout exceeded' => '4.4.7', # - 'queue too long' => '4.4.7', # - - '554 delivery error:' => '5.1.1', #SB: Yahoo/rogers.com generic delivery failure (see also OU-00) - 'account has been disabled' => '5.1.1', # - 'account is unavailable' => '5.1.1', # - 'Account not found' => '5.1.1', # - 'Address invalid' => '5.1.1', # - 'Address is unknown' => '5.1.1', # - 'Address unknown' => '5.1.1', # - 'Addressee unknown' => '5.1.1', # - 'ADDRESS_NOT_FOUND' => '5.1.1', # - 'bad address' => '5.1.1', # - 'Bad destination mailbox address' => '5.1.1', # - 'destin. Sconosciuto' => '5.1.1', #.IT "user unknown" - 'Destinatario errato' => '5.1.1', #.IT "invalid" - 'Destinatario sconosciuto o mailbox disatttivata' => '5.1.1', #.IT "unknown /disabled" - 'does not exist' => '5.1.1', # - 'Email Address was not found' => '5.1.1', # - 'Excessive userid unknowns' => '5.1.1', # - 'Indirizzo inesistente' => '5.1.1', #.IT "no user" - 'Invalid account' => '5.1.1', # - 'invalid address' => '5.1.1', # - 'Invalid or unknown virtual user' => '5.1.1', # - 'Invalid mailbox' => '5.1.1', # - 'Invalid recipient' => '5.1.1', # - 'Mailbox not found' => '5.1.1', # - 'mailbox unavailable' => '5.1.1', # - 'nie istnieje' => '5.1.1', #.PL "does not exist" - 'Nie ma takiego konta' => '5.1.1', #.PL "no such account" - 'No mail box available for this user' => '5.1.1', # - 'no mailbox here' => '5.1.1', # - 'No one with that email address here' => '5.1.1', # - 'no such address' => '5.1.1', # - 'no such email address' => '5.1.1', # - 'No such mail drop defined' => '5.1.1', # - 'No such mailbox' => '5.1.1', # - 'No such person at this address' => '5.1.1', # - 'no such recipient' => '5.1.1', # - 'No such user' => '5.1.1', # - 'not a known user' => '5.1.1', # - 'not a valid mailbox' => '5.1.1', # - 'not a valid user' => '5.1.1', # - 'not available' => '5.1.1', # - 'not exists' => '5.1.1', # - 'Recipient address rejected' => '5.1.1', # - 'Recipient not allowed' => '5.1.1', # - 'Recipient not found' => '5.1.1', # - 'recipient rejected' => '5.1.1', # - 'Recipient unknown' => '5.1.1', # - "server doesn't handle mail for that user" => '5.1.1', # - 'This account is disabled' => '5.1.1', # - 'This address no longer accepts mail' => '5.1.1', # - 'This email address is not known to this system' => '5.1.1', # - 'Unknown account' => '5.1.1', # - 'unknown address or alias' => '5.1.1', # - 'Unknown email address' => '5.1.1', # - 'Unknown local part' => '5.1.1', # - 'unknown or illegal alias' => '5.1.1', # - 'unknown or illegal user' => '5.1.1', # - 'Unknown recipient' => '5.1.1', # - 'unknown user' => '5.1.1', # - 'user disabled' => '5.1.1', # - "User doesn't exist in this server" => '5.1.1', # - 'user invalid' => '5.1.1', # - 'User is suspended' => '5.1.1', # - 'User is unknown' => '5.1.1', # - 'User not found' => '5.1.1', # - 'User not known' => '5.1.1', # - 'User unknown' => '5.1.1', # - 'valid RCPT command must precede DATA' => '5.1.1', # - 'was not found in LDAP server' => '5.1.1', # - 'We are sorry but the address is invalid' => '5.1.1', # - 'Unable to find alias user' => '5.1.1', # - - "domain isn't in my list of allowed rcpthosts" => '5.1.2', # - 'Esta casilla ha expirado por falta de uso' => '5.1.2', #BH ES:expired - 'host ?name is unknown' => '5.1.2', # - 'no relaying allowed' => '5.1.2', # - 'no such domain' => '5.1.2', # - 'not our customer' => '5.1.2', # - 'relay not permitted' => '5.1.2', # - 'Relay access denied' => '5.1.2', # - 'relaying denied' => '5.1.2', # - 'Relaying not allowed' => '5.1.2', # - 'This system is not configured to relay mail' => '5.1.2', # - 'Unable to relay' => '5.1.2', # - 'unrouteable mail domain' => '5.1.2', #BH - 'we do not relay' => '5.1.2', # - - 'Old address no longer valid' => '5.1.6', # - 'recipient no longer on server' => '5.1.6', # - - 'Sender address rejected' => '5.1.8', # - - 'exceeded the rate limit' => '5.2.0', # - 'Local Policy Violation' => '5.2.0', # - 'Mailbox currently suspended' => '5.2.0', # - 'mailbox unavailable' => '5.2.0', # - 'mail can not be delivered' => '5.2.0', # - 'Delivery failed' => '5.2.0', # - 'mail couldn\'t be delivered' => '5.2.0', # - 'The account or domain may not exist' => '5.2.0', #I guess.... seems like 5.1.1, 5.1.2, or 5.4.4 would fit too, but 5.2.0 seemed most generic - - 'Account disabled' => '5.2.1', # - 'account has been disabled' => '5.2.1', # - 'Account Inactive' => '5.2.1', # - 'Adressat unbekannt oder Mailbox deaktiviert' => '5.2.1', # - 'Destinataire inconnu ou boite aux lettres desactivee' => '5.2.1', #.FR disabled - 'mail is not currently being accepted for this mailbox' => '5.2.1', # - 'El usuario esta en estado: inactivo' => '5.2.1', #.IT inactive - 'email account that you tried to reach is disabled' => '5.2.1', # - 'inactive user' => '5.2.1', # - 'Mailbox disabled for this recipient' => '5.2.1', # - 'mailbox has been blocked due to inactivity' => '5.2.1', # - 'mailbox is currently unavailable' => '5.2.1', # - 'Mailbox is disabled' => '5.2.1', # - 'Mailbox is inactive' => '5.2.1', # - 'Mailbox Locked or Suspended' => '5.2.1', # - 'mailbox temporarily disabled' => '5.2.1', # - 'Podane konto jest zablokowane administracyjnie lub nieaktywne'=> '5.2.1', #.PL locked or inactive - "Questo indirizzo e' bloccato per inutilizzo" => '5.2.1', #.IT blocked/expired - 'Recipient mailbox was disabled' => '5.2.1', # - 'Domain name not found' => '5.2.1', - - 'couldn\'t find any host named' => '5.4.4', # - 'couldn\'t find any host by that name' => '5.4.4', # - 'PERM_FAILURE: DNS Error' => '5.4.4', #SB: Routing failure - 'Temporary lookup failure' => '5.4.4', # - 'unrouteable address' => '5.4.4', # - "can't connect to" => '5.4.4', # - - 'Too many hops' => '5.4.6', # - - 'Requested action aborted' => '5.5.0', # - - 'rejecting password protected file attachment' => '5.6.2', #RFC "Conversion required and prohibited" - - '550 OU-00' => '5.7.1', #SB hotmail returns a OU-001 if you're on their blocklist - '550 SC-00' => '5.7.1', #SB hotmail returns a SC-00x if you're on their blocklist - '550 DY-00' => '5.7.1', #SB hotmail returns a DY-00x if you're a dynamic IP - '554 denied' => '5.7.1', # - 'You have been blocked by the recipient' => '5.7.1', # - 'requires that you verify' => '5.7.1', # - 'Access denied' => '5.7.1', # - 'Administrative prohibition - unable to validate recipient' => '5.7.1', # - 'Blacklisted' => '5.7.1', # - 'blocke?d? for spam' => '5.7.1', # - 'conection refused' => '5.7.1', # - 'Connection refused due to abuse' => '5.7.1', # - 'dial-up or dynamic-ip denied' => '5.7.1', # - 'Domain has received too many bounces' => '5.7.1', # - 'failed several antispam checks' => '5.7.1', # - 'found in a DNS blacklist' => '5.7.1', # - 'IPs blocked' => '5.7.1', # - 'is blocked by' => '5.7.1', # - 'Mail Refused' => '5.7.1', # - 'Message does not pass DomainKeys' => '5.7.1', # - 'Message looks like spam' => '5.7.1', # - 'Message refused by' => '5.7.1', # - 'not allowed access from your location' => '5.7.1', # - 'permanently deferred' => '5.7.1', # - 'Rejected by policy' => '5.7.1', # - 'rejected by Windows Live Hotmail for policy reasons' => '5.7.1', # - 'Rejected for policy reasons' => '5.7.1', # - 'Rejecting banned content' => '5.7.1', # - 'Sorry, looks like spam' => '5.7.1', # - 'spam message discarded' => '5.7.1', # - 'Too many spams from your IP' => '5.7.1', # - 'TRANSACTION FAILED' => '5.7.1', # - 'Transaction rejected' => '5.7.1', # - 'Wiadomosc zostala odrzucona przez system antyspamowy' => '5.7.1', #.PL rejected as spam - 'Your message was declared Spam' => '5.7.1' # + // use the code from the regex + '[45]\d\d[- ]#?([45]\.\d\.\d{1,2})' => 'x', + // use the code from the regex + 'Diagnostic[- ][Cc]ode: smtp; ?\d\d\ ([45]\.\d\.\d{1,2})' => 'x', + // use the code from the regex + 'Status: ([45]\.\d\.\d{1,2})' => 'x', + 'not yet been delivered' => '4.2.0', + 'Message will be retried for' => '4.2.0', + 'Connection frequency limited\. http:\/\/service\.mail\.qq\.com' => '4.2.0', + // .DE "mailbox full" + 'Benutzer hat zuviele Mails auf dem Server' => '4.2.2', + 'exceeded storage allocation' => '4.2.2', + 'Mailbox full' => '4.2.2', + 'mailbox is full' => '4.2.2', // BH + 'Mailbox quota usage exceeded' => '4.2.2', // BH + 'Mailbox size limit exceeded' => '4.2.2', + 'over ?quota' => '4.2.2', + 'quota exceeded' => '4.2.2', + 'Quota violation' => '4.2.2', + 'User has exhausted allowed storage space' => '4.2.2', + 'User has too many messages on the server' => '4.2.2', + 'User mailbox exceeds allowed size' => '4.2.2', + 'mailfolder is full' => '4.2.2', + 'user has Exceeded' => '4.2.2', + 'not enough storage space' => '4.2.2', + /** + * SB: 4.3.2 is a more generic 'defer'; Kanon added. + * From Symantec_AntiVirus_for_SMTP_Gateways@uqam.ca I'm not sure why + * Symantec delayed this message, but x.2.x means something to do with the + * mailbox, which seemed appropriate. x.5.x (protocol) or x.7.x (security) + * also seem possibly appropriate. It seems a lot of times its x.5.x when + * it seems to me it should be x.7.x, so maybe x.5.x is standard when mail + * is rejected due to spam-like characteristics instead of x.7.x like I + * think it should be. + **/ + 'Delivery attempts will continue to be made for' => '4.3.2', + 'delivery temporarily suspended' => '4.3.2', + 'Greylisted for 5 minutes' => '4.3.2', + 'Greylisting in action' => '4.3.2', + 'Server busy' => '4.3.2', + 'server too busy' => '4.3.2', + 'system load is too high' => '4.3.2', + 'temporarily deferred' => '4.3.2', + 'temporarily unavailable' => '4.3.2', + 'Throttling' => '4.3.2', + 'too busy to accept mail' => '4.3.2', + 'too many connections' => '4.3.2', + 'too many sessions' => '4.3.2', + 'Too much load' => '4.3.2', + 'try again later' => '4.3.2', + 'Try later' => '4.3.2', + 'retry timeout exceeded' => '4.4.7', + 'queue too long' => '4.4.7', + '554 delivery error:' => '5.1.1', + // SB: Yahoo/rogers.com generic delivery failure (see also OU-00) + 'account is unavailable' => '5.1.1', + 'Account not found' => '5.1.1', + 'Address invalid' => '5.1.1', + 'Address is unknown' => '5.1.1', + 'Address unknown' => '5.1.1', + 'Addressee unknown' => '5.1.1', + 'ADDRESS_NOT_FOUND' => '5.1.1', + 'bad address' => '5.1.1', + 'Bad destination mailbox address' => '5.1.1', + // .IT "user unknown" + 'destin. Sconosciuto' => '5.1.1', + // .IT "invalid" + 'Destinatario errato' => '5.1.1', + 'Destinatario sconosciuto o mailbox disatttivata' => '5.1.1', + // .IT "unknown /disabled" + 'does not exist' => '5.1.1', + 'Email Address was not found' => '5.1.1', + 'Excessive userid unknowns' => '5.1.1', + // .IT "no user" + 'Indirizzo inesistente' => '5.1.1', + 'Invalid account' => '5.1.1', + 'invalid address' => '5.1.1', + 'Invalid or unknown virtual user' => '5.1.1', + 'Invalid mailbox' => '5.1.1', + 'Invalid recipient' => '5.1.1', + 'Mailbox not found' => '5.1.1', + 'nie istnieje' => '5.1.1', + // .PL "does not exist" + 'Nie ma takiego konta' => '5.1.1', // .PL "no such account" + 'No mail box available for this user' => '5.1.1', + 'no mailbox here' => '5.1.1', + 'No one with that email address here' => '5.1.1', + 'no such address' => '5.1.1', + 'no such email address' => '5.1.1', + 'No such mail drop defined' => '5.1.1', + 'No such mailbox' => '5.1.1', + 'No such person at this address' => '5.1.1', + 'no such recipient' => '5.1.1', + 'No such user' => '5.1.1', + 'not a known user' => '5.1.1', + 'not a valid mailbox' => '5.1.1', + 'not a valid user' => '5.1.1', + 'not available' => '5.1.1', + 'not exists' => '5.1.1', + 'Recipient address rejected' => '5.1.1', + 'Recipient not allowed' => '5.1.1', + 'Recipient not found' => '5.1.1', + 'recipient rejected' => '5.1.1', + 'Recipient unknown' => '5.1.1', + "server doesn't handle mail for that user" => '5.1.1', + 'This account is disabled' => '5.1.1', + 'This address no longer accepts mail' => '5.1.1', + 'This email address is not known to this system' => '5.1.1', + 'Unknown account' => '5.1.1', + 'unknown address or alias' => '5.1.1', + 'Unknown email address' => '5.1.1', + 'Unknown local part' => '5.1.1', + 'unknown or illegal alias' => '5.1.1', + 'unknown or illegal user' => '5.1.1', + 'Unknown recipient' => '5.1.1', + 'unknown user' => '5.1.1', + 'user disabled' => '5.1.1', "User doesn't exist in this server" => '5.1.1', + 'user invalid' => '5.1.1', + 'User is suspended' => '5.1.1', + 'User is unknown' => '5.1.1', + 'User not found' => '5.1.1', + 'User not known' => '5.1.1', + 'User unknown' => '5.1.1', + 'valid RCPT command must precede DATA' => '5.1.1', + 'was not found in LDAP server' => '5.1.1', + 'We are sorry but the address is invalid' => '5.1.1', + 'Unable to find alias user' => '5.1.1', + "domain isn't in my list of allowed rcpthosts" => '5.1.2', + 'Esta casilla ha expirado por falta de uso' => '5.1.2', // BH ES:expired + 'host ?name is unknown' => '5.1.2', + 'no relaying allowed' => '5.1.2', + 'no such domain' => '5.1.2', + 'not our customer' => '5.1.2', + 'relay not permitted' => '5.1.2', + 'Relay access denied' => '5.1.2', + 'relaying denied' => '5.1.2', + 'Relaying not allowed' => '5.1.2', + 'This system is not configured to relay mail' => '5.1.2', + 'Unable to relay' => '5.1.2', + 'unrouteable mail domain' => '5.1.2', // BH + 'we do not relay' => '5.1.2', + 'Old address no longer valid' => '5.1.6', + 'recipient no longer on server' => '5.1.6', + 'Sender address rejected' => '5.1.8', + 'exceeded the rate limit' => '5.2.0', + 'Local Policy Violation' => '5.2.0', + 'Mailbox currently suspended' => '5.2.0', + 'mailbox unavailable' => '5.2.0', + 'mail can not be delivered' => '5.2.0', + 'Delivery failed' => '5.2.0', + 'mail couldn\'t be delivered' => '5.2.0', + 'The account or domain may not exist' => '5.2.0', + // I guess.... seems like 5.1.1, 5.1.2, or 5.4.4 would fit too, but 5.2.0 + // seemed most generic + 'Account disabled' => '5.2.1', + 'account has been disabled' => '5.2.1', + 'Account Inactive' => '5.2.1', + 'Adressat unbekannt oder Mailbox deaktiviert' => '5.2.1', + 'Destinataire inconnu ou boite aux lettres desactivee' => '5.2.1', + // .FR disabled + 'mail is not currently being accepted for this mailbox' => '5.2.1', + 'El usuario esta en estado: inactivo' => '5.2.1', // .IT inactive + 'email account that you tried to reach is disabled' => '5.2.1', + 'inactive user' => '5.2.1', + 'Mailbox disabled for this recipient' => '5.2.1', + 'mailbox has been blocked due to inactivity' => '5.2.1', + 'mailbox is currently unavailable' => '5.2.1', + 'Mailbox is disabled' => '5.2.1', + 'Mailbox is inactive' => '5.2.1', + 'Mailbox Locked or Suspended' => '5.2.1', + 'mailbox temporarily disabled' => '5.2.1', + 'Podane konto jest zablokowane administracyjnie lub nieaktywne' => '5.2.1', + // .PL locked or inactive + "Questo indirizzo e' bloccato per inutilizzo" => '5.2.1', + // .IT blocked/expired + 'Recipient mailbox was disabled' => '5.2.1', + 'Domain name not found' => '5.2.1', + 'couldn\'t find any host named' => '5.4.4', + 'couldn\'t find any host by that name' => '5.4.4', + 'PERM_FAILURE: DNS Error' => '5.4.4', // SB: Routing failure + 'Temporary lookup failure' => '5.4.4', + 'unrouteable address' => '5.4.4', + "can't connect to" => '5.4.4', + 'Too many hops' => '5.4.6', + 'Requested action aborted' => '5.5.0', + 'rejecting password protected file attachment' => '5.6.2', + // RFC "Conversion required and prohibited" + '550 OU-00' => '5.7.1', + // SB hotmail returns a OU-001 if you're on their blocklist + '550 SC-00' => '5.7.1', + // SB hotmail returns a SC-00x if you're on their blocklist + '550 DY-00' => '5.7.1', + // SB hotmail returns a DY-00x if you're a dynamic IP + '554 denied' => '5.7.1', + 'You have been blocked by the recipient' => '5.7.1', + 'requires that you verify' => '5.7.1', + 'Access denied' => '5.7.1', + 'Administrative prohibition - unable to validate recipient' => '5.7.1', + 'Blacklisted' => '5.7.1', + 'blocke?d? for spam' => '5.7.1', + 'conection refused' => '5.7.1', + 'Connection refused due to abuse' => '5.7.1', + 'dial-up or dynamic-ip denied' => '5.7.1', + 'Domain has received too many bounces' => '5.7.1', + 'failed several antispam checks' => '5.7.1', + 'found in a DNS blacklist' => '5.7.1', + 'IPs blocked' => '5.7.1', + 'is blocked by' => '5.7.1', + 'Mail Refused' => '5.7.1', + 'Message does not pass DomainKeys' => '5.7.1', + 'Message looks like spam' => '5.7.1', + 'Message refused by' => '5.7.1', + 'not allowed access from your location' => '5.7.1', + 'permanently deferred' => '5.7.1', + 'Rejected by policy' => '5.7.1', + 'rejected by Windows Live Hotmail for policy reasons' => '5.7.1', + 'Rejected for policy reasons' => '5.7.1', + 'Rejecting banned content' => '5.7.1', + 'Sorry, looks like spam' => '5.7.1', + 'spam message discarded' => '5.7.1', + 'Too many spams from your IP' => '5.7.1', + 'TRANSACTION FAILED' => '5.7.1', + 'Transaction rejected' => '5.7.1', + 'Wiadomosc zostala odrzucona przez system antyspamowy' => '5.7.1', + // .PL rejected as spam + 'Your message was declared Spam' => '5.7.1' ); -# triggers for autoresponders +// triggers for autoresponders $autorespondlist = array( - '^\[?auto.{0,20}reply\]?', - '^auto[ -]?response', - '^Yahoo! auto response', - '^Thank you for your email\.', - '^Vacation.{0,20}(reply|respon)', + 'auto:', + '^away from.{0,15}office', + '^.?auto(mated|matic).{0,5}(reply|response)', '^out.?of (the )?office', - '^(I am|I\'m).{0,20}\s(away|on vacation|on leave|out of office|out of the office)', - "\350\207\252\345\212\250\345\233\236\345\244\215" #sino.com, 163.com UTF8 encoded + '^(I am|I\'m|I will).{0,15}\s(away|on vacation|on leave|out of office|'. + 'out of the office)', + '^Thank you for your e-?mail', + '^This is an automated', + '^Vacation.{0,10}(alert|reply|response)', + '^Yahoo! auto response', + // sino.com, 163.com UTF8 encoded + "\350\207\252\345\212\250\345\233\236\345\244\215" ); -# trigger subject lines for bounces +// trigger subject lines for bounces $bouncesubj = array( 'deletver reports about your e?mail', 'delivery errors', @@ -245,7 +269,7 @@ 'delivery status notif', 'failure delivery', 'failure notice', - 'mail delivery fail', #catches failure and failed + 'mail delivery fail', // catches failure and failed 'mail delivery system', 'mailserver notification', 'mail status report', @@ -254,9 +278,9 @@ 'mdaemon notification', 'message delayed', 'nondeliverable mail', - 'Non[_ ]remis[_ ]', #fr - 'No[_ ]se[_ ]puede[_ ]entregar', #es - 'Onbestelbaar', #nl + 'Non[_ ]remis[_ ]', // fr + 'No[_ ]se[_ ]puede[_ ]entregar', // es + 'Onbestelbaar', // nl 'returned e?mail', 'returned to sender', 'returning message to sender', @@ -266,14 +290,13 @@ 'warning: message', ); -# -# test mapping to ensure that we don't match one within another -# -#foreach ($bouncelist as $l1 => $j) { -# foreach ($bouncelist as $l2 => $k) { -# if (($l1 != $l2) && preg_match("/$l1/i", $l2)) { -# print "'$l1'($j) = '$l2'($k)\n"; -# } -# } -#} -?> \ No newline at end of file +// +// test mapping to ensure that we don't match one within another +// +// foreach ($bouncelist as $l1 => $j) { +// foreach ($bouncelist as $l2 => $k) { +// if (($l1 != $l2) && preg_match("/$l1/i", $l2)) { +// print "'$l1'($j) = '$l2'($k)\n"; +// } +// } +// } \ No newline at end of file diff --git a/bounce_statuscodes.php b/bounce_statuscodes.php index e5251f5..d83f563 100644 --- a/bounce_statuscodes.php +++ b/bounce_statuscodes.php @@ -1,154 +1,680 @@ \ No newline at end of file +/** + * Bounce status codes. + * + * Auto-generated by Make_statuscodes.php + * on 2014-12-29 19:14:24 + * From the following URLs: + * http://www.iana.org/assignments/smtp-enhanced-status-codes/smtp-enhanced-st + * atus-codes-1.csv + * + * http://www.iana.org/assignments/smtp-enhanced-status-codes/smtp-enhanced-st + * atus-codes-3.csv + * + * + * PHP version 5 + * + * @category Email + * @package BounceHandler + * @author Multiple + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ + */ + +// [RFC3463] (Standards track) +$status_code_classes['2']['title']="Success"; +$status_code_classes['2']['descr'] + = "Success specifies that the DSN is reporting a positive delivery action. ". + "Detail sub-codes may provide notification of transformations required fo". + "r delivery."; + +// [RFC3463] (Standards track) +$status_code_classes['4']['title']="Persistent Transient Failure"; +$status_code_classes['4']['descr'] + = "A persistent transient failure is one in which the message as sent is va". + "lid, but persistence of some temporary condition has caused abandonment ". + "or delay of attempts to send the message. If this code accompanies a del". + "ivery failure report, sending in the future may be successful."; + +// [RFC3463] (Standards track) +$status_code_classes['5']['title']="Permanent Failure"; +$status_code_classes['5']['descr'] + = "A permanent failure is one which is not likely to be resolved by resendi". + "ng the message in the current form. Some change to the message or the de". + "stination must be made for successful delivery."; + + +// [RFC3463] (Standards Track) +$status_code_subclasses['0.0']['title']="Other undefined Status"; +$status_code_subclasses['0.0']['descr'] + = "Other undefined status is the only undefined error code. It should be us". + "ed for all errors for which only the class of the error is known."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.0']['title']="Other address status"; +$status_code_subclasses['1.0']['descr'] + = "Something about the address specified in the message caused this DSN."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.1']['title']="Bad destination mailbox address"; +$status_code_subclasses['1.1']['descr'] + = "The mailbox specified in the address does not exist. For Internet mail n". + "ames, this means the address portion to the left of the \"@\" sign is in". + "valid. This code is only useful for permanent failures."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.2']['title']="Bad destination system address"; +$status_code_subclasses['1.2']['descr'] + = "The destination system specified in the address does not exist or is inc". + "apable of accepting mail. For Internet mail names, this means the addres". + "s portion to the right of the \"@\" is invalid for mail. This code is on". + "ly useful for permanent failures."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.3']['title'] + = "Bad destination mailbox address syntax"; + +$status_code_subclasses['1.3']['descr'] + = "The destination address was syntactically invalid. This can apply to any". + " field in the address. This code is only useful for permanent failures."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.4']['title'] + = "Destination mailbox address ambiguous"; + +$status_code_subclasses['1.4']['descr'] + = "The mailbox address as specified matches one or more recipients on the d". + "estination system. This may result if a heuristic address mapping algori". + "thm is used to map the specified address to a local mailbox name."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.5']['title']="Destination address valid"; +$status_code_subclasses['1.5']['descr'] + = "This mailbox address as specified was valid. This status code should be ". + "used for positive delivery reports."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.6']['title'] + = "Destination mailbox has moved, No forwarding address"; + +$status_code_subclasses['1.6']['descr'] + = "The mailbox address provided was at one time valid, but mail is no longe". + "r being accepted for that address. This code is only useful for permanen". + "t failures."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.7']['title'] + = "Bad sender's mailbox address syntax"; + +$status_code_subclasses['1.7']['descr'] + = "The sender's address was syntactically invalid. This can apply to any fi". + "eld in the address."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['1.8']['title']="Bad sender's system address"; +$status_code_subclasses['1.8']['descr'] + = "The sender's system specified in the address does not exist or is incapa". + "ble of accepting return mail. For domain names, this means the address p". + "ortion to the right of the \"@\" is invalid for mail."; + +// [RFC3886] (Standards Track) +$status_code_subclasses['1.9']['title'] + = "Message relayed to non-compliant mailer"; + +$status_code_subclasses['1.9']['descr'] + = "The mailbox address specified was valid, but the message has been relaye". + "d to a system that does not speak this protocol; no further information ". + "can be provided."; + +// [RFC-ietf-appsawg-nullmx-08] (Standards Track) +$status_code_subclasses['1.10']['title']="Recipient address has null MX"; +$status_code_subclasses['1.10']['descr'] + = "This status code is returned when the associated address is marked as in". + "valid using a null MX."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['2.0']['title'] + = "Other or undefined mailbox status"; + +$status_code_subclasses['2.0']['descr'] + = "The mailbox exists, but something about the destination mailbox has caus". + "ed the sending of this DSN."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['2.1']['title'] + = "Mailbox disabled, not accepting messages"; + +$status_code_subclasses['2.1']['descr'] + = "The mailbox exists, but is not accepting messages. This may be a permane". + "nt error if the mailbox will never be re-enabled or a transient error if". + " the mailbox is only temporarily disabled."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['2.2']['title']="Mailbox full"; +$status_code_subclasses['2.2']['descr'] + = "The mailbox is full because the user has exceeded a per-mailbox administ". + "rative quota or physical capacity. The general semantics implies that th". + "e recipient can delete messages to make more space available. This code ". + "should be used as a persistent transient failure."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['2.3']['title'] + = "Message length exceeds administrative limit"; + +$status_code_subclasses['2.3']['descr'] + = "A per-mailbox administrative message length limit has been exceeded. Thi". + "s status code should be used when the per-mailbox message length limit i". + "s less than the general system limit. This code should be used as a perm". + "anent failure."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['2.4']['title']="Mailing list expansion problem"; +$status_code_subclasses['2.4']['descr'] + = "The mailbox is a mailing list address and the mailing list was unable to". + " be expanded. This code may represent a permanent failure or a persisten". + "t transient failure."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['3.0']['title'] + = "Other or undefined mail system status"; + +$status_code_subclasses['3.0']['descr'] + = "The destination system exists and normally accepts mail, but something a". + "bout the system has caused the generation of this DSN."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['3.1']['title']="Mail system full"; +$status_code_subclasses['3.1']['descr'] + = "Mail system storage has been exceeded. The general semantics imply that ". + "the individual recipient may not be able to delete material to make room". + " for additional messages. This is useful only as a persistent transient ". + "error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['3.2']['title'] + = "System not accepting network messages"; + +$status_code_subclasses['3.2']['descr'] + = "The host on which the mailbox is resident is not accepting messages. Exa". + "mples of such conditions include an immanent shutdown, excessive load, o". + "r system maintenance. This is useful for both permanent and persistent t". + "ransient errors."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['3.3']['title'] + = "System not capable of selected features"; + +$status_code_subclasses['3.3']['descr'] + = "Selected features specified for the message are not supported by the des". + "tination system. This can occur in gateways when features from one domai". + "n cannot be mapped onto the supported feature in another."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['3.4']['title']="Message too big for system"; +$status_code_subclasses['3.4']['descr'] + = "The message is larger than per-message size limit. This limit may either". + " be for physical or administrative reasons. This is useful only as a per". + "manent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['3.5']['title']="System incorrectly configured"; +$status_code_subclasses['3.5']['descr'] + = "The system is not configured in a manner that will permit it to accept t". + "his message."; + +// [RFC6710] (Standards Track) +$status_code_subclasses['3.6']['title']="Requested priority was changed"; +$status_code_subclasses['3.6']['descr'] + = "The message was accepted for relay/delivery, but the requested priority ". + "(possibly the implied default) was not honoured. The human readable text". + " after the status code contains the new priority, followed by SP (space)". + " and explanatory human readable text."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.0']['title'] + = "Other or undefined network or routing status"; + +$status_code_subclasses['4.0']['descr'] + = "Something went wrong with the networking, but it is not clear what the p". + "roblem is, or the problem cannot be well expressed with any of the other". + " provided detail codes."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.1']['title']="No answer from host"; +$status_code_subclasses['4.1']['descr'] + = "The outbound connection attempt was not answered, because either the rem". + "ote system was busy, or was unable to take a call. This is useful only a". + "s a persistent transient error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.2']['title']="Bad connection"; +$status_code_subclasses['4.2']['descr'] + = "The outbound connection was established, but was unable to complete the ". + "message transaction, either because of time-out, or inadequate connectio". + "n quality. This is useful only as a persistent transient error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.3']['title']="Directory server failure"; +$status_code_subclasses['4.3']['descr'] + = "The network system was unable to forward the message, because a director". + "y server was unavailable. This is useful only as a persistent transient ". + "error. The inability to connect to an Internet DNS server is one example". + " of the directory server failure error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.4']['title']="Unable to route"; +$status_code_subclasses['4.4']['descr'] + = "The mail system was unable to determine the next hop for the message bec". + "ause the necessary routing information was unavailable from the director". + "y server. This is useful for both permanent and persistent transient err". + "ors. A DNS lookup returning only an SOA (Start of Administration) record". + " for a domain name is one example of the unable to route error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.5']['title']="Mail system congestion"; +$status_code_subclasses['4.5']['descr'] + = "The mail system was unable to deliver the message because the mail syste". + "m was congested. This is useful only as a persistent transient error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.6']['title']="Routing loop detected"; +$status_code_subclasses['4.6']['descr'] + = "A routing loop caused the message to be forwarded too many times, either". + " because of incorrect routing tables or a user- forwarding loop. This is". + " useful only as a persistent transient error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['4.7']['title']="Delivery time expired"; +$status_code_subclasses['4.7']['descr'] + = "The message was considered too old by the rejecting system, either becau". + "se it remained on that host too long or because the time-to-live value s". + "pecified by the sender of the message was exceeded. If possible, the cod". + "e for the actual problem found when delivery was attempted should be ret". + "urned rather than this code."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['5.0']['title'] + = "Other or undefined protocol status"; + +$status_code_subclasses['5.0']['descr'] + = "Something was wrong with the protocol necessary to deliver the message t". + "o the next hop and the problem cannot be well expressed with any of the ". + "other provided detail codes."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['5.1']['title']="Invalid command"; +$status_code_subclasses['5.1']['descr'] + = "A mail transaction protocol command was issued which was either out of s". + "equence or unsupported. This is useful only as a permanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['5.2']['title']="Syntax error"; +$status_code_subclasses['5.2']['descr'] + = "A mail transaction protocol command was issued which could not be interp". + "reted, either because the syntax was wrong or the command is unrecognize". + "d. This is useful only as a permanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['5.3']['title']="Too many recipients"; +$status_code_subclasses['5.3']['descr'] + = "More recipients were specified for the message than could have been deli". + "vered by the protocol. This error should normally result in the segmenta". + "tion of the message into two, the remainder of the recipients to be deli". + "vered on a subsequent delivery attempt. It is included in this list in t". + "he event that such segmentation is not possible."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['5.4']['title']="Invalid command arguments"; +$status_code_subclasses['5.4']['descr'] + = "A valid mail transaction protocol command was issued with invalid argume". + "nts, either because the arguments were out of range or represented unrec". + "ognized features. This is useful only as a permanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['5.5']['title']="Wrong protocol version"; +$status_code_subclasses['5.5']['descr'] + = "A protocol version mis-match existed which could not be automatically re". + "solved by the communicating parties."; + +// [RFC4954] (Standards Track) +$status_code_subclasses['5.6']['title'] + = "Authentication Exchange line is too long"; + +$status_code_subclasses['5.6']['descr'] + = "This enhanced status code SHOULD be returned when the server fails the A". + "UTH command due to the client sending a [BASE64] response which is longe". + "r than the maximum buffer size available for the currently selected SASL". + " mechanism. This is useful for both permanent and persistent transient e". + "rrors."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['6.0']['title']="Other or undefined media error"; +$status_code_subclasses['6.0']['descr'] + = "Something about the content of a message caused it to be considered unde". + "liverable and the problem cannot be well expressed with any of the other". + " provided detail codes."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['6.1']['title']="Media not supported"; +$status_code_subclasses['6.1']['descr'] + = "The media of the message is not supported by either the delivery protoco". + "l or the next system in the forwarding path. This is useful only as a pe". + "rmanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['6.2']['title'] + = "Conversion required and prohibited"; + +$status_code_subclasses['6.2']['descr'] + = "The content of the message must be converted before it can be delivered ". + "and such conversion is not permitted. Such prohibitions may be the expre". + "ssion of the sender in the message itself or the policy of the sending h". + "ost."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['6.3']['title'] + = "Conversion required but not supported"; + +$status_code_subclasses['6.3']['descr'] + = "The message content must be converted in order to be forwarded but such ". + "conversion is not possible or is not practical by a host in the forwardi". + "ng path. This condition may result when an ESMTP gateway supports 8bit t". + "ransport but is not able to downgrade the message to 7 bit as required f". + "or the next hop."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['6.4']['title']="Conversion with loss performed"; +$status_code_subclasses['6.4']['descr'] + = "This is a warning sent to the sender when message delivery was successfu". + "lly but when the delivery required a conversion in which some data was l". + "ost. This may also be a permanent error if the sender has indicated that". + " conversion with loss is prohibited for the message."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['6.5']['title']="Conversion Failed"; +$status_code_subclasses['6.5']['descr'] + = "A conversion was required but was unsuccessful. This may be useful as a ". + "permanent or persistent temporary notification."; + +// [RFC4468] (Standards Track) +$status_code_subclasses['6.6']['title']="Message content not available"; +$status_code_subclasses['6.6']['descr'] + = "The message content could not be fetched from a remote system. This may ". + "be useful as a permanent or persistent temporary notification."; + +// [RFC6531] (Standards track) +$status_code_subclasses['6.7']['title'] + = "Non-ASCII addresses not permitted for that sender/recipient"; + +$status_code_subclasses['6.7']['descr'] + = "This indicates the reception of a MAIL or RCPT command that non-ASCII ad". + "dresses are not permitted"; + +// [RFC6531] (Standards track) +$status_code_subclasses['6.8']['title'] + = "UTF-8 string reply is required, but not permitted by the SMTP client"; + +$status_code_subclasses['6.8']['descr'] + = "This indicates that a reply containing a UTF-8 string is required to sho". + "w the mailbox name, but that form of response is not permitted by the SM". + "TP client."; + +// [RFC6531] (Standards track) +$status_code_subclasses['6.9']['title'] + = "UTF-8 header message cannot be transferred to one or more recipients, so". + " the message must be rejected"; + +$status_code_subclasses['6.9']['descr'] + = "This indicates that transaction failed after the final \".\" of the DATA". + " command."; + +// [RFC6531] (Standards track) +$status_code_subclasses['6.10']['title']=""; +$status_code_subclasses['6.10']['descr'] + = "This is a duplicate of X.6.8 and is thus deprecated."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.0']['title'] + = "Other or undefined security status"; + +$status_code_subclasses['7.0']['descr'] + = "Something related to security caused the message to be returned, and the". + " problem cannot be well expressed with any of the other provided detail ". + "codes. This status code may also be used when the condition cannot be fu". + "rther described because of security policies in force."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.1']['title'] + = "Delivery not authorized, message refused"; + +$status_code_subclasses['7.1']['descr'] + = "The sender is not authorized to send to the destination. This can be the". + " result of per-host or per-recipient filtering. This memo does not discu". + "ss the merits of any such filtering, but provides a mechanism to report ". + "such. This is useful only as a permanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.2']['title'] + = "Mailing list expansion prohibited"; + +$status_code_subclasses['7.2']['descr'] + = "The sender is not authorized to send a message to the intended mailing l". + "ist. This is useful only as a permanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.3']['title'] + = "Security conversion required but not possible"; + +$status_code_subclasses['7.3']['descr'] + = "A conversion from one secure messaging protocol to another was required ". + "for delivery and such conversion was not possible. This is useful only a". + "s a permanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.4']['title']="Security features not supported"; +$status_code_subclasses['7.4']['descr'] + = "A message contained security features such as secure authentication that". + " could not be supported on the delivery protocol. This is useful only as". + " a permanent error."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.5']['title']="Cryptographic failure"; +$status_code_subclasses['7.5']['descr'] + = "A transport system otherwise authorized to validate or decrypt a message". + " in transport was unable to do so because necessary information such as ". + "key was not available or such information was invalid."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.6']['title'] + = "Cryptographic algorithm not supported"; + +$status_code_subclasses['7.6']['descr'] + = "A transport system otherwise authorized to validate or decrypt a message". + " was unable to do so because the necessary algorithm was not supported."; + +// [RFC3463] (Standards Track) +$status_code_subclasses['7.7']['title']="Message integrity failure"; +$status_code_subclasses['7.7']['descr'] + = "A transport system otherwise authorized to validate a message was unable". + " to do so because the message was corrupted or altered. This may be usef". + "ul as a permanent, transient persistent, or successful delivery code."; + +// [RFC4954] (Standards Track) +$status_code_subclasses['7.8']['title'] + = "Authentication credentials invalid"; + +$status_code_subclasses['7.8']['descr'] + = "This response to the AUTH command indicates that the authentication fail". + "ed due to invalid or insufficient authentication credentials. In this ca". + "se, the client SHOULD ask the user to supply new credentials (such as by". + " presenting a password dialog box)."; + +// [RFC4954] (Standards Track) +$status_code_subclasses['7.9']['title'] + = "Authentication mechanism is too weak"; + +$status_code_subclasses['7.9']['descr'] + = "This response to the AUTH command indicates that the selected authentica". + "tion mechanism is weaker than server policy permits for that user. The c". + "lient SHOULD retry with a new authentication mechanism."; + +// [RFC5248] (Best current practice) +$status_code_subclasses['7.10']['title']="Encryption Needed"; +$status_code_subclasses['7.10']['descr'] + = "This indicates that external strong privacy layer is needed in order to ". + "use the requested authentication mechanism. This is primarily intended f". + "or use with clear text authentication mechanisms. A client which receive". + "s this may activate a security layer such as TLS prior to authenticating". + ", or attempt to use a stronger mechanism."; + +// [RFC4954] (Standards Track) +$status_code_subclasses['7.11']['title'] + = "Encryption required for requested authentication mechanism"; + +$status_code_subclasses['7.11']['descr'] + = "This response to the AUTH command indicates that the selected authentica". + "tion mechanism may only be used when the underlying SMTP connection is e". + "ncrypted. Note that this response code is documented here for historical". + " purposes only. Modern implementations SHOULD NOT advertise mechanisms t". + "hat are not permitted due to lack of encryption, unless an encryption la". + "yer of sufficient strength is currently being employed."; + +// [RFC4954] (Standards Track) +$status_code_subclasses['7.12']['title'] + = "A password transition is needed"; + +$status_code_subclasses['7.12']['descr'] + = "This response to the AUTH command indicates that the user needs to trans". + "ition to the selected authentication mechanism. This is typically done b". + "y authenticating once using the [PLAIN] authentication mechanism. The se". + "lected mechanism SHOULD then work for authentications in subsequent sess". + "ions."; + +// [RFC5248] (Best current practice) +$status_code_subclasses['7.13']['title']="User Account Disabled"; +$status_code_subclasses['7.13']['descr'] + = "Sometimes a system administrator will have to disable a user's account (". + "e.g., due to lack of payment, abuse, evidence of a break-in attempt, etc". + "). This error code occurs after a successful authentication to a disable". + "d account. This informs the client that the failure is permanent until t". + "he user contacts their system administrator to get the account re-enable". + "d. It differs from a generic authentication failure where the client's b". + "est option is to present the passphrase entry dialog in case the user si". + "mply mistyped their passphrase."; + +// [RFC5248] (Best current practice) +$status_code_subclasses['7.14']['title']="Trust relationship required"; +$status_code_subclasses['7.14']['descr'] + = "The submission server requires a configured trust relationship with a th". + "ird-party server in order to access the message content. This value repl". + "aces the prior use of X.7.8 for this error condition. thereby updating [". + "RFC4468]."; + +// [RFC6710] (Standards Track) +$status_code_subclasses['7.15']['title']="Priority Level is too low"; +$status_code_subclasses['7.15']['descr'] + = "The specified priority level is below the lowest priority acceptable for". + " the receiving SMTP server. This condition might be temporary, for examp". + "le the server is operating in a mode where only higher priority messages". + " are accepted for transfer and delivery, while lower priority messages a". + "re rejected."; + +// [RFC6710] (Standards Track) +$status_code_subclasses['7.16']['title'] + = "Message is too big for the specified priority"; + +$status_code_subclasses['7.16']['descr'] + = "The message is too big for the specified priority. This condition might ". + "be temporary, for example the server is operating in a mode where only h". + "igher priority messages below certain size are accepted for transfer and". + " delivery."; + +// [RFC7293] (Standards Track) +$status_code_subclasses['7.17']['title']="Mailbox owner has changed"; +$status_code_subclasses['7.17']['descr'] + = "This status code is returned when a message is received with a Require-R". + "ecipient-Valid-Since field or RRVS extension and the receiving system is". + " able to determine that the intended recipient mailbox has not been unde". + "r continuous ownership since the specified date-time."; + +// [RFC7293] (Standards Track) +$status_code_subclasses['7.18']['title']="Domain owner has changed"; +$status_code_subclasses['7.18']['descr'] + = "This status code is returned when a message is received with a Require-R". + "ecipient-Valid-Since field or RRVS extension and the receiving system wi". + "shes to disclose that the owner of the domain name of the recipient has ". + "changed since the specified date-time."; + +// [RFC7293] (Standards Track) +$status_code_subclasses['7.19']['title']="RRVS test cannot be completed"; +$status_code_subclasses['7.19']['descr'] + = "This status code is returned when a message is received with a Require-R". + "ecipient-Valid-Since field or RRVS extension and the receiving system ca". + "nnot complete the requested evaluation because the required timestamp wa". + "s not recorded. The message originator needs to decide whether to reissu". + "e the message without RRVS protection."; + +// [RFC7372] (Standards Track); [RFC6376] (Standards Track) +$status_code_subclasses['7.20']['title'] + = "No passing DKIM signature found"; + +$status_code_subclasses['7.20']['descr'] + = "This status code is returned when a message did not contain any passing ". + "DKIM signatures. (This violates the advice of Section 6.1 of [RFC6376].)"; + +// [RFC7372] (Standards Track); [RFC6376] (Standards Track) +$status_code_subclasses['7.21']['title'] + = "No acceptable DKIM signature found"; + +$status_code_subclasses['7.21']['descr'] + = "This status code is returned when a message contains one or more passing". + " DKIM signatures, but none are acceptable. (This violates the advice of ". + "Section 6.1 of [RFC6376].)"; + +// [RFC7372] (Standards Track); [RFC6376] (Standards Track) +$status_code_subclasses['7.22']['title'] + = "No valid author-matched DKIM signature found"; + +$status_code_subclasses['7.22']['descr'] + = "This status code is returned when a message contains one or more passing". + " DKIM signatures, but none are acceptable because none have an identifie". + "r(s) that matches the author address(es) found in the From header field.". + " This is a special case of X.7.21. (This violates the advice of Section ". + "6.1 of [RFC6376].)"; + +// [RFC7372] (Standards Track); [RFC7208] (Standards Track) +$status_code_subclasses['7.23']['title']="SPF validation failed"; +$status_code_subclasses['7.23']['descr'] + = "This status code is returned when a message completed an SPF check that ". + "produced a \"fail\" result, contrary to local policy requirements. Used ". + "in place of 5.7.1 as described in Section 8.4 of [RFC7208]."; + +// [RFC7372] (Standards Track); [RFC7208] (Standards Track) +$status_code_subclasses['7.24']['title']="SPF validation error"; +$status_code_subclasses['7.24']['descr'] + = "This status code is returned when evaluation of SPF relative to an arriv". + "ing message resulted in an error. Used in place of 4.4.3 or 5.5.2 as des". + "cribed in Sections 8.6 and 8.7 of [RFC7208]."; + +// [RFC7372] (Standards Track); [Section 3 of RFC7001] (Standards Track) +$status_code_subclasses['7.25']['title']="Reverse DNS validation failed"; +$status_code_subclasses['7.25']['descr'] + = "This status code is returned when an SMTP client's IP address failed a r". + "everse DNS validation check, contrary to local policy requirements."; + +// [RFC7372] (Standards Track) +$status_code_subclasses['7.26']['title'] + = "Multiple authentication checks failed"; + +$status_code_subclasses['7.26']['descr'] + = "This status code is returned when a message failed more than one message". + " authentication check, contrary to local policy requirements. The partic". + "ular mechanisms that failed are not specified."; + +// [RFC-ietf-appsawg-nullmx-08] (Standards Track) +$status_code_subclasses['7.27']['title']="Sender address has null MX"; +$status_code_subclasses['7.27']['descr'] + = "This status code is returned when the associated sender address has a nu". + "ll MX, and the SMTP receiver is configured to reject mail from such send". + "er (e.g. because it could not return a DSN)."; + diff --git a/cmdlinetest.php b/cmdlinetest.php index 1a6459d..8ea9b89 100644 --- a/cmdlinetest.php +++ b/cmdlinetest.php @@ -1,70 +1,88 @@ + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ + */ + +require_once'bounce_driver.class.php'; $total = array(); -function checkmail($email) { +/** + * Check an email. + * + * @param string $email Contents of an email to check + * + * @return void + */ +function checkmail($email) +{ global $total; $bh = new Bouncehandler(); $bounceinfo = $bh->get_the_facts($email); -# var_dump($bounceinfo); -# var_dump($bh); - print "TYPE ". @$bh->type. "\n"; + // var_dump($bounceinfo); + // var_dump($bh); + print " TYPE " . @$bh->type . "\n"; if ($bh->type == 'bounce') { - print "ACTION ". $bounceinfo[0]['action']. "\n"; - print "STATUS ". $bounceinfo[0]['status']. "\n"; - print "RECIPIENT ". $bounceinfo[0]['recipient']. "\n"; + print " ACTION " . $bounceinfo[0]['action'] . "\n"; + print " STATUS " . $bounceinfo[0]['status'] . "\n"; + print " RECIPIENT " . $bounceinfo[0]['recipient'] . "\n"; } if ($bh->type == 'fbl') { - print "ENV FROM ". @$bh->fbl_hash['Original-mail-from']. "\n"; - print "AGENT ". @$bh->fbl_hash['User-agent']. "\n"; - print "IP ". @$bh->fbl_hash['Source-ip']. "\n"; + print " ENV FROM " . @$bh->fbl_hash['Original-mail-from'] . "\n"; + print " AGENT " . @$bh->fbl_hash['User-agent'] . "\n"; + print " IP " . @$bh->fbl_hash['Source-ip'] . "\n"; } if ($bh->type == 'autoresponse') { - print "AUTO ". $bounceinfo[0]['autoresponse']. "\n"; + print " AUTO " . $bounceinfo[0]['autoresponse'] . "\n"; + } + if ($bh->type) { + @$total[$bh->type]++; + } else { + @$total['unknown']++; } - if ($bh->type) - @$total[$bh->type]++; - else - @$total['unknown']++; print "\n"; } - if (defined('STDIN')) { if (count($argv) > 1) { for ($i = 1; $i < count($argv); $i++) { if (is_dir($argv[$i])) { $dh = opendir($argv[$i]); while ($fn = readdir($dh)) { - if (substr($fn,0,1) !== '.') { - $email = file_get_contents($argv[$i].'/'.$fn); - print $argv[1]."/$fn\n"; + if (substr($fn, 0, 1) !== '.') { + $email = file_get_contents($argv[$i] . '/' . $fn); + print $argv[$i] . "/$fn\n"; checkmail($email); } } - } - else { + closedir($dh); + } else { $email = file_get_contents($argv[$i]); - print $argv[1]."\n"; + print $argv[$i] . "\n"; checkmail($email); } } - foreach ($total as $k => $v) { - print "$k = $v\n"; - } - - } - else { - $handle = fopen("php://stdin","r"); + + + } else { + $handle = fopen("php://stdin", "r"); $email = stream_get_contents($handle); fclose($handle); checkmail($email); } + /** + * Now show the results + */ foreach ($total as $t => $v) { printf("%-15s %6d\n", $t, $v); } } - -?> diff --git a/eml/1.eml b/eml/1.eml index eb10491..a7e2621 100644 --- a/eml/1.eml +++ b/eml/1.eml @@ -18,7 +18,7 @@ Subject: failure notice (postino9.prima.com.ar) Su mensaje no pudo ser entregado - Sua mensagem nao pode ser enviada - Your message could not be delivered. -: +: Sorry, no mailbox here by that name. (#5.1.1) --- Mensaje original adjunto. @@ -33,8 +33,8 @@ Received: from unknown (HELO ar2.outmailing.net) (200.68.65.111) Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gec0w-0003Qy-39 - for somat@ciudad.com.ar; Mon, 30 Oct 2006 15:37:38 -0300 -To: somat@ciudad.com.ar + for somat@example.com; Mon, 30 Oct 2006 15:37:38 -0300 +To: somat@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); diff --git a/eml/10.eml b/eml/10.eml index a289bdd..3fa2964 100644 --- a/eml/10.eml +++ b/eml/10.eml @@ -1,20 +1,20 @@ Return-path: <> Envelope-to: ar1@ar1.outmailing.com Delivery-date: Mon, 30 Oct 2006 15:50:05 -0300 -Received: from bay0-omc3-s35.bay0.hotmail.com ([65.54.246.235]) +Received: from bay0-omc3-s35.bay0.example.com ([65.54.246.235]) by ar2.outmailing.net with esmtp (Exim 4.60) id 1GecCx-0003ye-8o for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:50:04 -0300 -Received: from bay0-mc7-f18.bay0.hotmail.com ([65.54.244.218]) by bay0-omc3-s35.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.1830); +Received: from bay0-mc7-f18.bay0.example.com ([65.54.244.218]) by bay0-omc3-s35.bay0.example.com with Microsoft SMTPSVC(6.0.3790.1830); Mon, 30 Oct 2006 10:52:52 -0800 -From: postmaster@hotmail.com +From: postmaster@example.com To: ar1@ar1.outmailing.com Date: Mon, 30 Oct 2006 10:52:47 -0800 MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="9B095B5ADSN=_01C6F92BD900B51000064DEEbay0?mc7?f18.bay" X-DSNContext: 335a7efd - 4480 - 00000001 - 80040546 -Message-ID: <3WYIgoFT30004b804@bay0-mc7-f18.bay0.hotmail.com> +Message-ID: <3WYIgoFT30004b804@bay0-mc7-f18.bay0.example.com> Subject: Delivery Status Notification (Failure) X-OriginalArrivalTime: 30 Oct 2006 18:52:52.0619 (UTC) FILETIME=[9A804DB0:01C6FC54] @@ -25,13 +25,13 @@ This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. - animecox_x@hotmail.com + animecox_x@example.com -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com @@ -40,11 +40,11 @@ http://www.nod32.com --9B095B5ADSN=_01C6F92BD900B51000064DEEbay0?mc7?f18.bay Content-Type: message/delivery-status -Reporting-MTA: dns;bay0-mc7-f18.bay0.hotmail.com +Reporting-MTA: dns;bay0-mc7-f18.bay0.example.com Received-From-MTA: dns;ar2.outmailing.net Arrival-Date: Mon, 30 Oct 2006 10:52:43 -0800 -Final-Recipient: rfc822;animecox_x@hotmail.com +Final-Recipient: rfc822;animecox_x@example.com Action: failed Status: 5.5.0 Diagnostic-Code: smtp;550 Requested action not taken: mailbox unavailable (1171782072:1364:-2147467259) @@ -52,20 +52,20 @@ Diagnostic-Code: smtp;550 Requested action not taken: mailbox unavailable (11717 --9B095B5ADSN=_01C6F92BD900B51000064DEEbay0?mc7?f18.bay Content-Type: message/rfc822 -Received: from ar2.outmailing.net ([200.68.65.111]) by bay0-mc7-f18.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.2444); +Received: from ar2.outmailing.net ([200.68.65.111]) by bay0-mc7-f18.bay0.example.com with Microsoft SMTPSVC(6.0.3790.2444); Mon, 30 Oct 2006 10:52:43 -0800 Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecCV-0003uA-8P - for animecox_x@hotmail.com; Mon, 30 Oct 2006 15:49:35 -0300 -To: animecox_x@hotmail.com + for animecox_x@example.com; Mon, 30 Oct 2006 15:49:35 -0300 +To: animecox_x@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:49:35 -0300 Date: Mon, 30 Oct 2006 15:49:35 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -76,7 +76,7 @@ Content-Type: text/html; charset="utf-8" Return-Path: ar1@ar1.outmailing.com X-OriginalArrivalTime: 30 Oct 2006 18:52:44.0331 (UTC) FILETIME=[958FA7B0:01C6FC54] - + To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - anitaculiyas@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + anitaculiyas@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecCb-0003uv-0n - for anitaculiyas@hotmail.com; Mon, 30 Oct 2006 15:49:41 -0300 -To: anitaculiyas@hotmail.com + for anitaculiyas@example.com; Mon, 30 Oct 2006 15:49:41 -0300 +To: anitaculiyas@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:49:41 -0300 Date: Mon, 30 Oct 2006 15:49:41 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/12.eml b/eml/12.eml index bd93151..1ccde3c 100644 --- a/eml/12.eml +++ b/eml/12.eml @@ -46,7 +46,7 @@ Your message cannot be delivered to the following recipients: -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com @@ -90,7 +90,7 @@ Date: Mon, 30 Oct 2006 15:48:33 -0300 From: Green Land Irish Pub Subject: {posible spam} Eventos de La semana To: andressaravia@fibertel.com.ar -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-id: MIME-version: 1.0 X-Mailer: AC Mailer @@ -104,7 +104,7 @@ X-Fib-Al: noav X-Fib-Al-SA: analyzed X-Fib-Al-From: ar1@ar1.outmailing.com - + -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <2207490767fb7d0cded8ef919eae80ea@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -43,7 +43,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/14.eml b/eml/14.eml index 41d052f..ddc2959 100644 --- a/eml/14.eml +++ b/eml/14.eml @@ -36,7 +36,7 @@ Received: from mailer Mon, 30 Oct 2006 15:49:33 -0300 Date: Mon, 30 Oct 2006 15:49:33 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <10404d5c135eef6c81fea8fd1f17a5ed@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/15.eml b/eml/15.eml index c419e41..5d4932f 100644 --- a/eml/15.eml +++ b/eml/15.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:49:35 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecCU-0003u1-Ai for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:49:34 -0300 -X-Failed-Recipients: anibalferreyra@hotmail.com +X-Failed-Recipients: anibalferreyra@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - anibalferreyra@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + anibalferreyra@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecCL-0003sY-8t - for anibalferreyra@hotmail.com; Mon, 30 Oct 2006 15:49:25 -0300 -To: anibalferreyra@hotmail.com + for anibalferreyra@example.com; Mon, 30 Oct 2006 15:49:25 -0300 +To: anibalferreyra@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:49:25 -0300 Date: Mon, 30 Oct 2006 15:49:25 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <71ae2746cab2e05c65ef42f266d0195f@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/16.eml b/eml/16.eml index 7ca2cb2..1225b1d 100644 --- a/eml/16.eml +++ b/eml/16.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:49:33 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecCQ-0003tj-Kj for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:49:31 -0300 -X-Failed-Recipients: angel_benitezcollante@hotmail.com +X-Failed-Recipients: angel_benitezcollante@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angel_benitezcollante@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + angel_benitezcollante@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBj-0003mH-KX - for angel_benitezcollante@hotmail.com; Mon, 30 Oct 2006 15:48:47 -0300 -To: angel_benitezcollante@hotmail.com + for angel_benitezcollante@example.com; Mon, 30 Oct 2006 15:48:47 -0300 +To: angel_benitezcollante@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:47 -0300 Date: Mon, 30 Oct 2006 15:48:47 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <736a009cacf00831679d5cf6e8b9e6e8@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/17.eml b/eml/17.eml index 9adf9f0..cb08cf3 100644 --- a/eml/17.eml +++ b/eml/17.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:49:30 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecCO-0003tM-QJ for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:49:28 -0300 -X-Failed-Recipients: angelasalgado38@hotmail.com +X-Failed-Recipients: angelasalgado38@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angelasalgado38@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + angelasalgado38@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBk-0003me-QC - for angelasalgado38@hotmail.com; Mon, 30 Oct 2006 15:48:48 -0300 -To: angelasalgado38@hotmail.com + for angelasalgado38@example.com; Mon, 30 Oct 2006 15:48:48 -0300 +To: angelasalgado38@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:48 -0300 Date: Mon, 30 Oct 2006 15:48:48 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/18.eml b/eml/18.eml index 26acc98..7b7c001 100644 --- a/eml/18.eml +++ b/eml/18.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:49:23 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecCI-0003s1-Vq for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:49:23 -0300 -X-Failed-Recipients: angus20@hotmail.com +X-Failed-Recipients: angus20@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angus20@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + angus20@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecCD-0003rB-TC - for angus20@hotmail.com; Mon, 30 Oct 2006 15:49:17 -0300 -To: angus20@hotmail.com + for angus20@example.com; Mon, 30 Oct 2006 15:49:17 -0300 +To: angus20@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:49:17 -0300 Date: Mon, 30 Oct 2006 15:49:17 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <4b4ba8211bea9efde4fdf8d2f9156c7d@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/19.eml b/eml/19.eml index 38f41f7..29c7e3d 100644 --- a/eml/19.eml +++ b/eml/19.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:49:20 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecCF-0003rV-Av for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:49:19 -0300 -X-Failed-Recipients: angelmarianog21@hotmail.com +X-Failed-Recipients: angelmarianog21@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angelmarianog21@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + angelmarianog21@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecC4-0003py-K7 - for angelmarianog21@hotmail.com; Mon, 30 Oct 2006 15:49:08 -0300 -To: angelmarianog21@hotmail.com + for angelmarianog21@example.com; Mon, 30 Oct 2006 15:49:08 -0300 +To: angelmarianog21@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:49:08 -0300 Date: Mon, 30 Oct 2006 15:49:08 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <4595b4be894c2b68c38983b38cf8f981@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/2.eml b/eml/2.eml index abac5dc..31afb78 100644 --- a/eml/2.eml +++ b/eml/2.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:51:00 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecDr-00045p-PO for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:51:00 -0300 -X-Failed-Recipients: aranoe22@hotmail.com +X-Failed-Recipients: aranoe22@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - aranoe22@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx4.hotmail.com [65.54.245.104]: 550 Requested action not taken: + aranoe22@example.com + SMTP error from remote mail server after RCPT TO:: + host mx4.example.com [65.54.245.104]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecDl-00044w-Vy - for aranoe22@hotmail.com; Mon, 30 Oct 2006 15:50:54 -0300 -To: aranoe22@hotmail.com + for aranoe22@example.com; Mon, 30 Oct 2006 15:50:54 -0300 +To: aranoe22@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:50:53 -0300 Date: Mon, 30 Oct 2006 15:50:53 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <5c82bbb2da910ac3d1ba2f69bce7aee2@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/20.eml b/eml/20.eml index 29319f5..ee11422 100644 --- a/eml/20.eml +++ b/eml/20.eml @@ -1,20 +1,20 @@ Return-path: <> Envelope-to: ar1@ar1.outmailing.com Delivery-date: Mon, 30 Oct 2006 15:49:04 -0300 -Received: from bay0-omc3-s17.bay0.hotmail.com ([65.54.246.217]) +Received: from bay0-omc3-s17.bay0.example.com ([65.54.246.217]) by ar2.outmailing.net with esmtp (Exim 4.60) id 1GecBy-0003oz-4B for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:49:03 -0300 -Received: from bay0-mc6-f2.bay0.hotmail.com ([65.54.244.170]) by bay0-omc3-s17.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.1830); +Received: from bay0-mc6-f2.bay0.example.com ([65.54.244.170]) by bay0-omc3-s17.bay0.example.com with Microsoft SMTPSVC(6.0.3790.1830); Mon, 30 Oct 2006 10:51:49 -0800 -From: postmaster@hotmail.com +From: postmaster@example.com To: ar1@ar1.outmailing.com Date: Mon, 30 Oct 2006 10:51:49 -0800 MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="9B095B5ADSN=_01C6F921403F11F000066E9Dbay0?mc6?f2.bay0" X-DSNContext: 335a7efd - 4480 - 00000001 - 80040546 -Message-ID: <5iMaUfOIm0004d90a@bay0-mc6-f2.bay0.hotmail.com> +Message-ID: <5iMaUfOIm0004d90a@bay0-mc6-f2.bay0.example.com> Subject: Delivery Status Notification (Failure) X-OriginalArrivalTime: 30 Oct 2006 18:51:49.0978 (UTC) FILETIME=[752A0BA0:01C6FC54] @@ -25,13 +25,13 @@ This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. - angelica_maco@hotmail.com + angelica_maco@example.com -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com @@ -40,11 +40,11 @@ http://www.nod32.com --9B095B5ADSN=_01C6F921403F11F000066E9Dbay0?mc6?f2.bay0 Content-Type: message/delivery-status -Reporting-MTA: dns;bay0-mc6-f2.bay0.hotmail.com +Reporting-MTA: dns;bay0-mc6-f2.bay0.example.com Received-From-MTA: dns;ar2.outmailing.net Arrival-Date: Mon, 30 Oct 2006 10:51:48 -0800 -Final-Recipient: rfc822;angelica_maco@hotmail.com +Final-Recipient: rfc822;angelica_maco@example.com Action: failed Status: 5.5.0 Diagnostic-Code: smtp;550 Requested action not taken: mailbox unavailable (1171782072:1364:-2147467259) @@ -52,20 +52,20 @@ Diagnostic-Code: smtp;550 Requested action not taken: mailbox unavailable (11717 --9B095B5ADSN=_01C6F921403F11F000066E9Dbay0?mc6?f2.bay0 Content-Type: message/rfc822 -Received: from ar2.outmailing.net ([200.68.65.111]) by bay0-mc6-f2.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.2444); +Received: from ar2.outmailing.net ([200.68.65.111]) by bay0-mc6-f2.bay0.example.com with Microsoft SMTPSVC(6.0.3790.2444); Mon, 30 Oct 2006 10:51:48 -0800 Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBs-0003oU-VT - for angelica_maco@hotmail.com; Mon, 30 Oct 2006 15:48:57 -0300 -To: angelica_maco@hotmail.com + for angelica_maco@example.com; Mon, 30 Oct 2006 15:48:57 -0300 +To: angelica_maco@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:56 -0300 Date: Mon, 30 Oct 2006 15:48:56 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -76,7 +76,7 @@ Content-Type: text/html; charset="utf-8" Return-Path: ar1@ar1.outmailing.com X-OriginalArrivalTime: 30 Oct 2006 18:51:49.0421 (UTC) FILETIME=[74D50DD0:01C6FC54] - + To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angelferchu@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.168]: 550 Requested action not taken: + angelferchu@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.168]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBr-0003oJ-NG - for angelferchu@hotmail.com; Mon, 30 Oct 2006 15:48:55 -0300 -To: angelferchu@hotmail.com + for angelferchu@example.com; Mon, 30 Oct 2006 15:48:55 -0300 +To: angelferchu@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:55 -0300 Date: Mon, 30 Oct 2006 15:48:55 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/22.eml b/eml/22.eml index bd200e9..afbf0a6 100644 --- a/eml/22.eml +++ b/eml/22.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:48:52 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecBn-0003nV-DH for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:48:51 -0300 -X-Failed-Recipients: angel_bentezcollante@hotmail.com +X-Failed-Recipients: angel_bentezcollante@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angel_bentezcollante@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.168]: 550 Requested action not taken: + angel_bentezcollante@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.168]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBj-0003mK-NH - for angel_bentezcollante@hotmail.com; Mon, 30 Oct 2006 15:48:47 -0300 -To: angel_bentezcollante@hotmail.com + for angel_bentezcollante@example.com; Mon, 30 Oct 2006 15:48:47 -0300 +To: angel_bentezcollante@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:47 -0300 Date: Mon, 30 Oct 2006 15:48:47 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/23.eml b/eml/23.eml index fa089ff..a09009c 100644 --- a/eml/23.eml +++ b/eml/23.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:48:51 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecBm-0003nN-Fc for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:48:50 -0300 -X-Failed-Recipients: angel.sedm@hotmail.com +X-Failed-Recipients: angel.sedm@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angel.sedm@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.168]: 550 Requested action not taken: + angel.sedm@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.168]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBf-0003lt-Jm - for angel.sedm@hotmail.com; Mon, 30 Oct 2006 15:48:43 -0300 -To: angel.sedm@hotmail.com + for angel.sedm@example.com; Mon, 30 Oct 2006 15:48:43 -0300 +To: angel.sedm@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:43 -0300 Date: Mon, 30 Oct 2006 15:48:43 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <1338036154134bcb47f7528f74cb775b@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/24.eml b/eml/24.eml index bdab1b7..b9fb725 100644 --- a/eml/24.eml +++ b/eml/24.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:48:51 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecBm-0003nU-TT for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:48:51 -0300 -X-Failed-Recipients: angelclandestina@hotmail.com +X-Failed-Recipients: angelclandestina@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - angelclandestina@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.168]: 550 Requested action not taken: + angelclandestina@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.168]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBl-0003my-GF - for angelclandestina@hotmail.com; Mon, 30 Oct 2006 15:48:49 -0300 -To: angelclandestina@hotmail.com + for angelclandestina@example.com; Mon, 30 Oct 2006 15:48:49 -0300 +To: angelclandestina@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:49 -0300 Date: Mon, 30 Oct 2006 15:48:49 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <6a1934ccd8a7fc1ad0c7950f677d6111@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/25.eml b/eml/25.eml index b91ce75..395c802 100644 --- a/eml/25.eml +++ b/eml/25.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:48:28 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecBP-0003j6-Qr for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:48:27 -0300 -X-Failed-Recipients: andrepardo@hotmail.com +X-Failed-Recipients: andrepardo@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - andrepardo@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx4.hotmail.com [65.54.244.232]: 550 Requested action not taken: + andrepardo@example.com + SMTP error from remote mail server after RCPT TO:: + host mx4.example.com [65.54.244.232]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBE-0003hJ-Mz - for andrepardo@hotmail.com; Mon, 30 Oct 2006 15:48:16 -0300 -To: andrepardo@hotmail.com + for andrepardo@example.com; Mon, 30 Oct 2006 15:48:16 -0300 +To: andrepardo@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:16 -0300 Date: Mon, 30 Oct 2006 15:48:16 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <1a3eee05847c6e77b2da19fa63f51498@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/26.eml b/eml/26.eml index 0ef67c6..52027f4 100644 --- a/eml/26.eml +++ b/eml/26.eml @@ -18,7 +18,7 @@ Subject: failure notice (postino11.prima.com.ar) Su mensaje no pudo ser entregado - Sua mensagem nao pode ser enviada - Your message could not be delivered. -: +: Mailbox quota usage exceeded. Espacio en casilla de mail agotado. --- Mensaje original adjunto. @@ -33,15 +33,15 @@ Received: from unknown (HELO ar2.outmailing.net) (200.68.65.111) Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecBG-0003hg-IF - for andres_ferrero@ciudad.com.ar; Mon, 30 Oct 2006 15:48:18 -0300 -To: andres_ferrero@ciudad.com.ar + for andres_ferrero@example.com; Mon, 30 Oct 2006 15:48:18 -0300 +To: andres_ferrero@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:48:18 -0300 Date: Mon, 30 Oct 2006 15:48:18 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <8b4ded0ce2ffb4f06b93347f80b9e5ff@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -50,7 +50,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - + 26- Andrés Rodríguez (jazmitan@wmega.es)28- Rosa Gómez (secretaria@dnmargentina.org)

28- Dana Pelozo (danalucky_90@hotmail.com)
+FONT-FAMILY: Arial">28- Dana Pelozo (danalucky_90@example.com)
29- Viviana Pelozo (vivi2910@hotmail.com)
+FONT-FAMILY: Arial">29- Viviana Pelozo (vivi2910@example.com)
30- Teresa Rodríguez (amaroyteresa@hotmail.com)
+FONT-FAMILY: Arial">30- Teresa Rodríguez (amaroyteresa@example.com)
 
Esto es una síntesis de la @@ -293,7 +293,7 @@ href="mailto:claudio@coquet.f9.co.uk">
height="1" border="0"> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/3.eml b/eml/3.eml index 2c603b6..6e9ca36 100644 --- a/eml/3.eml +++ b/eml/3.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:50:51 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecDi-00044n-MT for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:50:50 -0300 -X-Failed-Recipients: araceliceleste@hotmail.com +X-Failed-Recipients: araceliceleste@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - araceliceleste@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx4.hotmail.com [65.54.245.104]: 550 Requested action not taken: + araceliceleste@example.com + SMTP error from remote mail server after RCPT TO:: + host mx4.example.com [65.54.245.104]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecDa-00043t-Va - for araceliceleste@hotmail.com; Mon, 30 Oct 2006 15:50:43 -0300 -To: araceliceleste@hotmail.com + for araceliceleste@example.com; Mon, 30 Oct 2006 15:50:43 -0300 +To: araceliceleste@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:50:42 -0300 Date: Mon, 30 Oct 2006 15:50:42 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/30.eml b/eml/30.eml index 66ee965..81f9580 100644 --- a/eml/30.eml +++ b/eml/30.eml @@ -18,7 +18,7 @@ Subject: failure notice (postino7.prima.com.ar) Su mensaje no pudo ser entregado - Sua mensagem nao pode ser enviada - Your message could not be delivered. -: +: Mailbox quota usage exceeded. Espacio en casilla de mail agotado. --- Mensaje original adjunto. @@ -33,8 +33,8 @@ Received: from unknown (HELO ar2.outmailing.net) (200.68.65.111) Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebrC-0002ka-OA - for rodatri@ciudad.com.ar; Mon, 30 Oct 2006 15:27:35 -0300 -To: rodatri@ciudad.com.ar + for rodatri@example.com; Mon, 30 Oct 2006 15:27:35 -0300 +To: rodatri@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); diff --git a/eml/31.eml b/eml/31.eml index efba24b..5983aeb 100644 --- a/eml/31.eml +++ b/eml/31.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:38:36 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gec1s-0003VJ-4A for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:38:36 -0300 -X-Failed-Recipients: solperleov@hotmail.com +X-Failed-Recipients: solperleov@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - solperleov@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx4.hotmail.com [65.54.244.104]: 550 Requested action not taken: + solperleov@example.com + SMTP error from remote mail server after RCPT TO:: + host mx4.example.com [65.54.244.104]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,8 +28,8 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gec0r-0003QQ-7j - for solperleov@hotmail.com; Mon, 30 Oct 2006 15:37:33 -0300 -To: solperleov@hotmail.com + for solperleov@example.com; Mon, 30 Oct 2006 15:37:33 -0300 +To: solperleov@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); @@ -710,7 +710,7 @@ border="0"> --b1_689baba236404c93be1ed18951dc4a49-- -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/33.eml b/eml/33.eml index b76901a..e16f5dc 100644 --- a/eml/33.eml +++ b/eml/33.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:38:36 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gec1r-0003VC-T2 for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:38:35 -0300 -X-Failed-Recipients: soniabeaton99@hotmail.com +X-Failed-Recipients: soniabeaton99@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - soniabeaton99@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx4.hotmail.com [65.54.244.104]: 550 Requested action not taken: + soniabeaton99@example.com + SMTP error from remote mail server after RCPT TO:: + host mx4.example.com [65.54.244.104]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,8 +28,8 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gec0y-0003RF-DU - for soniabeaton99@hotmail.com; Mon, 30 Oct 2006 15:37:41 -0300 -To: soniabeaton99@hotmail.com + for soniabeaton99@example.com; Mon, 30 Oct 2006 15:37:41 -0300 +To: soniabeaton99@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); @@ -710,7 +710,7 @@ border="0"> --b1_10df8f1c571370a288511518aa25c4ef-- -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/35.eml b/eml/35.eml index 391e27a..791add6 100644 --- a/eml/35.eml +++ b/eml/35.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:37:01 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gec0J-0003NY-Ex for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:37:00 -0300 -X-Failed-Recipients: smaranca@hotmail.com +X-Failed-Recipients: smaranca@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - smaranca@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx4.hotmail.com [65.54.244.104]: 550 Requested action not taken: + smaranca@example.com + SMTP error from remote mail server after RCPT TO:: + host mx4.example.com [65.54.244.104]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,8 +28,8 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gec0F-0003NA-BQ - for smaranca@hotmail.com; Mon, 30 Oct 2006 15:36:55 -0300 -To: smaranca@hotmail.com + for smaranca@example.com; Mon, 30 Oct 2006 15:36:55 -0300 +To: smaranca@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); @@ -710,7 +710,7 @@ border="0"> --b1_8e1e8023414ef66b4da63a79f2edd9e0-- -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/37.eml b/eml/37.eml index 663d8e7..663cdf0 100644 --- a/eml/37.eml +++ b/eml/37.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:35:34 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gebyw-0003Ga-1S for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:35:34 -0300 -X-Failed-Recipients: silvanasimkin@hotmail.com +X-Failed-Recipients: silvanasimkin@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - silvanasimkin@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.40]: 550 Requested action not taken: + silvanasimkin@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.40]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,8 +28,8 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gebyt-0003GV-0y - for silvanasimkin@hotmail.com; Mon, 30 Oct 2006 15:35:31 -0300 -To: silvanasimkin@hotmail.com + for silvanasimkin@example.com; Mon, 30 Oct 2006 15:35:31 -0300 +To: silvanasimkin@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); @@ -710,7 +710,7 @@ border="0"> --b1_29d19fd8ce3c39b93d834c840336b983-- -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/39.eml b/eml/39.eml index 5224158..c8ccbe5 100644 --- a/eml/39.eml +++ b/eml/39.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:35:17 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gebye-0003FM-7z for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:35:16 -0300 -X-Failed-Recipients: silchal@hotmail.com +X-Failed-Recipients: silchal@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - silchal@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.40]: 550 Requested action not taken: + silchal@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.40]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,8 +28,8 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebyR-0003Eg-Qp - for silchal@hotmail.com; Mon, 30 Oct 2006 15:35:06 -0300 -To: silchal@hotmail.com + for silchal@example.com; Mon, 30 Oct 2006 15:35:06 -0300 +To: silchal@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); @@ -710,7 +710,7 @@ border="0"> --b1_c5484fc459e38837c2abcd31624ee8c3-- -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/4.eml b/eml/4.eml index 279731f..23ea4c6 100644 --- a/eml/4.eml +++ b/eml/4.eml @@ -41,7 +41,7 @@ Received: from mailer Mon, 30 Oct 2006 15:50:42 -0300 Date: Mon, 30 Oct 2006 15:50:42 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <1672dbd6d834b4841b46e13f8268ea18@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -50,7 +50,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - + : +: Mailbox quota usage exceeded. Espacio en casilla de mail agotado. --- Mensaje original adjunto. @@ -33,8 +33,8 @@ Received: from unknown (HELO ar2.outmailing.net) (200.68.65.111) Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gebs5-0002pN-B9 - for rominamontivero@ciudad.com.ar; Mon, 30 Oct 2006 15:28:29 -0300 -To: rominamontivero@ciudad.com.ar + for rominamontivero@example.com; Mon, 30 Oct 2006 15:28:29 -0300 +To: rominamontivero@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); diff --git a/eml/48.eml b/eml/48.eml index e891dab..cccff47 100644 --- a/eml/48.eml +++ b/eml/48.eml @@ -18,7 +18,7 @@ Subject: failure notice (postino9.prima.com.ar) Su mensaje no pudo ser entregado - Sua mensagem nao pode ser enviada - Your message could not be delivered. -: +: Esta casilla ha expirado por falta de uso. --- Mensaje original adjunto. @@ -33,8 +33,8 @@ Received: from unknown (HELO ar2.outmailing.net) (200.68.65.111) Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gebpb-0002e2-Rw - for qmi@ciudad.com.ar; Mon, 30 Oct 2006 15:25:56 -0300 -To: qmi@ciudad.com.ar + for qmi@example.com; Mon, 30 Oct 2006 15:25:56 -0300 +To: qmi@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); diff --git a/eml/49.eml b/eml/49.eml index c81ec0a..967e066 100644 --- a/eml/49.eml +++ b/eml/49.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:30:41 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GebuC-00030a-Ko for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:30:41 -0300 -X-Failed-Recipients: andrea77f@hotmail.com +X-Failed-Recipients: andrea77f@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - andrea77f@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx1.hotmail.com [65.54.244.136]: 550 Requested action not taken: + andrea77f@example.com + SMTP error from remote mail server after RCPT TO:: + host mx1.example.com [65.54.244.136]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebgX-0001UZ-6F - for andrea77f@hotmail.com; Mon, 30 Oct 2006 15:16:33 -0300 -To: andrea77f@hotmail.com + for andrea77f@example.com; Mon, 30 Oct 2006 15:16:33 -0300 +To: andrea77f@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:16:33 -0300 Date: Mon, 30 Oct 2006 15:16:33 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <0172c50e9dfce460dd182e44aff322a1@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/5.eml b/eml/5.eml index 757c3c6..5943360 100644 --- a/eml/5.eml +++ b/eml/5.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:50:25 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecDI-00041t-ME for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:50:24 -0300 -X-Failed-Recipients: anto_2302@hotmail.com +X-Failed-Recipients: anto_2302@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - anto_2302@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.245.40]: 550 Requested action not taken: + anto_2302@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.245.40]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecCo-0003xi-Jr - for anto_2302@hotmail.com; Mon, 30 Oct 2006 15:49:54 -0300 -To: anto_2302@hotmail.com + for anto_2302@example.com; Mon, 30 Oct 2006 15:49:54 -0300 +To: anto_2302@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:49:54 -0300 Date: Mon, 30 Oct 2006 15:49:54 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/50.eml b/eml/50.eml index 8c78ad5..ba2432f 100644 --- a/eml/50.eml +++ b/eml/50.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:30:38 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gebu7-000302-Q2 for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:30:37 -0300 -X-Failed-Recipients: sabrinablanco05@hotmail.com +X-Failed-Recipients: sabrinablanco05@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - sabrinablanco05@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx1.hotmail.com [65.54.244.136]: 550 Requested action not taken: + sabrinablanco05@example.com + SMTP error from remote mail server after RCPT TO:: + host mx1.example.com [65.54.244.136]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,8 +28,8 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gebta-0002yU-KH - for sabrinablanco05@hotmail.com; Mon, 30 Oct 2006 15:30:07 -0300 -To: sabrinablanco05@hotmail.com + for sabrinablanco05@example.com; Mon, 30 Oct 2006 15:30:07 -0300 +To: sabrinablanco05@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); @@ -710,7 +710,7 @@ border="0"> --b1_48426c206f52a2f6893ec7886db219c6-- -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/51.eml b/eml/51.eml index 758ab26..b00bbfe 100644 --- a/eml/51.eml +++ b/eml/51.eml @@ -1,20 +1,20 @@ Return-path: <> Envelope-to: ar1@ar1.outmailing.com Delivery-date: Mon, 30 Oct 2006 15:30:20 -0300 -Received: from bay0-omc3-s27.bay0.hotmail.com ([65.54.246.227]) +Received: from bay0-omc3-s27.bay0.example.com ([65.54.246.227]) by ar2.outmailing.net with esmtp (Exim 4.60) id 1Gebtq-0002yp-2w for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:30:19 -0300 -Received: from bay0-mc5-f8.bay0.hotmail.com ([65.54.244.144]) by bay0-omc3-s27.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.1830); +Received: from bay0-mc5-f8.bay0.example.com ([65.54.244.144]) by bay0-omc3-s27.bay0.example.com with Microsoft SMTPSVC(6.0.3790.1830); Mon, 30 Oct 2006 10:33:00 -0800 -From: postmaster@hotmail.com +From: postmaster@example.com To: ar1@ar1.outmailing.com Date: Mon, 30 Oct 2006 10:32:59 -0800 MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="9B095B5ADSN=_01C6F919D082E258000716DCbay0?mc5?f8.bay0" X-DSNContext: 7ce717b1 - 1196 - 00000002 - 00000000 -Message-ID: +Message-ID: Subject: Delivery Status Notification (Failure) X-OriginalArrivalTime: 30 Oct 2006 18:33:00.0629 (UTC) FILETIME=[D4051050:01C6FC51] @@ -25,13 +25,13 @@ This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. - psd_ami@hotmail.com + psd_ami@example.com -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com @@ -40,11 +40,11 @@ http://www.nod32.com --9B095B5ADSN=_01C6F919D082E258000716DCbay0?mc5?f8.bay0 Content-Type: message/delivery-status -Reporting-MTA: dns;bay0-mc5-f8.bay0.hotmail.com +Reporting-MTA: dns;bay0-mc5-f8.bay0.example.com Received-From-MTA: dns;ar2.outmailing.net Arrival-Date: Mon, 30 Oct 2006 10:32:51 -0800 -Final-Recipient: rfc822;psd_ami@hotmail.com +Final-Recipient: rfc822;psd_ami@example.com Action: failed Status: 5.2.2 Diagnostic-Code: smtp;552 5.2.2 This message is larger than the current system limit or the recipient's mailbox is full. Create a shorter message body or remove attachments and try sending it again. @@ -52,13 +52,13 @@ Diagnostic-Code: smtp;552 5.2.2 This message is larger than the current system l --9B095B5ADSN=_01C6F919D082E258000716DCbay0?mc5?f8.bay0 Content-Type: message/rfc822 -Received: from ar2.outmailing.net ([200.68.65.111]) by bay0-mc5-f8.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.2444); +Received: from ar2.outmailing.net ([200.68.65.111]) by bay0-mc5-f8.bay0.example.com with Microsoft SMTPSVC(6.0.3790.2444); Mon, 30 Oct 2006 10:32:51 -0800 Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebpI-0002d7-2x - for psd_ami@hotmail.com; Mon, 30 Oct 2006 15:25:36 -0300 -To: psd_ami@hotmail.com + for psd_ami@example.com; Mon, 30 Oct 2006 15:25:36 -0300 +To: psd_ami@example.com Subject: LAST VACANCIES!!! Received: from mailer by ar1.outmailing.com with HTTP (Mail); diff --git a/eml/53.eml b/eml/53.eml index b9e5f43..962715a 100644 --- a/eml/53.eml +++ b/eml/53.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:13:53 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gebdw-0001GR-U6 for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:13:53 -0300 -X-Failed-Recipients: anacheta_7@hotmail.com +X-Failed-Recipients: anacheta_7@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - anacheta_7@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.40]: 550 Requested action not taken: + anacheta_7@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.40]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gebdt-0001Fp-Cc - for anacheta_7@hotmail.com; Mon, 30 Oct 2006 15:13:49 -0300 -To: anacheta_7@hotmail.com + for anacheta_7@example.com; Mon, 30 Oct 2006 15:13:49 -0300 +To: anacheta_7@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:13:49 -0300 Date: Mon, 30 Oct 2006 15:13:49 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <2ba4619941741e066d0d54b3c662e934@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/54.eml b/eml/54.eml index 71a3034..f32abca 100644 --- a/eml/54.eml +++ b/eml/54.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:13:51 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gebdu-0001G8-Rm for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:13:50 -0300 -X-Failed-Recipients: ana13_13@hotmail.com +X-Failed-Recipients: ana13_13@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - ana13_13@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.40]: 550 Requested action not taken: + ana13_13@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.40]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gebdg-0001EP-2D - for ana13_13@hotmail.com; Mon, 30 Oct 2006 15:13:36 -0300 -To: ana13_13@hotmail.com + for ana13_13@example.com; Mon, 30 Oct 2006 15:13:36 -0300 +To: ana13_13@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:13:36 -0300 Date: Mon, 30 Oct 2006 15:13:36 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <1e5dd215bf2baaa11465eae6a0552cff@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/55.eml b/eml/55.eml index ba8a058..fdad837 100644 --- a/eml/55.eml +++ b/eml/55.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:13:47 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gebdo-0001FN-OG for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:13:45 -0300 -X-Failed-Recipients: anabalbuena@hotmail.com +X-Failed-Recipients: anabalbuena@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - anabalbuena@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.40]: 550 Requested action not taken: + anabalbuena@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.40]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1Gebdg-0001ES-5X - for anabalbuena@hotmail.com; Mon, 30 Oct 2006 15:13:36 -0300 -To: anabalbuena@hotmail.com + for anabalbuena@example.com; Mon, 30 Oct 2006 15:13:36 -0300 +To: anabalbuena@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:13:36 -0300 Date: Mon, 30 Oct 2006 15:13:36 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <540673d2bf7570769192ce6456d1e721@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/56.eml b/eml/56.eml index 8b185d5..e4d6312 100644 --- a/eml/56.eml +++ b/eml/56.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:13:32 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1Gebdc-0001Dw-9A for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:13:32 -0300 -X-Failed-Recipients: an_mdq@hotmail.com +X-Failed-Recipients: an_mdq@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - an_mdq@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.168]: 550 Requested action not taken: + an_mdq@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.168]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebdX-0001DN-6K - for an_mdq@hotmail.com; Mon, 30 Oct 2006 15:13:27 -0300 -To: an_mdq@hotmail.com + for an_mdq@example.com; Mon, 30 Oct 2006 15:13:27 -0300 +To: an_mdq@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:13:27 -0300 Date: Mon, 30 Oct 2006 15:13:27 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <845fb6eb1406c6d140ad17f44d6c9045@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/57.eml b/eml/57.eml index e843cae..0c68c07 100644 --- a/eml/57.eml +++ b/eml/57.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:13:27 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GebdV-0001DD-BS for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:13:25 -0300 -X-Failed-Recipients: amoroculto_01@hotmail.com +X-Failed-Recipients: amoroculto_01@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - amoroculto_01@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.72]: 550 Requested action not taken: + amoroculto_01@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.72]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebdO-0001Ca-Ad - for amoroculto_01@hotmail.com; Mon, 30 Oct 2006 15:13:18 -0300 -To: amoroculto_01@hotmail.com + for amoroculto_01@example.com; Mon, 30 Oct 2006 15:13:18 -0300 +To: amoroculto_01@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:13:18 -0300 Date: Mon, 30 Oct 2006 15:13:18 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <59b155b89d21dd405836b76981398576@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/58.eml b/eml/58.eml index cc59e02..7b5a2ee 100644 --- a/eml/58.eml +++ b/eml/58.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:13:17 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GebdM-0001CO-Tw for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:13:17 -0300 -X-Failed-Recipients: aminto1@hotmail.com +X-Failed-Recipients: aminto1@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - aminto1@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx2.hotmail.com [65.54.244.40]: 550 Requested action not taken: + aminto1@example.com + SMTP error from remote mail server after RCPT TO:: + host mx2.example.com [65.54.244.40]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebdJ-0001By-SQ - for aminto1@hotmail.com; Mon, 30 Oct 2006 15:13:14 -0300 -To: aminto1@hotmail.com + for aminto1@example.com; Mon, 30 Oct 2006 15:13:14 -0300 +To: aminto1@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:13:13 -0300 Date: Mon, 30 Oct 2006 15:13:13 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <415251e31f82400974f048bb1e494251@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/59.eml b/eml/59.eml index a8b5fc9..34ff51a 100644 --- a/eml/59.eml +++ b/eml/59.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:13:17 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GebdM-0001CH-9f for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:13:16 -0300 -X-Failed-Recipients: aminna_caa@hotmail.com +X-Failed-Recipients: aminna_caa@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - aminna_caa@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.72]: 550 Requested action not taken: + aminna_caa@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.72]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GebdI-0001Bp-2a - for aminna_caa@hotmail.com; Mon, 30 Oct 2006 15:13:12 -0300 -To: aminna_caa@hotmail.com + for aminna_caa@example.com; Mon, 30 Oct 2006 15:13:12 -0300 +To: aminna_caa@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:13:12 -0300 Date: Mon, 30 Oct 2006 15:13:12 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/6.eml b/eml/6.eml index d4d3c90..9809c3d 100644 --- a/eml/6.eml +++ b/eml/6.eml @@ -19,7 +19,7 @@ recipients. This is a permanent error. The following address(es) failed: annyevalente@ig.com.br SMTP error from remote mail server after RCPT TO:: - host mx.ig.com.br [200.226.132.20]: 554 Usuário Inválido ou Inexistente. Sorry, no mailbox here by that name. (#5.2.1) + host mx.ig.com.br [200.226.132.20]: 554 Usu�rio Inv�lido ou Inexistente. Sorry, no mailbox here by that name. (#5.2.1) ------ This is a copy of the message, including all the headers. ------ @@ -35,7 +35,7 @@ Received: from mailer Mon, 30 Oct 2006 15:49:49 -0300 Date: Mon, 30 Oct 2006 15:49:49 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -44,7 +44,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/60.eml b/eml/60.eml index 1b383da..29dfdba 100644 --- a/eml/60.eml +++ b/eml/60.eml @@ -36,7 +36,7 @@ Received: from mailer Mon, 30 Oct 2006 15:13:04 -0300 Date: Mon, 30 Oct 2006 15:13:04 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <9c5ac5748abf059e45010035cc0b8c82@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/7.eml b/eml/7.eml index 3435e71..eafa444 100644 --- a/eml/7.eml +++ b/eml/7.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:50:18 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecDA-00040l-Of for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:50:16 -0300 -X-Failed-Recipients: anto_mdq@hotmail.com +X-Failed-Recipients: anto_mdq@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - anto_mdq@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + anto_mdq@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecCs-0003y1-22 - for anto_mdq@hotmail.com; Mon, 30 Oct 2006 15:49:58 -0300 -To: anto_mdq@hotmail.com + for anto_mdq@example.com; Mon, 30 Oct 2006 15:49:58 -0300 +To: anto_mdq@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:49:58 -0300 Date: Mon, 30 Oct 2006 15:49:58 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <2b07353e6c2be925b8c45b5e8074e241@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/8.eml b/eml/8.eml index 5ff663b..d9fb980 100644 --- a/eml/8.eml +++ b/eml/8.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:50:16 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecDA-00040c-FR for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:50:16 -0300 -X-Failed-Recipients: anvinicky@hotmail.com +X-Failed-Recipients: anvinicky@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - anvinicky@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + anvinicky@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecD8-000402-87 - for anvinicky@hotmail.com; Mon, 30 Oct 2006 15:50:14 -0300 -To: anvinicky@hotmail.com + for anvinicky@example.com; Mon, 30 Oct 2006 15:50:14 -0300 +To: anvinicky@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:50:14 -0300 Date: Mon, 30 Oct 2006 15:50:14 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: <14faab2e98f74c296159a88428ce538d@ar1.outmailing.com> X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/9.eml b/eml/9.eml index 5fdb205..8ccd4ad 100644 --- a/eml/9.eml +++ b/eml/9.eml @@ -4,7 +4,7 @@ Delivery-date: Mon, 30 Oct 2006 15:50:13 -0300 Received: from mail by ar2.outmailing.net with local (Exim 4.60) id 1GecD4-0003zg-MA for ar1@ar1.outmailing.com; Mon, 30 Oct 2006 15:50:11 -0300 -X-Failed-Recipients: antogalvez@hotmail.com +X-Failed-Recipients: antogalvez@example.com Auto-Submitted: auto-replied From: Mail Delivery System To: ar1@ar1.outmailing.com @@ -17,9 +17,9 @@ This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: - antogalvez@hotmail.com - SMTP error from remote mail server after RCPT TO:: - host mx3.hotmail.com [65.54.244.200]: 550 Requested action not taken: + antogalvez@example.com + SMTP error from remote mail server after RCPT TO:: + host mx3.example.com [65.54.244.200]: 550 Requested action not taken: mailbox unavailable ------ This is a copy of the message, including all the headers. ------ @@ -28,15 +28,15 @@ Return-path: Received: from apache by ar2.outmailing.net with local (Exim 4.60) (envelope-from ) id 1GecCu-0003yP-Ce - for antogalvez@hotmail.com; Mon, 30 Oct 2006 15:50:00 -0300 -To: antogalvez@hotmail.com + for antogalvez@example.com; Mon, 30 Oct 2006 15:50:00 -0300 +To: antogalvez@example.com Subject: Eventos de La semana Received: from mailer by ar1.outmailing.com with HTTP (Mail); Mon, 30 Oct 2006 15:50:00 -0300 Date: Mon, 30 Oct 2006 15:50:00 -0300 From: Green Land Irish Pub -Reply-to: fedecheme@hotmail.com +Reply-to: fedecheme@example.com Message-ID: X-Priority: 3 X-Mailer: AC Mailer @@ -45,7 +45,7 @@ MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" - +
src="http://ar1.outmailing.com/admin/images/dattadream/pie.gif" alt="" /> -__________ Información de NOD32, revisión 1.1856 (20061106) __________ +__________ Informaci�n de NOD32, revisi�n 1.1856 (20061106) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com diff --git a/eml/arf6.txt b/eml/arf6.txt index db03078..7213e8b 100644 --- a/eml/arf6.txt +++ b/eml/arf6.txt @@ -1,4 +1,4 @@ -Return-Path: staff@hotmail.com +Return-Path: staff@example.com Received: from internal.ganeshaspeaks.com (LHLO internal.ganeshaspeaks.com) (59.162.116.97) by internal.ganeshaspeaks.com with LMTP; Sat, 20 Feb 2010 11:10:54 +0530 (IST) @@ -28,12 +28,12 @@ Delivered-To: abuse@ganeshaspeaks.com Received: (qmail 18473 invoked by uid 502); 20 Feb 2010 05:25:13 -0000 Received: by simscan 1.4.0 ppid: 18463, pid: 18465, t: 0.1741s scanners: attach: 1.4.0 -Received: from unknown (HELO bay0-omc2-s1.bay0.hotmail.com) (65.54.190.76) +Received: from unknown (HELO bay0-omc2-s1.bay0.example.com) (65.54.190.76) by mail.ganeshaspeaks.com with SMTP; 20 Feb 2010 05:25:12 -0000 -Received-SPF: pass (mail.ganeshaspeaks.com: SPF record at spf-a.hotmail.com designates 65.54.190.76 as permitted sender) -Received: from BAY0-JMR-DB02 ([65.54.190.125]) by bay0-omc2-s1.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); +Received-SPF: pass (mail.ganeshaspeaks.com: SPF record at spf-a.example.com designates 65.54.190.76 as permitted sender) +Received: from BAY0-JMR-DB02 ([65.54.190.125]) by bay0-omc2-s1.bay0.example.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 19 Feb 2010 21:25:12 -0800 -X-HmXmrOriginalRecipient: masterblastervarun@hotmail.com +X-HmXmrOriginalRecipient: masterblastervarun@example.com X-Reporter-IP: 222.129.240.155 X-Message-Delivery: Vj0xLjE7dXM9MDtsPTA7YT0wO0Q9MjtTQ0w9NA== X-Message-Status: n:0 @@ -41,11 +41,11 @@ X-SID-PRA: contact@promomail.ganeshaspeaks.com X-SID-Result: Pass X-AUTH-Result: PASS X-Message-Info: 6sSXyD95QpXzBd+BwlL9N8+0QFs0qR/5VJbs1QJJ7xgVpOwv+1x64rOZtx9fnQbvuyJvNWyeL0uiHYrHm5RnPni1gyWqUWE5 -Received: from promomail.ganeshaspeaks.com ([72.55.174.206]) by bay0-mc3-f8.Bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); +Received: from promomail.ganeshaspeaks.com ([72.55.174.206]) by bay0-mc3-f8.Bay0.example.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 19 Feb 2010 19:58:37 -0800 Received: from massmail.ganeshaspeaks.com (unknown [10.1.209.5]) by promomail.ganeshaspeaks.com (Postfix) with ESMTP id 6E09BDE01E2 - for ; Fri, 19 Feb 2010 22:58:37 -0500 (EST) + for ; Fri, 19 Feb 2010 22:58:37 -0500 (EST) X-DKIM: Sendmail DKIM Filter v2.8.3 promomail.ganeshaspeaks.com 6E09BDE01E2 DKIM-Signature: v=1; a=rsa-sha1; c=simple/simple; d=promomail.ganeshaspeaks.com; s=selector1; t=1266638317; @@ -61,7 +61,7 @@ DomainKey-Signature: a=rsa-sha1; s=selector1; d=promomail.ganeshaspeaks.com; c=s KqK4mSczQ9gTe1ED6jS/lvgaGh59bx2jVu0sNAM= Recieved: Date: Fri, 19 Feb 2010 22:58:37 -0500 -To: masterblastervarun@hotmail.com +To: masterblastervarun@example.com From: contact@promomail.ganeshaspeaks.com Subject: Now, your Finance report at an easier rate Message-ID: <7d0005d5ddea9b8c2dd9ec1a35b2d5d4@localhost.localdomain> @@ -69,7 +69,7 @@ X-Priority: 3 X-Mailer: PHPMailer [version 1.73] X-Mailer: phplist v2.10.10 X-MessageID: 49 -X-ListMember: masterblastervarun@hotmail.com +X-ListMember: masterblastervarun@example.com Precedence: bulk Errors-To: bounces3@promomail.ganeshaspeaks.com MIME-Version: 1.0 diff --git a/eml/exchange2.eml b/eml/exchange2.eml index 55152a1..7d82c93 100644 --- a/eml/exchange2.eml +++ b/eml/exchange2.eml @@ -42,7 +42,7 @@ This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. - inger.lise.hole@adecco.no + inger.lise.hole@example.com @@ -54,8 +54,8 @@ Reporting-MTA: dns;meintfr02052.wwit.adecco.net Received-From-MTA: dns;smtp091.aits.fr Arrival-Date: Sun, 5 Apr 2009 20:43:17 +0200 -Original-Recipient: rfc822;inger.lise.hole@adecco.no -Final-Recipient: rfc822;inger.lise.hole@adecco.no +Original-Recipient: rfc822;inger.lise.hole@example.com +Final-Recipient: rfc822;inger.lise.hole@example.com Action: failed Status: 5.1.1 @@ -66,17 +66,17 @@ Received: from smtp091.aits.fr ([10.100.109.111]) by meintfr02052.wwit.adecco.ne Sun, 5 Apr 2009 20:43:17 +0200 Received: from localhost (unknown [127.0.0.1]) by smtp091.aits.fr (Postfix) with ESMTP id 7C0BF9F30B3 - for ; Sun, 5 Apr 2009 20:42:33 +0200 (CEST) + for ; Sun, 5 Apr 2009 20:42:33 +0200 (CEST) X-Virus-Scanned: amavisd-new at lce.adecco.net Received: from smtp091.aits.fr ([127.0.0.1]) by localhost (lx001091.lce.adecco.net [127.0.0.1]) (amavisd-new, port 10024) - with ESMTP id esLE2xMUjKhO for ; + with ESMTP id esLE2xMUjKhO for ; Sun, 5 Apr 2009 20:42:31 +0200 (CEST) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.154]) by smtp091.aits.fr (Postfix) with ESMTP id AA6F19F30B4 - for ; Sun, 5 Apr 2009 20:42:03 +0200 (CEST) + for ; Sun, 5 Apr 2009 20:42:03 +0200 (CEST) Received: by fg-out-1718.google.com with SMTP id e12so702940fga.17 - for ; Sun, 05 Apr 2009 11:42:58 -0700 (PDT) + for ; Sun, 05 Apr 2009 11:42:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject @@ -98,7 +98,7 @@ Date: Sun, 5 Apr 2009 20:42:58 +0200 Message-ID: <63267c0f0904051142s4a841b18qb1c702a94a3257be@mail.gmail.com> Subject: This will bounce From: "Gmail Account" -To: Petter.Gulbrandsen@no.compuware.com, inger.lise.hole@adecco.no +To: Petter.Gulbrandsen@example.com, inger.lise.hole@example.com Content-Type: multipart/alternative; boundary=000e0cd247509e11b20466d326c9 Return-Path: account@gmail.com X-OriginalArrivalTime: 05 Apr 2009 18:43:17.0833 (UTC) FILETIME=[62B8EB90:01C9B61E] diff --git a/eml/exchange3.eml b/eml/exchange3.eml index f6f97ee..1da393d 100644 --- a/eml/exchange3.eml +++ b/eml/exchange3.eml @@ -34,7 +34,7 @@ This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. - Petter.Gulbrandsen@no.compuware.com + Petter.Gulbrandsen@example.com @@ -46,7 +46,7 @@ Reporting-MTA: dns;emea-ams-ex009.emea.cpwr.corp Received-From-MTA: dns;mx4.emea.compuware.com Arrival-Date: Sun, 5 Apr 2009 20:51:12 +0200 -Final-Recipient: rfc822;Petter.Gulbrandsen@no.compuware.com +Final-Recipient: rfc822;Petter.Gulbrandsen@example.com Action: failed Status: 5.1.1 @@ -57,7 +57,7 @@ Received: from mx4.emea.compuware.com ([172.16.16.87]) by emea-ams-ex009.emea.cp Sun, 5 Apr 2009 20:51:12 +0200 Received: from mx4.emea.compuware.com (localhost.emea.cpwr.corp [127.0.0.1]) by int-paperbin.emea.cpwr.corp (Postfix) with ESMTP id 8B1119003A - for ; Sun, 5 Apr 2009 18:51:09 +0000 (UTC) + for ; Sun, 5 Apr 2009 18:51:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.1.7-cpwr (2006-10-05) on paperbin.emea.cpwr.corp X-Spam-Level: * @@ -69,9 +69,9 @@ X-Spam-Report: Received-SPF: pass (mx4.emea.compuware.com: domain of gmail.com designates 72.14.220.154 as permitted sender) client-ip=72.14.220.154; envelope-from=account@gmail.com; helo=fg-out-1718.google.com; Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.154]) by mx4.emea.compuware.com (Postfix) with ESMTP id 82AC98FEF3 - for ; Sun, 5 Apr 2009 18:51:09 +0000 (UTC) + for ; Sun, 5 Apr 2009 18:51:09 +0000 (UTC) Received: by fg-out-1718.google.com with SMTP id 19so785062fgg.15 - for ; Sun, 05 Apr 2009 11:51:09 -0700 (PDT) + for ; Sun, 05 Apr 2009 11:51:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject @@ -93,7 +93,7 @@ Date: Sun, 5 Apr 2009 20:42:58 +0200 Message-ID: <63267c0f0904051142s4a841b18qb1c702a94a3257be@mail.gmail.com> Subject: This will bounce From: "Gmail Account" -To: Petter.Gulbrandsen@no.compuware.com, inger.lise.hole@adecco.no +To: Petter.Gulbrandsen@example.com, inger.lise.hole@example.com Content-Type: multipart/alternative; boundary=000e0cd247509e11b20466d326c9 Return-Path: account@gmail.com X-OriginalArrivalTime: 05 Apr 2009 18:51:12.0892 (UTC) FILETIME=[7DE12BC0:01C9B61F] diff --git a/eml/fbl-hotmail.txt b/eml/fbl-hotmail.txt index db689a6..a5070fa 100644 --- a/eml/fbl-hotmail.txt +++ b/eml/fbl-hotmail.txt @@ -1,32 +1,32 @@ Received: (qmail 16743 invoked from network); 30 Dec 2010 18:37:33 -0000 Received: from unknown (HELO ourmailserver.com) (10.1.0.252) by ourmailserver.com with SMTP; 30 Dec 2010 18:37:33 -0000 -Received: from bay0-omc2-s15.bay0.hotmail.com ([65.54.190.90]) +Received: from bay0-omc2-s15.bay0.example.com ([65.54.190.90]) by ourmailserver.com with ESMTP; 30 Dec 2010 10:37:17 -0800 -Received: from BAY0-JMR-DB02 ([65.54.190.125]) by bay0-omc2-s15.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); +Received: from BAY0-JMR-DB02 ([65.54.190.125]) by bay0-omc2-s15.bay0.example.com with Microsoft SMTPSVC(6.0.3790.4675); Thu, 30 Dec 2010 10:37:16 -0800 Date: Thu, 30 Dec 10 10:37:16 -0800 -From: staff@hotmail.com +From: staff@example.com Subject: complaint about message from 24.64.1.1 To: fbl-abuse@ourdomain.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="A80427F4-B4F2-4D64-BECA-12CAD20DE5F5" -Return-Path: staff@hotmail.com -Message-ID: +Return-Path: staff@example.com +Message-ID: X-OriginalArrivalTime: 30 Dec 2010 18:37:16.0535 (UTC) FILETIME=[9544B870:01CBA850] --A80427F4-B4F2-4D64-BECA-12CAD20DE5F5 Content-Type: message/rfc822 Content-Disposition: inline -X-HmXmrOriginalRecipient: somerecipient@hotmail.com +X-HmXmrOriginalRecipient: somerecipient@example.com X-Reporter-IP: 96.23.88.208 X-Message-Delivery: Vj0xLjE7dXM9MDtsPTE7YT0xO0Q9MTtTQ0w9MA== X-Message-Status: n X-SID-PRA: Our Domain X-AUTH-Result: NONE X-Message-Info: /Afko6AgMSzYW0lYpZQpJ1fX1hpBS7ZsGpYQz72u0pGUrNVnYB55cCmtxJMioyRUp4kBLVmh5ORjL/cKELk+Un2AYg/2pHDlTSy4Jebte06vpiO+vUgPLA== -Received: from ourdomain.com ([24.64.1.1]) by snt0-mc2-f47.Snt0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); +Received: from ourdomain.com ([24.64.1.1]) by snt0-mc2-f47.Snt0.example.com with Microsoft SMTPSVC(6.0.3790.4675); Thu, 30 Dec 2010 06:50:29 -0800 Received: (qmail 7488 invoked from network); 30 Dec 2010 14:50:29 -0000 Received: from web.local (10.1.0.252) @@ -34,14 +34,14 @@ Received: from web.local (10.1.0.252) Received: from mail pickup service by WEB.local with Microsoft SMTPSVC; Thu, 30 Dec 2010 06:50:29 -0800 From: "Our Domain" -To: "someuser@hotmail.com" +To: "someuser@example.com" Date: Thu, 30 Dec 2010 06:50:29 -0800 Subject: Some Subject Line MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="_=aspNetEmail=_7d2331908aec4efe9b55fe9f27355434" X-Mailer: aspNetEmail ver 2.5.0.0 -X-RCPT-TO: +X-RCPT-TO: MIME-Version: 1.0 Message-ID: X-OriginalArrivalTime: 30 Dec 2010 14:50:29.0339 (UTC) FILETIME=[E6BF62B0:01CBA830] diff --git a/eml/hotmailbounce.txt b/eml/hotmailbounce.txt index ec46715..2ec031a 100644 --- a/eml/hotmailbounce.txt +++ b/eml/hotmailbounce.txt @@ -5,50 +5,50 @@ X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AikHABIeK0xBNr5hkWdsb2JhbACBXYFAj30CjDYVAQECCQsKBxEDH6gnh0k7h0uJBoQzcgSDbIZW X-IronPort-AV: E=Sophos;i="4.53,514,1272870000"; d="scan'208";a="30815619" -Received: from bay0-omc2-s22.bay0.hotmail.com ([65.54.190.97]) +Received: from bay0-omc2-s22.bay0.example.com ([65.54.190.97]) by mailprod.blahblah.com with ESMTP; 30 Jun 2010 10:38:04 -0700 -Received: from BAY0-JMR-DB02 ([65.54.190.125]) by bay0-omc2-s22.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); +Received: from BAY0-JMR-DB02 ([65.54.190.125]) by bay0-omc2-s22.bay0.example.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 30 Jun 2010 10:38:06 -0700 Date: Wed, 30 Jun 10 10:38:06 -0700 -From: staff@hotmail.com +From: staff@example.com Subject: complaint about message from 74.200.17.xxx To: fbl-abuse@blahblah.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="F484BCB3-CE4F-4E2D-9A8E-B18786277C43" -Return-Path: staff@hotmail.com -Message-ID: +Return-Path: staff@example.com +Message-ID: X-OriginalArrivalTime: 30 Jun 2010 17:38:06.0174 (UTC) FILETIME=[FF7E5FE0:01CB187A] --F484BCB3-CE4F-4E2D-9A8E-B18786277C43 Content-Type: message/rfc822 Content-Disposition: inline -X-HmXmrOriginalRecipient: spamreportinguser@hotmail.com +X-HmXmrOriginalRecipient: spamreportinguser@example.com X-Reporter-IP: 98.85.167.31 X-Message-Delivery: Vj0xLjE7dXM9MDtsPTA7YT0wO0Q9MTtTQ0w9MA== X-Message-Status: n:0 X-SID-PRA: Blah Blah X-AUTH-Result: NONE X-Message-Info: JGTYoYF78jGaD9OjFspetK21jb5YJjHBXJxnZUVNN0j7B/bMz45x/Gbn0EO5qRr9wooEUVeb5a3oux+Jz45coW6tHfR0bcKS -Received: from blahblah.com ([12.12.12.12]) by bay0-mc2-f46.Bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); +Received: from blahblah.com ([12.12.12.12]) by bay0-mc2-f46.Bay0.example.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 30 Jun 2010 08:51:03 -0700 Received: (qmail 11630 invoked from network); 30 Jun 2010 15:50:34 -0000 Received: from unknown (HELO mailprod.blahblah.com) (10.1.0.252) by mailprod.blahblah.com with SMTP; 30 Jun 2010 15:50:34 -0000 Received: from mailprod.blahblah.com (unverified [127.0.0.1]) by mailprod.blahblah.com (SurgeMail 3.9e) with ESMTP id 99677464-1773919 - for ; Wed, 30 Jun 2010 08:51:03 -0700 + for ; Wed, 30 Jun 2010 08:51:03 -0700 Return-Path: X-Sender: support@blahblah.com From: "BuildingMaterialsTalk" -To: "spamreportinguser@hotmail.com" +To: "spamreportinguser@example.com" Date: Wed, 30 Jun 2010 08:35:33 -0700 Subject: Some Subject Line MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="_=aspNetEmail=_d1ff02f81150479fa81f301d782b3645" X-Mailer: aspNetEmail ver 2.5.0.0 -X-RCPT-TO: +X-RCPT-TO: X-Web-Domain: www.blahblah.com MIME-Version: 1.0 Message-ID: diff --git a/eml/issue_9_testcase.eml b/eml/issue_9_testcase.eml new file mode 100644 index 0000000..d886b2e --- /dev/null +++ b/eml/issue_9_testcase.eml @@ -0,0 +1,105 @@ +Return-path: <> +Envelope-to: email@domain.domain +Delivery-date: Thu, 20 Mar 2014 12:03:05 +0100 +Received: from mail2.bemta5.messagelabs.com ([195.245.231.131]) + by mailserver.domain.domain with esmtps (TLSv1:AES256-SHA:256) + (Exim 4.73 (FreeBSD)) + id 1WQakY-0006Ke-3E + for email@domain.domain; Thu, 20 Mar 2014 12:03:05 +0100 +Received: from [85.158.136.35:12059] by server-10.bemta-5.messagelabs.com id 57/A5-27081-4EACA235; Thu, 20 Mar 2014 11:03:00 +0000 +X-Msg-Ref: server-16.tower-125.messagelabs.com!1395313183!33967189!1 +X-Originating-IP: [195.245.231.134] +X-StarScan-Received: +X-StarScan-Version: 6.11.1; banners=-,-,- +X-VirusChecked: Checked +Received: (qmail 11713 invoked from network); 20 Mar 2014 10:59:43 -0000 +Received: from mail5.bemta5.messagelabs.com (HELO mail5.bemta5.messagelabs.com) (195.245.231.134) + by server-16.tower-125.messagelabs.com with DHE-RSA-AES256-SHA encrypted SMTP; 20 Mar 2014 10:59:43 -0000 +Received: by server-14.bemta-5.messagelabs.com id DD/21-15696-F1ACA235; Thu, 20 Mar 2014 10:59:43 +0000 +From: Mail Delivery System +To: +Subject: Mail Delivery Failure +Date: Thu, 20 Mar 2014 10:59:43 +0000 +Content-Type: multipart/report; report-type=delivery-status; + boundary="ONHrN715MUZyqWppCw12MuNjL3IsvuuVQXcdmQ==" +X-Exim-Version: 4.73 (build at 17-Jan-2011 14:55:22) +X-Date: 2014-03-20 12:03:05 +X-Connected-IP: 195.245.231.131:39383 +X-Spam-Threshold: 5 +X-Spam-Score: -4.1 +X-Spam-Score-Int: -40 +X-Spam-Bar: ---- +X-Spam-Flag: NO +X-Delivered-To: email@domain.domain +X-Message-Age: 3 + +--ONHrN715MUZyqWppCw12MuNjL3IsvuuVQXcdmQ== +Content-Type: text/plain; charset="UTF-8" +Content-Transfer-Encoding: quoted-printable + +This is the mail delivery agent at messagelabs.com. + +I was unable to deliver your message to the following addresses: + +someone@some.where + +Reason: 550 5.1.1 ... User unknown + +The message subject was: Diabetes Nieuwsbrief maart 2014 +The message date was: Thu, 20 Mar 2014 11:59:43 +0100 +The message identifier was: 4B/21-15696-F1ACA235 +The message reference was: server-9.tower-125.messagelabs.com!1395313182!24= +402582!1 + +Please do not reply to this email as it is sent from an unattended mailbox. +Please visit www.messagelabs.com/support for more details +about this error message and instructions to resolve this issue. + + +--ONHrN715MUZyqWppCw12MuNjL3IsvuuVQXcdmQ== +Content-Type: message/delivery-status + +Arrival-Date: Thu, 20 Mar 2014 10:59:43 +0000 +Reporting-MTA: dns; server-14.bemta-5.messagelabs.com + +Remote-MTA: dns; 194.151.80.130 +Diagnostic-Code: smtp; 550 5.1.1 ... User unknown +Last-Attempt-Date: Thu, 20 Mar 2014 10:59:43 +0000 +Final-Recipient: rfc822; someone@some.where +Status: 5.1.1 +Action: failed + +--ONHrN715MUZyqWppCw12MuNjL3IsvuuVQXcdmQ== +Content-Type: text/rfc822-headers + +Return-Path: +Received: from [85.158.136.35:41051] by server-14.bemta-5.messagelabs.com id 4B/21-15696-F1ACA235; Thu, 20 Mar 2014 10:59:43 +0000 +X-Env-Sender: email@domain.domain +X-Msg-Ref: server-9.tower-125.messagelabs.com!1395313182!24402582!1 +X-Originating-IP: [33.33.33.33] +X-SpamReason: No, hits=0.8 required=7.0 tests=HTML_MESSAGE, + MIME_HTML_MOSTLY,MPART_ALT_DIFF +X-StarScan-Received: +X-StarScan-Version: 6.11.1; banners=-,-,viecuri.nl +X-VirusChecked: Checked +Received: (qmail 4698 invoked from network); 20 Mar 2014 10:59:42 -0000 +Received: from mailserver.domain.domain (HELO mailserver.domain.domain) (33.33.33.33) + by server-9.tower-125.messagelabs.com with DHE-RSA-AES256-SHA encrypted SMTP; 20 Mar 2014 10:59:42 -0000 +Received: from localhost ([127.0.0.1] helo=www.domain.domain) + by mailserver.domain.domain with esmtpa (Exim 4.73 (FreeBSD)) + (envelope-from ) + id 1WQahL-0004m2-FT + for someone@some.where; Thu, 20 Mar 2014 11:59:43 +0100 +MIME-Version: 1.0 +Message-ID: +From: "Domain domain" +Subject: Something 2014 +Content-Type: multipart/alternative; + boundary="=_216b93cd925b7803b4c52bca98a3ee3c" +To: someone@some.where +Date: Thu, 20 Mar 2014 11:59:43 +0100 +X-Date: 2014-03-20 11:59:43 +X-Connected-IP: 127.0.0.1:50595 + + +--ONHrN715MUZyqWppCw12MuNjL3IsvuuVQXcdmQ==-- \ No newline at end of file diff --git a/eml/sendmail-dsn-hdrs-503.eml b/eml/sendmail-dsn-hdrs-503.eml new file mode 100644 index 0000000..029d35a --- /dev/null +++ b/eml/sendmail-dsn-hdrs-503.eml @@ -0,0 +1,71 @@ +From MAILER-DAEMON@example.com Thu Jan 1 18:21:54 2015 +Received: from localhost (localhost) + by example.com (8.14.4/8.14.4) id t01ILsvQ016557; + Thu, 1 Jan 2015 18:21:54 GMT +Date: Thu, 1 Jan 2015 18:21:54 GMT +From: Mail Delivery Subsystem +Message-Id: <201501011821.t01ILsvQ016557@example.com> +To: +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="t01ILsvQ016557.1420136514/example.com" +Subject: Returned mail: see transcript for details +Auto-Submitted: auto-generated (failure) + +This is a MIME-encapsulated message + +--t01ILsvQ016557.1420136514/example.com + +The original message was received at Thu, 1 Jan 2015 18:21:48 GMT +from example.com [127.0.0.1] + + ----- The following addresses had permanent fatal errors ----- + + (reason: 550-Verification failed for ) + + ----- Transcript of session follows ----- +... while talking to example.net.: +>>> DATA +<<< 550-Verification failed for +<<< 550-The mail server could not deliver mail to bouncebacks+mjaxntaxmdewmdawmdawmdq39a66e5b6@example.com. The account or domain may not exist, they may be blacklisted, or missing the proper dns entries. +<<< 550 Sender verify failed +550 5.1.1 ... User unknown +<<< 503-All RCPT commands were rejected with this error: +<<< 503-Sender verify failed +<<< 503 Valid RCPT command must precede DATA + +--t01ILsvQ016557.1420136514/example.com +Content-Type: message/delivery-status + +Original-Envelope-Id: MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6 +Reporting-MTA: dns; example.com +Received-From-MTA: DNS; example.com +Arrival-Date: Thu, 1 Jan 2015 18:21:48 GMT + +Final-Recipient: RFC822; autorespondtest@example.net +Action: failed +Status: 5.1.1 +Remote-MTA: DNS; example.net +Diagnostic-Code: SMTP; 550-Verification failed for +Last-Attempt-Date: Thu, 1 Jan 2015 18:21:54 GMT + +--t01ILsvQ016557.1420136514/example.com +Content-Type: text/rfc822-headers + +Return-Path: +Received: from example.com (example.com [127.0.0.1]) + by example.com (8.14.4/8.14.4) with ESMTP id t01ILkvQ016554 + for ; Thu, 1 Jan 2015 18:21:48 GMT +Received: (from exampleuser@localhost) + by example.com (8.14.4/8.14.4/Submit) id t01ILi0s016553; + Thu, 1 Jan 2015 18:21:44 GMT +Date: Thu, 1 Jan 2015 18:21:44 GMT +Message-Id: <201501011821.t01ILi0s016553@example.com> +X-Authentication-Warning: example.com: exampleuser set sender to bouncebacks+MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6@example.com using -f +To: autorespondtest@example.net +Subject: test subject +X-PHP-Originating-Script: 1004:r.php +From: Example Notifications + +--t01ILsvQ016557.1420136514/example.com-- + diff --git a/eml/sendmail-dsn-hdrs-552-allaboutspam.eml b/eml/sendmail-dsn-hdrs-552-allaboutspam.eml new file mode 100644 index 0000000..5c2f9d0 --- /dev/null +++ b/eml/sendmail-dsn-hdrs-552-allaboutspam.eml @@ -0,0 +1,66 @@ +From MAILER-DAEMON@example.com Thu Jan 1 17:39:39 2015 +Received: from localhost (localhost) + by example.com (8.14.4/8.14.4) id t01HdPBk016316; + Thu, 1 Jan 2015 17:39:39 GMT +Date: Thu, 1 Jan 2015 17:39:39 GMT +From: Mail Delivery Subsystem +Message-Id: <201501011739.t01HdPBk016316@example.com> +To: +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="t01HdPBk016316.1420133979/example.com" +Subject: Returned mail: see transcript for details +Auto-Submitted: auto-generated (failure) + +This is a MIME-encapsulated message + +--t01HdPBk016316.1420133979/example.com + +The original message was received at Thu, 1 Jan 2015 17:34:52 GMT +from example.com [127.0.0.1] + + ----- The following addresses had permanent fatal errors ----- + + (reason: 552-Thanks for using ALLABOUTSPAM.COM Email server test. Your test results are) + + ----- Transcript of session follows ----- +... while talking to mx.allaboutspam.com.: +>>> DATA +<<< 552-Thanks for using ALLABOUTSPAM.COM Email server test. Your test results are +<<< 552 available at http://www.allaboutspam.com/email-server-test-report/?key=xxxxxxxx +554 5.0.0 Service unavailable + +--t01HdPBk016316.1420133979/example.com +Content-Type: message/delivery-status + +Original-Envelope-Id: MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6 +Reporting-MTA: dns; example.com +Arrival-Date: Thu, 1 Jan 2015 17:34:52 GMT + +Final-Recipient: RFC822; test@allaboutspam.com +Action: failed +Status: 5.2.2 +Remote-MTA: DNS; mx.allaboutspam.com +Diagnostic-Code: SMTP; 552-Thanks for using ALLABOUTSPAM.COM Email server test. Your test results are +Last-Attempt-Date: Thu, 1 Jan 2015 17:39:39 GMT + +--t01HdPBk016316.1420133979/example.com +Content-Type: text/rfc822-headers + +Return-Path: +Received: from example.com (example.com [127.0.0.1]) + by example.com (8.14.4/8.14.4) with ESMTP id t01HYpsQ016289 + for ; Thu, 1 Jan 2015 17:34:52 GMT +Received: (from exampleuser@localhost) + by example.com (8.14.4/8.14.4/Submit) id t01HYngQ016288; + Thu, 1 Jan 2015 17:34:49 GMT +Date: Thu, 1 Jan 2015 17:34:49 GMT +Message-Id: <201501011734.t01HYngQ016288@example.com> +X-Authentication-Warning: example.com: exampleuser set sender to bouncebacks+MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6@example.com using -f +To: test@allaboutspam.com +Subject: test subject +X-PHP-Originating-Script: 1004:r.php +From: Example Notifications + +--t01HdPBk016316.1420133979/example.com-- + diff --git a/eml/sendmail-dsn-hdrs-delivered.eml b/eml/sendmail-dsn-hdrs-delivered.eml new file mode 100644 index 0000000..53e9ce8 --- /dev/null +++ b/eml/sendmail-dsn-hdrs-delivered.eml @@ -0,0 +1,62 @@ +From MAILER-DAEMON@example.com Thu Jan 1 17:19:04 2015 +Received: from localhost (localhost) + by example.com (8.14.4/8.14.4) id t01HJ48p012774; + Thu, 1 Jan 2015 17:19:04 GMT +Date: Thu, 1 Jan 2015 17:19:04 GMT +From: Mail Delivery Subsystem +Message-Id: <201501011719.t01HJ48p012774@example.com> +To: +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="t01HJ48p012774.1420132744/example.com" +Subject: Return receipt +Auto-Submitted: auto-generated (return-receipt) + +This is a MIME-encapsulated message + +--t01HJ48p012774.1420132744/example.com + +The original message was received at Thu, 1 Jan 2015 17:18:55 GMT +from example.com [127.0.0.1] + + ----- The following addresses had successful delivery notifications ----- + (relayed to non-DSN-aware mailer) + + ----- Transcript of session follows ----- +... relayed; expect no further notifications + +--t01HJ48p012774.1420132744/example.com +Content-Type: message/delivery-status + +Original-Envelope-Id: MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6 +Reporting-MTA: dns; example.com +Received-From-MTA: DNS; example.com +Arrival-Date: Thu, 1 Jan 2015 17:18:55 GMT + +Final-Recipient: RFC822; externaluser@example.net +Action: relayed (to non-DSN-aware mailer) +Status: 2.1.5 +Remote-MTA: DNS; aspmx.l.google.com +Diagnostic-Code: SMTP; 250 2.1.5 OK un10si29151402wjc.103 - gsmtp +Last-Attempt-Date: Thu, 1 Jan 2015 17:19:04 GMT + +--t01HJ48p012774.1420132744/example.com +Content-Type: text/rfc822-headers + +Return-Path: +Received: from example.com (example.com [127.0.0.1]) + by example.com (8.14.4/8.14.4) with ESMTP id t01HIt8p012772 + for ; Thu, 1 Jan 2015 17:18:55 GMT +Received: (from user@localhost) + by example.com (8.14.4/8.14.4/Submit) id t01HIsAS012771; + Thu, 1 Jan 2015 17:18:54 GMT +Date: Thu, 1 Jan 2015 17:18:54 GMT +Message-Id: <201501011718.t01HIsAS012771@example.com> +X-Authentication-Warning: example.com: user set sender to bouncebacks+MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6@example.com using -f +To: externaluser@example.net +Subject: test subject +X-PHP-Originating-Script: 1004:r.php +From: system Notifications + +--t01HJ48p012774.1420132744/example.com-- + diff --git a/eml/sendmail-dsn-hdrs-invalidhost.eml b/eml/sendmail-dsn-hdrs-invalidhost.eml new file mode 100644 index 0000000..48f578e --- /dev/null +++ b/eml/sendmail-dsn-hdrs-invalidhost.eml @@ -0,0 +1,63 @@ +From MAILER-DAEMON@sender.example.com Thu Jan 1 17:27:28 2015 +Received: from localhost (localhost) + by sender.example.com (8.14.4/8.14.4) id t01HRScT016247; + Thu, 1 Jan 2015 17:27:28 GMT +Date: Thu, 1 Jan 2015 17:27:28 GMT +From: Mail Delivery Subsystem +Message-Id: <201501011727.t01HRScT016247@sender.example.com> +To: +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="t01HRScT016247.1420133248/sender.example.com" +Subject: Returned mail: see transcript for details +Auto-Submitted: auto-generated (failure) + +This is a MIME-encapsulated message + +--t01HRScT016247.1420133248/sender.example.com + +The original message was received at Thu, 1 Jan 2015 17:27:24 GMT +from sender.example.com [127.0.0.1] + + ----- The following addresses had permanent fatal errors ----- + + (reason: 550 Host unknown) + + ----- Transcript of session follows ----- +550 5.1.2 ... Host unknown (Name server: example.invalid: host not found) + +--t01HRScT016247.1420133248/sender.example.com +Content-Type: message/delivery-status + +Original-Envelope-Id: MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6 +Reporting-MTA: dns; sender.example.com +Received-From-MTA: DNS; sender.example.com +Arrival-Date: Thu, 1 Jan 2015 17:27:24 GMT + +Final-Recipient: RFC822; richard+test@example.invalid +Action: failed +Status: 5.1.2 +Remote-MTA: DNS; example.invalid +Diagnostic-Code: SMTP; 550 Host unknown +Last-Attempt-Date: Thu, 1 Jan 2015 17:27:28 GMT + +--t01HRScT016247.1420133248/sender.example.com +Content-Type: text/rfc822-headers + +Return-Path: +Received: from sender.example.com (sender.example.com [127.0.0.1]) + by sender.example.com (8.14.4/8.14.4) with ESMTP id t01HRMcT016245 + for ; Thu, 1 Jan 2015 17:27:24 GMT +Received: (from exampleuser@localhost) + by sender.example.com (8.14.4/8.14.4/Submit) id t01HRJNU016244; + Thu, 1 Jan 2015 17:27:19 GMT +Date: Thu, 1 Jan 2015 17:27:19 GMT +Message-Id: <201501011727.t01HRJNU016244@sender.example.com> +X-Authentication-Warning: sender.example.com: exampleuser set sender to bouncebacks+MjAxNTAxMDEwMDAwMDAwMDQ39a66e5b6@sender.example.com using -f +To: richard+test@example.invalid +Subject: test subject +X-PHP-Originating-Script: 1004:r.php +From: Example Notifications + +--t01HRScT016247.1420133248/sender.example.com-- + diff --git a/eml/sendmail-invaliduser.eml b/eml/sendmail-invaliduser.eml new file mode 100644 index 0000000..1cfc9ea --- /dev/null +++ b/eml/sendmail-invaliduser.eml @@ -0,0 +1,78 @@ +From MAILER-DAEMON@example.com Fri Dec 19 18:03:57 2014 +Received: from localhost (localhost) + by example.com (8.14.4/8.14.4) id sBJI3vuf015631; + Fri, 19 Dec 2014 18:03:57 GMT +Date: Fri, 19 Dec 2014 18:03:57 GMT +From: Mail Delivery Subsystem +Message-Id: <201412191803.sBJI3vuf015631@example.com> +To: +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="sBJI3vuf015631.1419012237/example.com" +Subject: Returned mail: see transcript for details +Auto-Submitted: auto-generated (failure) + +This is a MIME-encapsulated message + +--sBJI3vuf015631.1419012237/example.com + +The original message was received at Fri, 19 Dec 2014 18:03:56 GMT +from localhost [127.0.0.1] + + ----- The following addresses had permanent fatal errors ----- + + (reason: 550-5.1.1 The email account that you tried to reach does not exist. Please try) + + ----- Transcript of session follows ----- +... while talking to aspmx.l.google.com.: +>>> DATA +<<< 550-5.1.1 The email account that you tried to reach does not exist. Please try +<<< 550-5.1.1 double-checking the recipient's email address for typos or +<<< 550-5.1.1 unnecessary spaces. Learn more at +<<< 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 q3si4646974wia.78 - gsmtp +550 5.1.1 ... User unknown +<<< 503 5.5.1 RCPT first. q3si4646974wia.78 - gsmtp + +--sBJI3vuf015631.1419012237/example.com +Content-Type: message/delivery-status + +Reporting-MTA: dns; example.com +Received-From-MTA: DNS; localhost +Arrival-Date: Fri, 19 Dec 2014 18:03:56 GMT + +Final-Recipient: RFC822; invaliduser@invaliduser.invalid +Action: failed +Status: 5.1.1 +Remote-MTA: DNS; aspmx.l.google.com +Diagnostic-Code: SMTP; 550-5.1.1 The email account that you tried to reach does not exist. Please try +Last-Attempt-Date: Fri, 19 Dec 2014 18:03:57 GMT + +--sBJI3vuf015631.1419012237/example.com +Content-Type: message/rfc822 + +Return-Path: +Received: from example.com (localhost [127.0.0.1]) + by example.com (8.14.4/8.14.4) with ESMTP id sBJI3uuf015629 + for ; Fri, 19 Dec 2014 18:03:56 GMT +Received: (from apache@localhost) + by example.com (8.14.4/8.14.4/Submit) id sBJI3uEZ015625; + Fri, 19 Dec 2014 18:03:56 GMT +To: bad user +Subject: Example: New Assignment +X-PHP-Originating-Script: 1004:ks-queue.php +From: Example Notifications +X-Mailer: example.net mail system +X-Original-To: invaliduser@invaliduser.invalid +Date: Fri, 19 Dec 2014 18:03:50 +0000 +Message-Id: <20141219180350000000-2649b1005bde6bb55c7f981a4371170f-54946886077a96.75977667@example.com> +X-Example-Email-Id: MjAxNDEyMTkxNzAwMDA-3b785970 +Errors-To: bouncebacks+MjAxNDEyMTkxNzAwMDA-3b785970@example.com + +Dear bad user + +Email does not exist + +[Exampleemailid-MjAxNDEyMTkxNzAwMDA-3b785970] + +--sBJI3vuf015631.1419012237/example.com-- + diff --git a/eml/sendmail-nohost.eml b/eml/sendmail-nohost.eml new file mode 100644 index 0000000..c502302 --- /dev/null +++ b/eml/sendmail-nohost.eml @@ -0,0 +1,72 @@ +From MAILER-DAEMON@example.com Fri Dec 19 18:03:52 2014 +Received: from localhost (localhost) + by example.com (8.14.4/8.14.4) id sBJI3qFo015624; + Fri, 19 Dec 2014 18:03:52 GMT +Date: Fri, 19 Dec 2014 18:03:52 GMT +From: Mail Delivery Subsystem +Message-Id: <201412191803.sBJI3qFo015624@example.com> +To: +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="sBJI3qFo015624.1419012232/example.com" +Subject: Returned mail: see transcript for details +Auto-Submitted: auto-generated (failure) + +This is a MIME-encapsulated message + +--sBJI3qFo015624.1419012232/example.com + +The original message was received at Fri, 19 Dec 2014 18:03:51 GMT +from localhost [127.0.0.1] + + ----- The following addresses had permanent fatal errors ----- + + (reason: 550 Host unknown) + + ----- Transcript of session follows ----- +550 5.1.2 ... Host unknown (Name server: baddomainxxxsdkjfhsdhfkdsfhsd.com: host not found) + +--sBJI3qFo015624.1419012232/example.com +Content-Type: message/delivery-status + +Reporting-MTA: dns; example.com +Received-From-MTA: DNS; localhost +Arrival-Date: Fri, 19 Dec 2014 18:03:51 GMT + +Final-Recipient: RFC822; baddomain@baddomainxxxsdkjfhsdhfkdsfhsd.com +Action: failed +Status: 5.1.2 +Remote-MTA: DNS; baddomainxxxsdkjfhsdhfkdsfhsd.com +Diagnostic-Code: SMTP; 550 Host unknown +Last-Attempt-Date: Fri, 19 Dec 2014 18:03:52 GMT + +--sBJI3qFo015624.1419012232/example.com +Content-Type: message/rfc822 + +Return-Path: +Received: from example.com (localhost [127.0.0.1]) + by example.com (8.14.4/8.14.4) with ESMTP id sBJI3pFo015622 + for ; Fri, 19 Dec 2014 18:03:51 GMT +Received: (from apache@localhost) + by example.com (8.14.4/8.14.4/Submit) id sBJI3pAI015621; + Fri, 19 Dec 2014 18:03:51 GMT +To: bad domain +Subject: Example: New Assignment +X-PHP-Originating-Script: 1004:ks-queue.php +From: Example Notifications +X-Mailer: example.net mail system +X-Original-To: baddomain@baddomainxxxsdkjfhsdhfkdsfhsd.com +Date: Fri, 19 Dec 2014 18:03:50 +0000 +Message-Id: <20141219180350000000-b03338e34dfedd26fa080d941117982f-549468860710d6.84919603@example.com> +X-Example-Email-Id: MjAxNDEyMTkxNjAwMDA-ad226adb +Errors-To: bouncebacks+MjAxNDEyMTkxNjAwMDA-ad226adb@example.com + +Dear bad domain + +This was a test email. + + +[Exampleemailid-MjAxNDEyMTkxNjAwMDA-ad226adb] + +--sBJI3qFo015624.1419012232/example.com-- + diff --git a/eml/testfile.eml b/eml/testfile.eml index 9541788..a8541d2 100644 --- a/eml/testfile.eml +++ b/eml/testfile.eml @@ -59,9 +59,9 @@ delete your own text from the attached returned message. The mail system -: host mxs.mail.ru[194.67.23.20] said: 550 Access from +: host mxs.example.com[194.67.23.20] said: 550 Access from ip address 87.237.123.24 blocked. Visit - http://win.mail.ru/cgi-bin/support_bl?ip=87.237.123.24 (in reply to RCPT TO + http://win.example.com/cgi-bin/support_bl?ip=87.237.123.24 (in reply to RCPT TO command) --91F2C2C03486B.1182975052/web1.mysnip.de @@ -74,12 +74,12 @@ X-Postfix-Queue-ID: 91F2C2C03486B X-Postfix-Sender: rfc822; wwwmail@mysnip.de Arrival-Date: Wed, 27 Jun 2007 22:10:49 +0200 (CEST) -Final-Recipient: rfc822; leopold_skryd@mail.ru +Final-Recipient: rfc822; leopold_skryd@example.com Action: failed Status: 5.0.0 -Remote-MTA: dns; mxs.mail.ru +Remote-MTA: dns; mxs.example.com Diagnostic-Code: smtp; 550 Access from ip address 87.237.123.24 blocked. Visit - http://win.mail.ru/cgi-bin/support_bl?ip=87.237.123.24 + http://win.example.com/cgi-bin/support_bl?ip=87.237.123.24 --91F2C2C03486B.1182975052/web1.mysnip.de Content-Description: Undelivered Message @@ -87,7 +87,7 @@ Content-Type: message/rfc822 Received: by web1.mysnip.de (Postfix, from userid 1000) id 91F2C2C03486B; Wed, 27 Jun 2007 22:10:49 +0200 (CEST) -To: rusculture +To: rusculture Subject: Registration Confirmation From: webmaster@myphorum.de Message-Id: <20070627201049.91F2C2C03486B@web1.mysnip.de> diff --git a/eml/vac1.eml b/eml/vac1.eml new file mode 100644 index 0000000..ef965a4 --- /dev/null +++ b/eml/vac1.eml @@ -0,0 +1,38 @@ +Return-Path: <> +Delivered-To: support@example-sender.com +Received: (qmail 25576 invoked from network); 16 Sep 2014 14:24:16 -0000 +Received: from unknown (HELO mx.example-mailserver.com) (10.1.111.3) + by inboundmx01.local with SMTP; 16 Sep 2014 14:24:16 -0000 +Received: from gate.forward.smtp.dfw1a.emailsrvr.com ([98.129.184.12]) + by mx.example-mailserver.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 16 Sep 2014 14:24:16 +0000 +Return-Path: <> +X-Virus-Scanned: OK +X-MessageSniffer-Scan-Result: 0 +X-MessageSniffer-Rules: 0-0-0-2193-c +Received: from [172.20.10.52] ([172.20.10.52:59452] helo=dfw136.emailsrvr.com) + by smtp36.gate.dfw1a.rsapps.net (envelope-from <>) + (ecelerity 2.2.3.49 r(42060/42061)) with ESMTPS (cipher=AES256-SHA) + id 04/9B-29943-E0848145; Tue, 16 Sep 2014 10:24:14 -0400 +Received: by store52a.mail.dfw1a (SMTP Server, from userid 5000) + id 48DC43B00EC; Tue, 16 Sep 2014 10:24:14 -0400 (EDT) +X-Sieve: Pigeonhole Sieve 0.4.2 +Message-ID: +Date: Tue, 16 Sep 2014 10:24:14 -0400 +From: +To: +Subject: Re: Tell us your your opinions +In-Reply-To: +References: +Auto-Submitted: auto-replied (vacation) +Precedence: bulk +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +Hello! + +Thank you for contacting us in West Oakville! +We have received your inquiry and will be contacting you within 24 hours. Hopefully today! + +Thanks! +Jane \ No newline at end of file diff --git a/eml/vac2.eml b/eml/vac2.eml new file mode 100644 index 0000000..dcf3e39 --- /dev/null +++ b/eml/vac2.eml @@ -0,0 +1,26 @@ +Return-Path: <> +Delivered-To: assistance@example-sender.com +Received: (qmail 28064 invoked from network); 16 Sep 2014 14:52:45 -0000 +Received: from unknown (HELO mx.example.com) (10.1.111.3) + by inboundmx01.lau.local with SMTP; 16 Sep 2014 14:52:45 -0000 +Received: from 79.128.17.93.rev.sfr.net (HELO smtp1.services.sfr.fr) ([93.17.128.79]) + by mx.example.com with ESMTP; 16 Sep 2014 14:52:44 +0000 +Received: from msfrb0603.sfr.fr (msfrb0603 [10.18.35.17]) + by msfrf0101.sfr.fr (SMTP Server) with ESMTP id 2C9FC1800009E + for ; Tue, 16 Sep 2014 16:52:42 +0200 (CEST) +X-SFR-UUID: 20140916145242182.2C9FC1800009E@msfrf0101.sfr.fr +Received: by msfrb0603.sfr.fr (SMTP Server, from userid 1001) + id 2B0391C00401; Tue, 16 Sep 2014 16:52:42 +0200 (CEST) +Message-ID: +Date: Tue, 16 Sep 2014 16:52:42 +0200 +X-Sieve: CMU Sieve 2.3 +From: +To: +Subject: Auto: Original Subject +In-Reply-To: +Auto-Submitted: auto-replied (vacation) +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +A bientôt.... \ No newline at end of file diff --git a/eml/vac3.eml b/eml/vac3.eml new file mode 100644 index 0000000..c088afd --- /dev/null +++ b/eml/vac3.eml @@ -0,0 +1,62 @@ +Return-Path: +Delivered-To: support@example-sender.com +Received: (qmail 32281 invoked from network); 16 Sep 2014 15:20:53 -0000 +Received: from unknown (HELO mx.example-sender.com) (10.1.111.3) + by inboundmx01.local with SMTP; 16 Sep 2014 15:20:53 -0000 +X-IronPort-Anti-Spam-Filtered: true +X-IronPort-Anti-Spam-Result: Aq8BAOpUGFQgYbaKm2dsb2JhbABghDfSagGBFBYBARABAQEBAQYLCwkUKoQEAQU6A0w/ElcZiEG7TxiOegEBVhaENQWpMo0WUIEPgTsBAQE +X-IronPort-AV: E=Sophos;i="5.04,534,1406592000"; + d="scan'208";a="3707773" +Received: from e8.ny.us.ibm.com ([32.97.182.138]) + by mx.example-sender.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 16 Sep 2014 15:20:53 +0000 +Received: from /spool/local + by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted + for from ; + Tue, 16 Sep 2014 11:20:49 -0400 +Received: from d01dlp02.pok.ibm.com (9.56.250.167) + by e8.ny.us.ibm.com (192.168.1.108) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; + Tue, 16 Sep 2014 11:20:47 -0400 +Received: from b01cxnp23033.gho.pok.ibm.com (b01cxnp23033.gho.pok.ibm.com [9.57.198.28]) + by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 1CCBE6E804A + for ; Tue, 16 Sep 2014 11:20:34 -0400 (EDT) +Received: from d01av05.pok.ibm.com (d01av05.pok.ibm.com [9.56.224.195]) + by b01cxnp23033.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id s8GFKcVT56033388 + for ; Tue, 16 Sep 2014 15:20:46 GMT +Received: from d01av05.pok.ibm.com (localhost [127.0.0.1]) + by d01av05.pok.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s8GFKC45028691 + for ; Tue, 16 Sep 2014 11:20:12 -0400 +Received: from d01ml394.pok.ibm.com (d01ml394.pok.ibm.com [9.63.8.16]) + by d01av05.pok.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id s8GFKCOb028070 + for ; Tue, 16 Sep 2014 11:20:12 -0400 +Date: Tue, 16 Sep 2014 11:19:53 -0400 +From: Example User +To: support@example-sender.com +Subject: AUTO: The User is out of the office (returning 09/18/2014) +Auto-Submitted: auto-replied +In-Reply-To: +References: +Message-ID: +X-MIMETrack: Serialize by Router on D01ML394/01/M/IBM(Release 9.0.1FP1|April 03, 2014) at + 09/16/2014 11:20:12 +MIME-Version: 1.0 +Content-type: text/plain; charset=US-ASCII +X-TM-AS-MML: disable +X-Content-Scanned: Fidelis XPS MAILER +x-cbid: 14091615-0320-0000-0000-0000007FE4B0 + + + +I am out of the office until 09/18/2014. + +I am away on vacation from Sep 10 afternoon & back on Sep 18 in the +afternoon - +taking my laptop with me & will respond to mail periodically + + in case you have an urgent issue pls contact the following people + + + +Note: This is an automated response to your message "Original Subject" +sent on 09/16/2014 11:17:36. + +This is the only notification you will receive while this person is away. diff --git a/eml/vac4.eml b/eml/vac4.eml new file mode 100644 index 0000000..d8c75e4 --- /dev/null +++ b/eml/vac4.eml @@ -0,0 +1,26 @@ +Return-Path: <> +Delivered-To: support@example.com +Received: (qmail 9714 invoked from network); 16 Sep 2014 16:31:50 -0000 +Received: from unknown (HELO mx.example.com) (10.1.111.4) + by inboundmx01.lau.local with SMTP; 16 Sep 2014 16:31:50 -0000 +X-IronPort-Anti-Spam-Filtered: true +X-IronPort-Anti-Spam-Result: ApUEAKFkGFTU4w8WlGdsb2JhbABgvDyDLpdjAXoWAQEQAQEBAQkJCwkSDh6ECjQGgRASDkeIW5ZBpVCOaREBbYQ1BZJQkXyPSIIaO4E+gTsBAQE +X-IronPort-AV: E=Sophos;i="5.04,535,1406592000"; + d="scan'208";a="3715381" +Received: from mout-bounce.user.de ([212.227.15.22]) + by mx.example.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 16 Sep 2014 16:31:50 +0000 +From: Claire +To: support@example.com +Subject: Out of Office +Date: Tue, 16 Sep 2014 18:31:47 +0200 +Message-ID: <0MgCpx-1XiRi23hun-00NQy6@server.de> +In-Reply-To: +MIME-Version: 1.0 +Auto-Submitted: auto-replied (vacation) +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: base64 +X-UI-Out-Filterresults: unknown:0; + +SSBhbSBvdXQgb2YgdGhlIG9mZmljZSBGcmlkYXkgMTJ0aCBTZXB0ZW1iZXIgcmV0dXJuaW5nIG9u +IE1vbmRheSAxNXRoIFNlcHRlbWJlciB3aGVuIEkgd2lsbCBhbnN3ZXIgeW91ciBlbWFpbC4gCgpL +aW5kIFJlZ2FyZHMKCkNsYWlyZQ== \ No newline at end of file diff --git a/eml/vac5.eml b/eml/vac5.eml new file mode 100644 index 0000000..e520664 --- /dev/null +++ b/eml/vac5.eml @@ -0,0 +1,31 @@ +Return-Path: +Delivered-To: support@example.com +Received: (qmail 27206 invoked from network); 16 Sep 2014 20:03:10 -0000 +Received: from unknown (HELO mx.example.com) (10.1.111.4) + by inboundmx01.local with SMTP; 16 Sep 2014 20:03:10 -0000 +Received: from cp995.x.ca ([64.24.94.5]) + by mx.example.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 16 Sep 2014 20:03:10 +0000 +Received: from mfiltd by something.ca with local (Exim 4.82) + (envelope-from ) + id 1XTyxt-0034KP-50 + for support@example.com; Tue, 16 Sep 2014 14:03:05 -0600 +To: "support" +X-Autorespond: Update your Info +MIME-Version: 1.0 +X-Loop: "support" +Precedence: auto_reply +X-Precedence: auto_reply +From: "scott@user.com" +Content-type: text/plain; charset=utf-8 +Subject: Out of Office +Message-Id: +Date: Tue, 16 Sep 2014 14:03:05 -0600 + +To our valued customers, + + +I will be on vacation from Monday September 8th, returning Tuesday September 23rd. Please contact if you require immediate assistance. If not, I will reply upon my return. Thank you! + +Scott + + diff --git a/eml/vac6.eml b/eml/vac6.eml new file mode 100644 index 0000000..e298827 --- /dev/null +++ b/eml/vac6.eml @@ -0,0 +1,50 @@ +Return-Path: +Delivered-To: support@example.com +Received: (qmail 27211 invoked from network); 16 Sep 2014 20:03:11 -0000 +Received: from unknown (HELO mx.example.com) (10.1.111.3) + by inboundmx.local with SMTP; 16 Sep 2014 20:03:11 -0000 +Received: from mail-lb0-f169.google.com ([209.85.217.169]) + by mx.example.com with ESMTP/TLS/RC4-SHA; 16 Sep 2014 20:03:09 +0000 +Received: by mail-lb0-f169.google.com with SMTP id p9so517399lbv.14 + for ; Tue, 16 Sep 2014 13:03:08 -0700 (PDT) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=thesoundresearch.com; s=google; + h=to:from:date:message-id:subject:mime-version:precedence + :auto-submitted:content-type:content-transfer-encoding + :content-disposition; + bh=uTsfxq0kCxhrNoyj95FRcTfCIq0ZYYk7yyba2BrpzPk=; + b=eFYvQFIETJPBrMl+B0BE21sguiicBN6VPQcz3SbcnWnyg55BN9tVmQc/7dZaBx1uc0 + HwgW6fXfJjf2o2NQL1o3/LadkslhI4biCHWTeyygOoCrSqKJt4M7i6webucMMypB/5y0 + Mf051Etq3uT1tLl+Q80DSjWEPMFdZKpFGalt0= +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20130820; + h=x-gm-message-state:to:from:date:message-id:subject:mime-version + :precedence:auto-submitted:content-type:content-transfer-encoding + :content-disposition; + bh=uTsfxq0kCxhrNoyj95FRcTfCIq0ZYYk7yyba2BrpzPk=; + b=RCf/yY+JMAna8w13Zjl7hto1XMH8lOwQBw01i+cxBOvzvUNLnd0x/Ip0YVCUswp3jO + RrBkNC1/ejtDfnDA2pgTOLA8xHkhHCTuGWo6kz6NGRUAqoeTivJjTl6rlLNPia632ZXB + L2q2OOIXSU5pXSitAkBcQEvg41EBIRsNdFL/XpTaZvuWgxdx/DzgIdm11KEwwxzg58Hj + Z50vUH8F7/OyUL23nG9NnbvhiXwfxBv2ZVLJ3aW2am2mwPu6N0V4C+anJF+RCREuWHGj + 7OYacjO+ePaTecUf/XGM7Zh5H4Dl+rT1Pj1xiNjPdYwOFYX/5UM56E7uxcJwQKwDcHzt + CF/Q== +X-Received: by 10.112.72.10 with SMTP id z10mr13321654lbu.87.1410897788000; + Tue, 16 Sep 2014 13:03:08 -0700 (PDT) +To: support@example.com +From: "Carol" +Date: Tue, 16 Sep 2014 13:03:07 -0700 +Message-ID: +Subject: Vacation Alert! Re: Update your profile +MIME-Version: 1.0 +Precedence: bulk +X-Autoreply: yes +Auto-Submitted: auto-replied +Content-Type: text/html; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable +Content-Disposition: inline + +
Hello!

Thanks for your message. I will = +be on vacation from Friday September 5th until Sunday, September 21st, back= + in the office on Monday, September 22nd. During this time I will have very= + limited access to email and voicemail. Please do not hesitate to reach out= + to
\ No newline at end of file diff --git a/eml/vac7.eml b/eml/vac7.eml new file mode 100644 index 0000000..64a4517 --- /dev/null +++ b/eml/vac7.eml @@ -0,0 +1,25 @@ +Return-Path: <> +Delivered-To: support@example.com +Received: (qmail 31309 invoked from network); 16 Sep 2014 21:04:44 -0000 +Received: from unknown (HELO mx.example.com) (10.1.111.4) + by inboundmx01.lau.local with SMTP; 16 Sep 2014 21:04:44 -0000 +Received: from mail.user.ca ([137.21.136.1]) + by mx.example.com with ESMTP; 16 Sep 2014 21:04:44 +0000 +Received: by mail.user.ca (Postfix, from userid 1047) + id 550C8B982810; Tue, 16 Sep 2014 14:04:43 -0700 (PDT) +Message-ID: +Date: Tue, 16 Sep 2014 14:04:43 -0700 +X-Sieve: CMU Sieve 2.3 +From: tanya@user.ca +To: +Subject: I'm away from my mail +In-Reply-To: +Auto-Submitted: auto-replied (vacation) +Precedence: bulk +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +I am currently on vacation. + +Thank you and enjoy the rest of the Summer. \ No newline at end of file diff --git a/php.bouncehandler.v7.4.zip b/php.bouncehandler.v7.4.zip deleted file mode 100644 index 9417828..0000000 Binary files a/php.bouncehandler.v7.4.zip and /dev/null differ diff --git a/testdriver1.php b/testdriver1.php index 12419dc..ee590cf 100644 --- a/testdriver1.php +++ b/testdriver1.php @@ -1,304 +1,344 @@ - - - - File Tests:

\n"; - foreach($files as $file) { - echo "$file "; - $bounce = file_get_contents("eml/".$file); - $multiArray = $bouncehandler->get_the_facts($bounce); - if( !empty($multiArray[0]['action']) - && !empty($multiArray[0]['status']) - && !empty($multiArray[0]['recipient']) ){ - print " - Passed
\n"; +/** + * Web based test driver. + * + * Simple tests for the emails. Really needs moving to proper PHPUnit tests. + * + * PHP version 5 + * + * @category Email + * @package BounceHandler + * @author Multiple + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ + */ + +require_once"bounce_driver.class.php"; + +error_reporting(E_ALL); + + +$testDriver=new TestDriver1(); +$testDriver->main(); + +/** + * Class TestDriver1. + * + * Tests the bounce handler in a simple web based manner. + * + * @category Email + * @package BounceHandler + * @author Multiple + * @license http://opensource.org/licenses/BSD-2-Clause BSD + * @link https://github.com/cfortune/PHP-Bounce-Handler/ + */ +class TestDriver1 +{ + + /** + * The bounce handler object + * + * @var Bouncehandler $_bouncehandler + */ + private $_bouncehandler; + + /** + * Constructor + */ + public function __construct() + { + $this->_bouncehandler = new Bouncehandler(); + } + + /** + * Main Class + * + * @return void + */ + public function main() + { + $files = $this->_getSortedFileList('eml'); + $this->_htmlHead(); + + if (!empty($_GET['testall'])) { + $this->_testAllFiles($files); + } elseif (isset($_GET['eml'])) { + if (true===in_array($_GET['eml'], $files)) { + echo "

" . $_GET['eml'] . "

"; + echo '

View a different bounce

'; + $bounce = file_get_contents("eml/" . $_GET['eml']); + $this->_testSingle($bounce); } - else{ - print " - WRONG
\n"; - print "
\n";
-                print_r($multiArray[0]);
-                print "
\n"; + } + echo "
  1. Test All Sample Bounce E-mails\n\n"; + echo "
  2. Or, select a bounce email to view the parsed results:
\n"; + + if (is_array($files)) { + reset($files); + echo "

Files:

\n"; + foreach ($files as $file) { + echo "$file
\n"; } - } - } -} -?> - -

bounce_driver.class.php -- Version 7.4

- -

- Chris Fortune ~ http://cfortune.kics.bc.ca -

-

June 19, 2014

-
    -
  • make auto-responder identification table driven
  • -
  • make bounce_statuscodes.php (prev rfc1893_status_codes.php) generated from IANA list - php Make_statuscodes.php >bounce_statuscodes.php
  • -
  • allow for rfc status codes with 2 digits in the 3rd paramater
  • -
  • more supression for php notifications on undefined data
  • -
  • better detection and field definition for FBL handling
  • -
  • remove spaces in joined header lines
  • -
  • remove invalid/redundant implode operations
  • -
  • add two new sample emails 61,62
  • -
  • add command line test tool (cmdline_test.php)
  • - -

    -July 4, 2013 -

    -

    -Replaced deprecated split() function. -Added auto-responder identification filter. -Suppressed php Notice errors. -

    -


    - -Download source code -
    - - -

    -Feb 3, 2011 -

    -

    -Hey! Class is no longer static, it is rewritten in dynamic $this-> notation. It's much easier to customize now. If you are upgrading from a previous version, you will need to rewrite your method invocation code. -

    -


    - -Download source code -
    - -

    -This bounce handler Attempts to parse Multipart reports for hard bounces, according to RFC1892 (RFC 1892 - The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages) and RFC1894 (RFC 1894 - An Extensible Message Format for Delivery Status Notifications). We can reuse this for any well-formed bounces.

    -

    -It handles FBL (Feedback Loop) emails, if they are in Abuse Feedback Reporting Format, ARF (It even handles Hotmail's ridiculous attempts at FBL). DKIM parsing is not yet implemented. -

    -

    -You can configure custom regular expressions to find any web beacons you may have put in your outgoing mails, in either the mail body or an x-header field. (see source code for examples). You can use it to track data (eg, recipient, list, mail run, etc...) by sending out unique ids, then parsing them from the bounces. This is especially useful when parsing FBL's, because usually all recipient fields have been removed (redacted). -

    -

    -If the bounce is not well formed, it tries to extract some useful information anyway. Currently Postfix and Exim are supported, partially. You can edit the function get_the_facts() if you want to add a parser for your own busted MTA. Please forward any useful & reuseable code to the keeper of this class. Chris Fortune

    -web_beacon_preg_1 = "/u=([0-9a-fA-F]{32})/"; -$bouncehandler->web_beacon_preg_2 = "/m=(\d*)/"; - -// find a web beacon in an X-header field (in the head section) -$bouncehandler->x_header_search_1 = "X-ctnlist-suid"; -//$bouncehandler->x_header_search_2 = "X-sumthin-sumpin"; - -if($_GET['eml']){ - echo "

    ".$_GET['eml']." -- "; - echo "View a different bounce

    "; - $bounce = file_get_contents("eml/".$_GET['eml']); - echo "

    Quick and dirty bounce handler:
    - useage: -

    - require_once(\"bounce_driver.class.php\");
    - \$bouncehandler = new Bouncehandler();
    - \$multiArray = \$bouncehandler->get_the_facts(\$strEmail); , or
    - \$multiArray = \$bouncehandler->parse_email(\$strEmail);
    (same thing) -
    - returns a multi-dimensional associative array of bounced recipient addresses and their SMTP status codes (if available)

    - print_r(\$multiArray); -

    "; - - $multiArray = $bouncehandler->get_the_facts($bounce); - echo ""; - - $bounce = $bouncehandler->init_bouncehandler($bounce, 'string'); - list($head, $body) = preg_split("/\r\n\r\n/", $bounce, 2); -} -else{ - print "

    1. Test All Sample Bounce E-mails\n\n"; - print "
    2. Or, select a bounce email to view the parsed results:
    \n"; - - $files = get_sorted_file_list('eml'); - if (is_array($files)) { - reset($files); - echo "

    Files:

    \n"; - foreach($files as $file) { - echo "$file
    \n"; } } - exit; -} -echo "

    Will return recipient's email address, the RFC1893 error code, and the action. Action can be one of the following: -

      -
    • 'transient'(temporary problem), -
    • 'failed' (permanent problem), -
    • 'autoreply' (a vacation auto-response), or -
    • '' (nothing -- not classified).
    "; - -echo "

    You could dereference the \$multiArray in a 'for loop', for example...

    -
    -    foreach(\$multiArray as \$the){
    -        switch(\$the['action']){
    -            case 'failed':
    -                //do something
    -                kill_him(\$the['recipient']);
    -                break;
    -            case 'transient':
    -                //do something else
    -                \$num_attempts  = delivery_attempts(\$the['recipient']);
    -                if(\$num_attempts  > 10){
    -                    kill_him(\$the['recipient']);
    -                }
    -                else{
    -                    insert_into_queue(\$the['recipient'], (\$num_attempts+1));
    -                }
    -                break;
    -            case 'autoreply':
    -                //do something different
    -                postpone(\$the['recipient'], '7 days');
    -                break;
    -            default:
    -                //don't do anything
    -                break;
    -        }
    +    /**
    +     * Display the HTML prologue
    +     *
    +     * @return void
    +     */
    +    private function _htmlHead()
    +    {
    +        echo ''
    +            . PHP_EOL;
    +        echo '' . PHP_EOL;
    +        echo '' . PHP_EOL;
    +        echo '';
    +        echo '';
    +        echo '';
         }
     
    -Or, if it is an FBL, you could use the class variables to access the
    -data (Unlike Multipart-reports, FBL's report only one bounce)
    -You could also use them if the output array has only one index:
     
    -    if(\$bouncehandler->type == 'fbl'
    -       or count(\$bouncehandler->output) == 1)
    +    /**
    +     * Get a list of sorted files.
    +     *
    +     * @param string $d Directory name
    +     *
    +     * @return array List of alphabetically sorted files.
    +     */
    +    function _getSortedFileList($d)
         {
    -        echo \$bouncehandler->action : .... $bouncehandler->action
    -        echo \$bouncehandler->status : .... $bouncehandler->status
    -        echo \$bouncehandler->recipient : .... $bouncehandler->recipient
    -        echo \$bouncehandler->feedback_type : .... $bouncehandler->feedback_type
    +        $fs = array();
    +        if ($h = opendir($d)) {
    +            while (false !== ($f = readdir($h))) {
    +                if ($f == '.' || $f == '..') {
    +                    continue;
    +                }
    +                $fs[] = $f;
    +            }
    +            closedir($h);
    +            sort($fs, SORT_STRING);
    +        }
    +        return $fs;
         }
     
    -These class variables are safe for all bounce types:
    -
    -    echo \$bouncehandler->type : .... $bouncehandler->type
    -    echo \$bouncehandler->subject : .... $bouncehandler->subject
    -    echo \$bouncehandler->web_beacon_1 : .... $bouncehandler->web_beacon_1
    -    echo \$bouncehandler->web_beacon_2 : .... $bouncehandler->web_beacon_2
    -    echo \$bouncehandler->x_header_beacon_1 : .... $bouncehandler->x_header_beacon_1
    -    echo \$bouncehandler->x_header_beacon_2 : .... $bouncehandler->x_header_beacon_2
    -
    -
    -"; -echo "

    That's all you need to know, but if you want to get more complicated you can. All methods are public. See source code.


    "; + /** + * Test all files. + * + * @param array $files List of files + * + * @return void + */ + function _testAllFiles($files) + { + echo '

    File Tests:

    ' . PHP_EOL; + echo '' . PHP_EOL; + echo '' . PHP_EOL; + echo ''; + echo ''; + echo ''. PHP_EOL; + echo '' . PHP_EOL; + echo '' . PHP_EOL; + foreach ($files as $file) { + echo ''; + echo ''; + $bounce = file_get_contents("eml/" . $file); + $multiArray = $this->_bouncehandler->get_the_facts($bounce); + if (!empty($multiArray[0]['action']) + && !empty($multiArray[0]['status']) + && !empty($multiArray[0]['recipient']) + ) { + echo ''; + echo ''; + /** + * Get the human readable status message description + */ + $human + = $this->_bouncehandler->fetch_status_message_as_array( + $multiArray[0]['status'] + ); + if ('' === $human['description']) { + echo ''; + } else { + echo ''; + } + if ('' === $human['sub_description']) { + echo ''; + + } else { + echo ''; + } + echo ''; + } else { + echo ''; + } + echo '' . PHP_EOL; + } + echo ''; + echo '
    FileActionStatusRecipient
    ' . $file . '' . $multiArray[0]['action'] . '' . $multiArray[0]['status'] . '' . htmlspecialchars($human['title']) + . '' . htmlspecialchars( + $human['title'] + ) . '' . htmlspecialchars( + $human['description'] + ) . '' . htmlspecialchars($human['sub_title']) + . '' . htmlspecialchars( + $human['sub_title'] + ) . '' . htmlspecialchars( + $human['sub_description'] + ) . '' . htmlspecialchars($multiArray[0]['recipient']) + . ''; + echo 'Unable to parse data
    >'; + echo '
    ' . PHP_EOL;
    +                echo htmlspecialchars(print_r($multiArray, true));
    +                echo '
    ' . PHP_EOL; + echo htmlspecialchars( + print_r($$this->_bouncehandler->output, true) + ); + echo '
    '; + } + /** + * Tests a single email. + * + * @param string $bounce Contents of the bounce email. + * + * @return void + */ + private function _testSingle($bounce) + { + $multiArray = $this->_bouncehandler->get_the_facts($bounce); + echo ""; -echo "

    Here is the parsed head

    \n"; -$head_hash = $bouncehandler->parse_head($head); -echo ""; + $bounce = $this->_bouncehandler->init_bouncehandler($bounce, 'string'); + list($head, $body) = preg_split("/\r\n\r\n/", $bounce, 2); -if($bouncehandler->is_hotmail_fbl) echo "RRRRRR".$bouncehandler->recipient ; -exit; -if ($bouncehandler->is_RFC1892_multipart_report($head_hash)){ - print "

    Looks like an RFC1892 multipart report

    "; -} -else if($bouncehandler->looks_like_an_FBL){ - print "

    It's a Feedback Loop, "; - if($bouncehandler->is_hotmail_fbl){ - print " in Hotmail Doofus Format (HDF?)

    "; - }else{ - print " in Abuse Feedback Reporting format (ARF)"; + echo '

    Raw email:


    '; echo ""; - } -} -else { - print "

    Not an RFC1892 multipart report

    "; - echo ""; - exit; -} + echo htmlspecialchars($bounce); + echo "
    "; + + + echo "

    Parsed head

    \n"; + $head_hash = $this->_bouncehandler->parse_head($head); + echo "
    "; + + if ($this->_bouncehandler->is_RFC1892_multipart_report($head_hash)) { + echo '

    '; + echo 'Looks like an RFC1892 multipart report'; + echo '

    '; + } else if ($this->_bouncehandler->looks_like_an_FBL) { + echo '

    '; + echo 'Looks like a feedback loop'; + if ($this->_bouncehandler->is_hotmail_fbl) { + echo ' in Hotmail Doofus Format (HDF?)'; + } else { + echo ' in Abuse Feedback Reporting format (ARF)'; + } + echo '

    '; + echo ""; + } else { + echo "

    Not an RFC1892 multipart report

    "; + echo ""; + exit; + } -echo "

    Here is the parsed report

    \n"; -echo "

    Postfix adds an appropriate X- header (X-Postfix-Sender:), so you do not need to create one via phpmailer. RFC's call for an optional Original-recipient field, but mandatory Final-recipient field is a fair substitute.

    "; -$boundary = $head_hash['Content-type']['boundary']; -$mime_sections = $bouncehandler->parse_body_into_mime_sections($body, $boundary); -$rpt_hash = $bouncehandler->parse_machine_parsable_body_part($mime_sections['machine_parsable_body_part']); -echo ""; + echo "

    Here is the parsed report

    \n"; + echo '

    Postfix adds an appropriate X- header (X-Postfix-Sender:), '; + echo 'so you do not need to create one via phpmailer. RFC\'s call '; + echo 'for an optional Original-recipient field, but mandatory '; + echo 'Final-recipient field is a fair substitute.

    '; + $boundary = $head_hash['Content-type']['boundary']; + $mime_sections + = $this->_bouncehandler->parse_body_into_mime_sections( + $body, $boundary + ); + $rpt_hash + = $this->_bouncehandler->parse_machine_parsable_body_part( + $mime_sections['machine_parsable_body_part'] + ); + echo ""; + echo "

    Here is the error status code

    \n"; + echo "

    It's all in the status code, if you can find one.

    "; + for ($i = 0; $i < count($rpt_hash['per_recipient']); $i++) { + echo "

    Report #" . ($i + 1) . "
    \n"; + echo $this->_bouncehandler->find_recipient( + $rpt_hash['per_recipient'][$i] + ); + $scode = $rpt_hash['per_recipient'][$i]['Status']; + echo "

    $scode
    "; + echo $this->_bouncehandler->fetch_status_messages($scode); + echo "

    \n"; + } -echo "

    Here is the error status code

    \n"; -echo "

    It's all in the status code, if you can find one.

    "; -for($i=0; $iReport #".($i+1)."
    \n"; - echo $bouncehandler->find_recipient($rpt_hash['per_recipient'][$i]); - $scode = $rpt_hash['per_recipient'][$i]['Status']; - echo "
    $scode
    "; - echo $bouncehandler->fetch_status_messages($scode); - echo "

    \n"; -} + echo '

    The Diagnostic-code

    '; + echo '

    is not the same as the reported status code, but it seems '; + echo 'to be more descriptive, so it should be extracted (if possible).'; + for ($i = 0; $i < count($rpt_hash['per_recipient']); $i++) { + echo "

    Report #" . ($i + 1) . "
    \n"; + echo $this->_bouncehandler->find_recipient( + $rpt_hash['per_recipient'][$i] + ); + $dcode = $rpt_hash['per_recipient'][$i]['Diagnostic-code']['text']; + if ($dcode) { + echo "

    $dcode
    "; + echo $this->_bouncehandler->fetch_status_messages($dcode); + } else { + echo "
    couldn't decode
    "; + } + echo "

    \n"; + } -echo "

    The Diagnostic-code

    is not the same as the reported status code, but it seems to be more descriptive, so it should be extracted (if possible)."; -for($i=0; $iReport #".($i+1)."
    \n"; - echo $bouncehandler->find_recipient($rpt_hash['per_recipient'][$i]); - $dcode = $rpt_hash['per_recipient'][$i]['Diagnostic-code']['text']; - if($dcode){ - echo "

    $dcode
    "; - echo $bouncehandler->fetch_status_messages($dcode); - } - else{ - echo "
    couldn't decode
    "; + echo '

    Grab original To: and From:

    \n'; + echo '

    Just in case we don\'t have an Original-recipient: field, or '; + echo 'a X-Postfix-Sender: field, we can retrieve information from '; + echo 'the (optional) returned message body part

    '.PHP_EOL; + $head + = $this->_bouncehandler->get_head_from_returned_message_body_part( + $mime_sections + ); + echo "

    From: " . $head['From']; + echo "
    To: " . $head['To']; + echo "
    Subject: " . $head['Subject'] . "

    "; + + + echo "

    Here is the body in RFC1892 parts

    \n"; + echo '<[>Three parts: [first_body_part], '; + echo '[machine_parsable_body_part], and '; + echo ' [returned_message_body_part]

    '; + echo ""; } - echo "

    \n"; -} -echo "

    Grab original To: and From:

    \n"; -echo "

    Just in case we don't have an Original-recipient: field, or a X-Postfix-Sender: field, we can retrieve information from the (optional) returned message body part

    \n"; -$head = $bouncehandler->get_head_from_returned_message_body_part($mime_sections); -echo "

    From: ".$head['From']."
    To: ".$head['To']."
    Subject: ".$head['Subject']."

    "; - - -echo "

    Here is the body in RFC1892 parts

    \n"; -echo "

    Three parts: [first_body_part], [machine_parsable_body_part], and [returned_message_body_part]

    "; -echo ""; - - -/* - $status_code = $bouncehandler->format_status_code($rpt_hash['per_recipient'][$i]['Status']); - $status_code_msg = $bouncehandler->fetch_status_messages($status_code['code']); - $status_code_remote_msg = $status_code['text']; - $diag_code = $bouncehandler->format_status_code($rpt_hash['per_recipient'][$i]['Diagnostic-code']['text']); - $diag_code_msg = $bouncehandler->fetch_status_messages($diag_code['code']); - $diag_code_remote_msg = $diag_code['text']; -*/ - -function get_sorted_file_list($d){ - $fs = array(); - if ($h = opendir($d)) { - while (false !== ($f = readdir($h))) { - if($f=='.' || $f=='..') continue; - $fs[] = $f; - } - closedir($h); - sort($fs, SORT_STRING);// - } - return $fs; } -?>