DownloadMIME Mail Parser
Lightweight parser of MIME and non-MIME mails.
Usage Example
use peterkahl\MIMEmailParser\MIMEmailParser;
$str = 'To: =?utf-8?B?6Zmz5aSn5YGJ?= <nobody@nowhere>
Subject: =?utf-8?B?6JiL5p6c?=
Date: Sun, 16 Oct 2016 14:18:13 +0000
Message-Id: <58FEFDGKQ.1F9JAF7X8CFNO@everywhere>
From: "Mao \"Chairman\" =?utf-8?B?5q+b5rO95Lic?=" (office) <mao@backintime.sample>
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="__13DC118A:67185A22ABDB3C963911BA465620407F8721AD92__"
--__13DC118A:67185A22ABDB3C963911BA465620407F8721AD92__
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
Content-Language: zh-tw
Content-Disposition: inline
6JiL5p6c5qi55piv6JC96JGJ5Zas5pyo77yM6YCa5bi45qi55pyo5Y+v6auY6IezMTXnsbPvvIzk
vYbmoL3ln7nmqLnmnKjkuIDoiKzlj6rpq5gzLTXnsbPlt6blj7PjgILmqLnlubnlkYjngbDopJDo
ibLvvIzmqLnnmq7mnInkuIDlrprnqIvluqbnmoTohKvokL3jgILmnpzlr6bkuIDoiKzlkYjntIXo
ibLvvIzkvYbpnIDoppbkuY7lk4HnqK7ogIzlrprjgIIKCQkK6JiL5p6c6ZaL6Iqx5pyf5piv5Z+6
5pa85ZCE5Zyw5rCj5YCZ6ICM5a6a77yM5L2G5LiA6Iis6ZuG5Lit5ZyoNC015pyI5Lu944CC6JiL
5p6c5piv55Ww6Iqx5o6I57KJ5qSN54mp77yM5aSn6YOo5YiG5ZOB56iu6Ieq6Iqx5LiN6IO957WQ
5oiQ5p6c5a+m44CC
--__13DC118A:67185A22ABDB3C963911BA465620407F8721AD92__
Content-Type: multipart/related;
boundary="__1FBAC6BE:67185A22ABDB3C963911BA465620407F8721AD92__"
--__1FBAC6BE:67185A22ABDB3C963911BA465620407F8721AD92__
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
Content-Language: zh-tw
Content-Disposition: inline
PGJvZHkgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgbGVmdG1hcmdpbj0iMCIgdG9w
bWFyZ2luPSIwIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNGRkZGIxOyI+PG1ldGEgY2hhcnNl
dD0idXRmLTgiPjx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5n
PSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGJnY29sb3I9IiM0ZGRkYjEiPjx0cj48dGQg
d2lkdGg9IjEwMCUiIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj48dGFibGUgd2lkdGg9IjYw
MCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9
IjAiIGNsYXNzPSJ3cmFwcGVyIiBiZ2NvbG9yPSIjNDY0ZjU4Ij48dGJvZHk+PHRyPjx0ZCBhbGln
bj0iY2VudGVyIj48dGFibGUgd2lkdGg9IjYwMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5n
PSIwIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNsYXNzPSJjb250YWluZXIiPjx0cj48dGQg
aGVpZ2h0PSIyMCIgc3R5bGU9ImxpbmUtaGVpZ2h0OjIwcHg7IGZvbnQtc2l6ZToyMHB4OyI+IDwv
dGQ+PC90cj48dHI+PHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJy
aSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDI2cHg7IGxpbmUtaGVpZ2h0OiAyNnB4OyBjb2xvcjog
I2ZmZmZmZjsgZm9udC13ZWlnaHQ6IGJvbGQ7IHBhZGRpbmc6IDAgMjBweDsiPjxwPuiYi+aenOao
ueaYr+iQveiRieWWrOacqO+8jOmAmuW4uOaoueacqOWPr+mrmOiHszE157Gz77yM5L2G5qC95Z+5
5qi55pyo5LiA6Iis5Y+q6auYMy0157Gz5bem5Y+z44CC5qi55bm55ZGI54Gw6KSQ6Imy77yM5qi5
55qu5pyJ5LiA5a6a56iL5bqm55qE6ISr6JC944CC5p6c5a+m5LiA6Iis5ZGI57SF6Imy77yM5L2G
6ZyA6KaW5LmO5ZOB56iu6ICM5a6a44CCPC9wPjxwPuiYi+aenOmWi+iKseacn+aYr+WfuuaWvOWQ
hOWcsOawo+WAmeiAjOWumu+8jOS9huS4gOiIrOmbhuS4reWcqDQtNeaciOS7veOAguiYi+aenOaY
r+eVsOiKseaOiOeyieakjeeJqe+8jOWkp+mDqOWIhuWTgeeoruiHquiKseS4jeiDvee1kOaIkOae
nOWvpuOAgjwvcD48L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9IjIwIiBzdHlsZT0ibGluZS1oZWln
aHQ6MjBweDsgZm9udC1zaXplOjIwcHg7Ij4gPC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwv
dGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+
--__1FBAC6BE:67185A22ABDB3C963911BA465620407F8721AD92__--
--__13DC118A:67185A22ABDB3C963911BA465620407F8721AD92__--
';
$mpars = new MIMEmailParser;
$mpars->parse_messageString($str);
if (!empty($mpars->messageType)) {
echo 'This message contains the following parts:'. PHP_EOL . PHP_EOL;
echo implode(', ', $mpars->messageType). PHP_EOL . PHP_EOL;
echo '====================================================================' . PHP_EOL . PHP_EOL;
}
if (!empty($mpars->headers)) {
echo 'I found these top-most headers:'. PHP_EOL . PHP_EOL;
foreach ($mpars->headers as $hdrKey => $hdrVal) {
echo '"'. $hdrKey .'" => "'. $mpars->decodeRFC2047($hdrVal) .'"'. PHP_EOL;
}
echo '====================================================================' . PHP_EOL . PHP_EOL;
}
if (!empty($mpars->content)) {
foreach ($mpars->content as $partKey => $partVal) {
if (substr($partVal['content-type'], 0, 10) == 'text/plain' && !empty($partVal['content'])) {
echo 'Body in plain text:'. PHP_EOL . PHP_EOL . $partVal['content'] . PHP_EOL . PHP_EOL;
if (!empty($partVal['content-language'])) {
echo 'The above string\'s language ........ '. $partVal['content-language'] . PHP_EOL . PHP_EOL;
echo '====================================================================' . PHP_EOL . PHP_EOL;
}
}
if (substr($partVal['content-type'], 0, 9) == 'text/html' && !empty($partVal['content'])) {
echo 'Body in HTML text:'. PHP_EOL . PHP_EOL . $partVal['content'] . PHP_EOL . PHP_EOL;
if (!empty($partVal['content-language'])) {
echo 'The above string\'s language ........ '. $partVal['content-language'] . PHP_EOL . PHP_EOL;
echo '====================================================================' . PHP_EOL . PHP_EOL;
}
}
}
}
else {
die('Parsing failed. Something must be wrong with the mail string.');
}
The above example produces:
This message contains the following parts:
multipart/alternative, text/plain, multipart/related, text/html
====================================================================
I found these top-most headers:
"content-type" => "multipart/alternative; boundary="__13DC118A:67185A22ABDB3C963911BA465620407F8721AD92__""
"mime-version" => "1.0"
"from" => ""Mao \"Chairman\" ???" (office) <mao@backintime.sample>"
"message-id" => "<58FEFDGKQ.1F9JAF7X8CFNO@everywhere>"
"date" => "Sun, 16 Oct 2016 14:18:13 +0000"
"subject" => "??"
"to" => "??? <nobody@nowhere>"
====================================================================
Body in plain text:
????????????????15???????????3-5???????????????????????????????????????
?????????????????????4-5???????????????????????????
The above string's language ........ zh-tw
====================================================================
<body marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" style="background-color:#4dddb1;"><meta charset="utf-8"><table width="100%" cellpadding="0" cellspacing="0" border="0" align="center" bgcolor="#4dddb1"><tr><td width="100%" valign="top" align="center"><table width="600" cellpadding="0" cellspacing="0" align="center" border="0" class="wrapper" bgcolor="#464f58"><tbody><tr><td align="center"><table width="600" cellpadding="0" cellspacing="0" align="center" border="0" class="container"><tr><td height="20" style="line-height:20px; font-size:20px;"> </td></tr><tr><td align="center" style="font-family: Calibri,sans-serif; font-size: 26px; line-height: 26px; color: #ffffff; font-weight: bold; padding: 0 20px;"><p>????????????????15???????????3-5???????????????????????????????????????</p><p>?????????????????????4-5???????????????????????????</p></td></tr><tr><td height="20" style="line-height:20px; font-size:20px;"> </td></tr></table></td></tr></tbody></table></td></tr></table></body>
The above string's language ........ zh-tw
====================================================================
|