How to use zend mail to manipulate the mail message?

Go To


Here is a sample email. What i would like to do is using zend mail to filter out the email with the specific header and subject, here are my reg experssion

    $pattern_subject = "#delivery errors|delivery failure|delivery has failed|delivery notification|delivery problem|delivery status notif|failure delivery|failure notice|mail delivery failed|mail delivery system|mail status report|mail system error|mail transaction failed|mailserver notification|mdaemon notification|nondeliverable mail|returned email|returned mail|returned mail|returned to sender|returning message to sender|spam eater|undeliverable|undelivered mail|warning: message#i";

$pattern_body = "#554 delivery error|554 TRANSACTION FAILED|Action: failed|Delivery attempts will continue to be made for|delivery temporarily suspended|Invalid recipient|is not a valid mailbox|Mail rejected by Windows Live Hotmail for policy reasons|mailbox is full|Mailbox quota usage exceeded|mailbox unavailable|my badmailfrom list|no mailbox here by that name|no such address|No such user here|not yet been delivered|Over quota|PERM_FAILURE: DNS Error: Domain name not found|Recipient address rejected|retry timeout exceeded|Status: 4.4.1|The account or domain may not exist, they may be blacklisted, or missing the proper dns entries.|The following address doesn't exist|The message that you sent was undeliverable to the following|The recipient name is not recognized|This Gmail user does not exist|This is a permanent error|Unrouteable address|unrouteable mail domain|User mailbox exceeds allowed size|User unknown in virtual alias table|User unknown#i";

One for the subject and one for body, how can i

1)Use them to filter the mail and get only what match the reg exp?

2) Get the mail with different part, what i need is separately of

receive date, header , body

Here is my tried code (ignored the imap setup), but it only print out the header and not filtered.

foreach ($mail as $message) {   
foreach ($message->getHeaders() as $name => $value) {
    if (is_string($pattern_subject)) {
        echo "$name: $value\n";
        echo "<br>";



Thank you

2012-04-03 19:34
by Leo Chan


This example shows you how to get email parts, and filter out messages by subject, do same for $body.

/* @var $message Zend_Mail_Message */
    foreach ($mail as $i => $message) {
        if (!preg_match($pattern_subject, $message->subject)) {

        echo $message->date . "\n";
        echo $message->subject . "\n";
        $body = null;
        foreach (new RecursiveIteratorIterator($message) as $part) {
            if (strtok($part->contentType, ';') == 'text/plain') {
                $body = $part;
        echo $body."\n";
2012-04-04 06:12
by b.b3rn4rd