peterkahl/mime-mail-parser

Lightweight parser of MIME and non-MIME mails.

v0.10.1 2018-03-22 14:39 UTC

README

Downloads Download per Month License If this project has business value for you then don't hesitate to support me with a small donation.

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

====================================================================