<?php 
/* 
 * test_message_decoder.php 
 * 
 * @(#) $Id: test_message_decoder.php,v 1.14 2021/02/22 16:02:28 mlemos Exp $ 
 * 
 */ 
 
    require_once('rfc822_addresses.php'); 
    require_once('mime_parser.php'); 
 
    $message_file=((IsSet($_SERVER['argv']) && count($_SERVER['argv'])>1) ? $_SERVER['argv'][1] : 'test/sample/message.eml'); 
    $mime=new mime_parser_class; 
     
    /* 
     * Set to 0 for parsing a single message file 
     * Set to 1 for parsing multiple messages in a single file in the mbox format 
     */ 
    $mime->mbox = 0; 
     
    /* 
     * Set to 0 for not decoding the message bodies 
     */ 
    $mime->decode_bodies = 1; 
 
    /* 
     * Set to 0 to make syntax errors make the decoding fail 
     */ 
    $mime->ignore_syntax_errors = 1; 
 
    /* 
     * Set to 0 to avoid keeping track of the lines of the message data 
     */ 
    $mime->track_lines = 1; 
 
    /* 
     * Set to 1 to make message parts be saved with original file names 
     * when the SaveBody parameter is used. 
     */ 
    $mime->use_part_file_names = 0; 
 
    /* 
     * Set this variable with entries that define MIME types not yet 
     * recognized by the Analyze class function. 
     */ 
    $mime->custom_mime_types = array( 
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document'=>array( 
            'Type' => 'ms-word', 
            'Description' => 'Word processing document in Microsoft Office OpenXML format' 
        ) 
    ); 
 
    $parameters=array( 
        'File'=>$message_file, 
         
        /* Read a message from a string instead of a file */ 
        /* 'Data'=>'My message data string',              */ 
 
        /* Save the message body parts to a directory     */ 
        /* 'SaveBody'=>'/tmp',                            */ 
 
        /* Do not retrieve or save message body parts     */ 
        'SkipBody'=>1, 
    ); 
 
/* 
 * The following lines are for testing purposes. 
 * Remove these lines when adapting this example to real applications. 
 */ 
    if(defined('__TEST')) 
    { 
        if(IsSet($__test_options['parameters'])) 
            $parameters=$__test_options['parameters']; 
        if(IsSet($__test_options['mbox'])) 
            $mime->mbox=$__test_options['mbox']; 
        if(IsSet($__test_options['decode_bodies'])) 
            $mime->decode_bodies=$__test_options['decode_bodies']; 
        if(IsSet($__test_options['use_part_file_names'])) 
            $mime->use_part_file_names=$__test_options['use_part_file_names']; 
        if(IsSet($__test_options['use_part_file_names'])) 
            $mime->use_part_file_names=$__test_options['use_part_file_names']; 
        if(IsSet($__test_options['message_buffer_length'])) 
            $mime->message_buffer_length = $__test_options['message_buffer_length']; 
    } 
 
    if(!$mime->Decode($parameters, $decoded)) 
    { 
        echo 'MIME message decoding error: '.$mime->error.' at position '.$mime->error_position; 
        if($mime->track_lines 
        && $mime->GetPositionLine($mime->error_position, $line, $column)) 
            echo ' line '.$line.' column '.$column; 
        echo "\n"; 
    } 
    else 
    { 
        echo 'MIME message decoding successful.'."\n"; 
        echo (count($decoded)==1 ? '1 message was found.' : count($decoded).' messages were found.'),"\n"; 
        for($message = 0; $message < count($decoded); $message++) 
        { 
            echo 'Message ',($message+1),':',"\n"; 
            var_dump($decoded[$message]); 
            if($mime->decode_bodies) 
            { 
                if($mime->Analyze($decoded[$message], $results)) 
                    var_dump($results); 
                else 
                    echo 'MIME message analyse error: '.$mime->error."\n"; 
            } 
        } 
        for($warning = 0, Reset($mime->warnings); $warning < count($mime->warnings); Next($mime->warnings), $warning++) 
        { 
            $w = Key($mime->warnings); 
            echo 'Warning: ', $mime->warnings[$w], ' at position ', $w; 
            if($mime->track_lines 
            && $mime->GetPositionLine($w, $line, $column)) 
                echo ' line '.$line.' column '.$column; 
            echo "\n"; 
        } 
    } 
?>
 
 |