Using Zend to parse raw SMTP email data
I needed to create a script today that takes raw SMTP input from stdin. The project is running on Zend and they have a library for email. However, their documentation is geared toward getting that email from a mailserver. As far as I could find there wasn’t an example of how to create an email object out of the raw SMTP data.
Create a Zend_Mail_Message from the raw string.
$email = new Zend_Mail_Message(array('raw' => $email_str));
To grab the subject:
$email->subject;
All I wanted was the body from the text/plain piece of the email. If you’ve got a multi-part message it’s a little tricky. Here’s what I compiled from Zend’s documentation:
if($email->isMultipart()) { foreach (new RecursiveIteratorIterator($email) as $part) { try { if (strtok($part->contentType, ';') == 'text/plain') { $body = trim($part); break; } } catch (Zend_Mail_Exception $e) { // ignore } } if(!$body) { //Error } } else { $body = trim($email->getContent()); }