Skip to content

Instantly share code, notes, and snippets.

@slywalker
Created March 23, 2012 04:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slywalker/2166856 to your computer and use it in GitHub Desktop.
Save slywalker/2166856 to your computer and use it in GitHub Desktop.
mailparse
<?php
$file = file_get_contents(dirname(__DIR__) . '/test/mail.txt');
$mail = mailparse_msg_create();
mailparse_msg_parse($mail, $file);
$struct = mailparse_msg_get_structure($mail);
$parts = array();
foreach($struct as $st) {
$section = mailparse_msg_get_part($mail, $st);
$info = mailparse_msg_get_part_data($section);
$parts[$st] = $info;
$parts[$st]['body'] = substr($file, $info['starting-pos-body'], $info['ending-pos-body'] - $info['starting-pos-body']);
}
$headers =& $parts[1]['headers'];
array_walk($headers, function(&$val, $key) use(&$headers) {
if ('subject' === $key) {
$val = mb_decode_mimeheader($val);
}
if (in_array($key, array('delivered-to', 'return-path', 'to', 'from', 'reply-to'))) {
$val = mailparse_rfc822_parse_addresses($val);
}
});
array_walk($parts, function(&$val, $key) use(&$parts) {
if (!empty($val['transfer-encoding'])) {
switch ($val['transfer-encoding']) {
case 'base64':
$val['body'] = base64_decode($val['body']);
break;
case 'quoted-printable':
$val['body'] = quoted_printable_decode($val['body']);
break;
}
}
if (!empty($val['content-charset'])) {
$val['body'] = mb_convert_encoding($val['body'], 'UTF-8', $val['content-charset']);
}
});
print_r($parts);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment