123 lines
4.4 KiB
PHP
123 lines
4.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* 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 <cfortune@users.noreply.github.com>
|
||
|
* @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 '<?php'.$nl;
|
||
|
print '/** '.$nl;
|
||
|
print ' * Bounce status codes.'.$nl;
|
||
|
print ' *'.$nl;
|
||
|
print ' * Auto-generated by Make_statuscodes.php'.$nl;
|
||
|
print ' * on '.date('Y-m-d H:i:s').$nl;
|
||
|
print ' * From the following URLs:'.$nl;
|
||
|
print ' * '.chunk_split($codes_1_url, 75, $nl.' * ').$nl;
|
||
|
print ' * '.chunk_split($codes_3_url, 75, $nl.' * ').$nl;
|
||
|
print ' *'.$nl;
|
||
|
print ' * PHP version 5'.$nl;
|
||
|
print ' *'.$nl;
|
||
|
print ' * @category Email'.$nl;
|
||
|
print ' * @package BounceHandler'.$nl;
|
||
|
print ' * @author Multiple <cfortune@users.noreply.github.com>'.$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);
|
||
|
|
||
|
}
|
||
|
fclose($fh);
|
||
|
}
|
||
|
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);
|
||
|
}
|