diff options
author | Craig Andrews <candrews@integralblue.com> | 2009-07-20 14:02:42 -0400 |
---|---|---|
committer | Craig Andrews <candrews@integralblue.com> | 2009-07-20 14:02:42 -0400 |
commit | 6313cf5bfe00c2810f1cdc0ac558643543e5f02f (patch) | |
tree | 599162033c121ca149c84c004d999524438e5b88 | |
parent | 31307e6cdd21bbd7bb2290aeb64e7180fef87159 (diff) |
Better handle multipart emails (especially those with multipart/alternative contents)
-rwxr-xr-x | scripts/maildaemon.php | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/scripts/maildaemon.php b/scripts/maildaemon.php index 11ddf06b7..3f5402bec 100755 --- a/scripts/maildaemon.php +++ b/scripts/maildaemon.php @@ -299,25 +299,37 @@ class MailerDaemon $attachments = array(); + $this->extract_part($parsed,$msg,$attachments); + + return array($from, $to, $msg, $attachments); + } + + function extract_part($parsed,&$msg,&$attachments){ if ($parsed->ctype_primary == 'multipart') { - foreach ($parsed->parts as $part) { - if ($part->ctype_primary == 'text' && - $part->ctype_secondary == 'plain') { - $msg = $part->body; - }else{ - if ($part->body) { - $attachment = tmpfile(); - fwrite($attachment, $part->body); - $attachments[] = $attachment; - } + if($parsed->ctype_secondary == 'alternative'){ + $altmsg = $this->extract_msg_from_multipart_alternative_part($parsed); + if(!empty($altmsg)) $msg = $altmsg; + }else{ + foreach($parsed->parts as $part){ + $this->extract_part($part,$msg,$attachments); } } - } else if ($type == 'text/plain') { + } else if ($parsed->ctype_primary == 'text' + && $parsed->ctype_secondary=='plain') { $msg = $parsed->body; - } else { - $this->unsupported_type($type); + }else if(!empty($parsed->body)){ + $attachment = tmpfile(); + fwrite($attachment, $parsed->body); + $attachments[] = $attachment; } - return array($from, $to, $msg, $attachments); + } + + function extract_msg_from_multipart_alternative_part($parsed){ + foreach ($parsed->parts as $part) { + $this->extract_part($part,$msg,$attachments); + } + //we don't want any attachments that are a result of this parsing + return $msg; } function unsupported_type($type) |