LXXX. Mailparse Functions

简介

Mailparse is an extension for parsing and working with email messages. It can deal with RFC 822 and RFC 2045 (MIME) compliant messages.

Mailparse is stream based, which means that it does not keep in-memory copies of the files it processes - so it is very resource efficient when dealing with large messages.

注意: Mailparse requires the mbstring extension.

本扩展已被移动到 PECL 库中且自以下版本起不再被绑定到 PHP 中:4.2.0.

安装

PECL 扩展未绑定于 PHP 中。 安装此 PECL 扩展库的信息可在手册中标题为 PECL 扩展库安装的一章中找到。 更多信息如新版本,下载,源文件,维护者信息以及更新日志等可以在这里找到: http://pecl.php.net/package/mailparse.

In order to use these functions you must compile PHP with mailparse support by using the --enable-mailparse configure option.

Windows users will enable php_mailparse.dll inside of php.ini in order to use these functions. 可以从 PHP 下载页面或者 http://snaps.php.net/ 下载此 PECL 扩展的 DLL 文件。

运行时配置

这些函数的行为受 php.ini 的影响。

表 1. Mailparse configuration options

NameDefaultChangeableChangelog
mailparse.def_charset"us-ascii"PHP_INI_ALL 
有关 PHP_INI_* 常量进一步的细节与定义参见附录 H

预定义常量

以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 PHP 中,或者在运行时被动态加载后才有效。

MAILPARSE_EXTRACT_OUTPUT (integer)

MAILPARSE_EXTRACT_STREAM (integer)

MAILPARSE_EXTRACT_RETURN (integer)

目录
mailparse_determine_best_xfer_encoding -- Gets the best way of encoding
mailparse_msg_create -- Create a mime mail resource
mailparse_msg_extract_part_file -- Extracts/decodes a message section
mailparse_msg_extract_part --  Extracts/decodes a message section
mailparse_msg_extract_whole_part_file -- Extracts a message section including headers without decoding the transfer encoding
mailparse_msg_free -- Frees a MIME resource
mailparse_msg_get_part_data -- Returns an associative array of info about the message
mailparse_msg_get_part -- Returns a handle on a given section in a mimemessage
mailparse_msg_get_structure -- Returns an array of mime section names in the supplied message
mailparse_msg_parse_file -- Parses a file
mailparse_msg_parse -- Incrementally parse data into buffer
mailparse_rfc822_parse_addresses -- Parse RFC 822 compliant addresses
mailparse_stream_encode --  Streams data from source file pointer, apply encoding and write to destfp
mailparse_uudecode_all --  Scans the data from fp and extract each embedded uuencoded file

add a note add a note User Contributed Notes
iwarner at triangle-solutions dot com
21-May-2004 03:31
Also dont forget to LOAD mbstring before you load mailparse

example in the php.ini place in this order:

extension=php_mbstring.dll
extension=php_mailparse.dll

Or you will get an error.

Ian
boris at gamate dot com
12-Sep-2003 01:11
Example how to handle mail content from a variable:

<?php

$buffer
= [...] // Mail Content from pipe or whatever

$mail = mailparse_msg_create();
mailparse_msg_parse($mail,$buffer);
$struct = mailparse_msg_get_structure($mail);

foreach(
$struct as $st) {
  
$section = mailparse_msg_get_part($mail, $st);
  
$info = mailparse_msg_get_part_data($section);
  
  
print_r($info);
}

?>
wberrier at yahoo dot com
09-Jul-2002 07:45
[Authors note:
The tarball for 4.2.x can be found here:
http://thebrainroom.com/opensource/php/mailparse.php
and contains a script called try.php that demonstrates the usage of these functions.
]

I've pasted the contents of the file below:

<?php
/*
 * This is a simple email viewer.
 * make sure that $filename points to a file containing an email message and
 * load this page in your browser.
 * You will be able to choose a part to view.
 * */

$filename = "uumsg";

/* parse the message and return a mime message resource */
$mime = mailparse_msg_parse_file($filename);
/* return an array of message parts - this contsists of the names of the parts
 * only */
$struct = mailparse_msg_get_structure($mime);

echo
"<table>\n";
/* print a choice of sections */
foreach($struct as $st) {
       echo
"<tr>\n";
       echo
"<td><a href=\"$PHP_SELF?showpart=$st\">$st</a></td>\n";
      
/* get a handle on the message resource for a subsection */
      
$section = mailparse_msg_get_part($mime, $st);
      
/* get content-type, encoding and header information for that section */
      
$info = mailparse_msg_get_part_data($section);
       echo
"\n";
       echo
"<td>" . $info["content-type"] . "</td>\n";
       echo
"<td>" . $info["content-disposition"] . "</td>\n";
       echo
"<td>" . $info["disposition-filename"] . "</td>\n";
       echo
"<td>" . $info["charset"] . "</td>\n";
       echo
"</tr>";
}
echo
"</table>";

/* if we were called to display a part, do so now */
if ($showpart)  {
      
/* get a handle on the message resource for the desired part */
      
$sec = mailparse_msg_get_part($mime, $showpart);

       echo
"<table border=1><tr><th>Section $showpart</th></tr><tr><td>";
      
ob_start();
      
/* extract the part from the message file and dump it to the output buff
er
         * */
      
mailparse_msg_extract_part_file($sec, $filename);
      
$contents = ob_get_contents();
      
ob_end_clean();
      
/* quote the message for safe display in a browser */
      
echo nl2br(htmlentities($contents)) . "</td></tr></table>";;
}
?>