PHP Classes
elePHPant
Icontem

MIME mail parser: Parse and extract contents of MIME email message

Recommend this page to a friend!
  Info   View files Documentation   View files View files (4)   DownloadInstall with Composer Download .zip   Reputation   Support forum (1)   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2019-10-29 (3 hours ago) RSS 2.0 feedStarStarStarStar 64%Total: 300 All time: 7,253 This week: 365Up
Version License PHP version Categories
mime-mail-parser 0.9.20Custom (specified...5Email, PHP 5, Parsers
Description Author

This class can parse and extract contents of MIME email message.

It takes a string with complete email messages with headers and body and parses it to extract its details.

Currently it can return the message types of each part of the message, the message headers, and the content and headers of each part.

  Performance   Level  
Name: Peter Kahl <contact>
Classes: 37 packages by
Country: United Kingdom United Kingdom
Innovation award
Innovation award
Nominee: 23x

Winner: 2x

 

Details

MIME Mail Parser

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

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


  Files folder image Files  
File Role Description
Files folder imagesrc (1 file)
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  src  
File Role Description
  Plain text file MIMEmailParser.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:300
This week:0
All time:7,253
This week:365Up
User Ratings User Comments (1)
 All time
Utility:91%StarStarStarStarStar
Consistency:91%StarStarStarStarStar
Documentation:91%StarStarStarStarStar
Examples:-
Tests:-
Videos:-
Overall:64%StarStarStarStar
Rank:930
 
nice
2 years ago (muabshir)
70%StarStarStarStar