blob: 913b34b0c7265ba860ff0d77e0b6f560b0c7e06d [file]
<?php
require 'tutorial_autoload.php';
// Create a mail set from a file, a parser, and parse the e-mail.
$set = new ezcMailFileSet( array( 'test-mail.mail' ) );
$parser = new ezcMailParser();
$mail = $parser->parseMail( $set );
/**
* This class is used in the callback for each part that is walked below. It
* takes care of copying the files and registering both file parts and the HTML
* text.
*/
class collector
{
function saveMailPart( $context, $mailPart )
{
// if it's a file, we copy the attachment to a new location, and
// register its CID with the class - attaching it to the location in
// which the *web server* can find the file.
if ( $mailPart instanceof ezcMailFile )
{
// copy files to tmp with random name
$newFile = tempnam( $this->dir, 'mail' );
copy( $mailPart->fileName, $newFile );
// save location and setup ID array
$this->cids[$mailPart->contentId] =
$this->webDir . '/' . basename( $newFile );
}
// if we find a text part and if the sub-type is HTML (no plain text)
// we store that in the classes' htmlText property.
if ( $mailPart instanceof ezcMailText )
{
if ( $mailPart->subType == 'html' )
{
$this->htmlText = $mailPart->text;
}
}
}
}
// create the collector class and set the filesystem path, and the webserver's
// path to find the attached files (images) in.
$collector = new collector();
$collector->dir = "/home/httpd/html/test/ezc";
$collector->webDir = '/test/ezc';
// We use the saveMailPart() method of the $collector object function as a
// callback in walkParts().
$context = new ezcMailPartWalkContext( array( $collector, 'saveMailPart' ) );
// only call the callback for file and text parts.
$context->filter = array( 'ezcMailFile', 'ezcMailText' );
// use walkParts() to iterate over all parts in the first parsed e-mail
// message.
$mail[0]->walkParts( $context, $mail[0] );
// display the html text with the content IDs replaced with references to the
// file in the webroot.
echo ezcMailTools::replaceContentIdRefs( $collector->htmlText, $collector->cids );
?>