承接 pecl/mailparse 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

pecl/mailparse

Composer 安装命令:

pie install pecl/mailparse

包简介

Email message manipulation

README 文档

README

Mailparse is an extension for parsing and working with email messages.

It can deal with rfc822 and rfc2045 (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.

Version 2.1.6 is for PHP 5

OO Syntax

<?php
$file = "/path/to/rfc822/compliant/message";
// parse the message in $file.
// The file MUST remain in existence until you are finished using
// the object, as mailparse does not cache the file in memory.
// You can also use two alternative syntaxes:
//
// Read the message from a variable:
//   $msg = new MimeMessage("var", $message);
//
// Read the message from a stream (from fopen).
// The stream MUST be seekable, or things will not work correctly.
// Also, you MUST NOT fclose the stream until you have finished
// using the message object (or any child objects it returns).
//   $msg = new MimeMessage("stream", $fp);
//
$msg = new MimeMessage("file", $file);

// Process the message.
display_part_info("message", $msg);

// Little function to display things
function display_part_info($caption, &$msgpart)
{
	echo "Message part: $caption\n";

	// The data member corresponds to the information
	// available from the mailparse_msg_get_part_data function.
	// You can access a particular header like this:
	//   $subject = $msgpart->data["headers"]["subject"];
	var_dump($msgpart->data);

	echo "The headers are:\n";
	// Display the headers (in raw format) to the browser output.
	// You can also use:
	//   $msgpart->extract_headers(MAILPARSE_EXTRACT_STREAM, $fp);
	//     to write the headers to the supplied stream at it's current
	//     position.
	//
	//   $var = $msgpart->extract_headers(MAILPARSE_EXTRACT_RETURN);
	//     to return the headers in a variable.
	$msgpart->extract_headers(MAILPARSE_EXTRACT_OUTPUT);

	// Display the body if this part is intended to be displayed:
	$n = $msgpart->get_child_count();

	if ($n == 0) {
		// Return the body as a string (the MAILPARSE_EXTRACT parameter
		// acts just as it does in extract_headers method.
		$body = $msgpart->extract_body(MAILPARSE_EXTRACT_RETURN);
		echo htmlentities($body);

		// This function tells you about any uuencoded attachments
		// that are present in this part.
		$uue = $msgpart->enum_uue();
		if ($uue !== false) {
			var_dump($uue);
			foreach($uue as $index => $data) {
				// $data => array("filename" => "original filename",
				//                "filesize" => "size of extracted file",
				//               );

				printf("UUE[%d] %s (%d bytes)\n",
					$index, $data["filename"],
					$data["filesize"]);

				// Display the extracted part to the output.
				$msgpart->extract_uue($index, MAILPARSE_EXTRACT_OUTPUT);

			}
		}

	} else {
		// Recurse and show children of that part
		for ($i = 0; $i < $n; $i++) {
			$part =& $msgpart->get_child($i);
			display_part_info("$caption child $i", $part);
		}
	}
}

The rest of this document may be out of date! Take a look at the mailparse section of the online manual for more hints about this stuff.

$mime = mailparse_rfc2045_parse_file($file); $ostruct = mailparse_rfc2045_getstructure($mime); foreach($ostruct as $st) { $section = mailparse_rfc2045_find($mime, $st); $struct[$st] = mailparse_rfc2045_getinfo($section); } var_dump($struct); ?> array mailparse_rfc822_parse_addresses(string addresses) parses an rfc822 compliant recipient list, such as that found in To: From: headers. Returns a indexed array of assoc. arrays for each recipient: array(0 => array("display" => "Wez Furlong", "address" => "wez@php.net"))

resource mailparse_rfc2045_create() Create a mime mail resource

boolean mailparse_rfc2045_parse(resource mimemail, string data) incrementally parse data into the supplied mime mail resource. Concept: you can stream portions of a file at a time, rather than read and parse the whole thing.

resource mailparse_rfc2045_parse_file(string $filename) Parse a file and return a $mime resource. The file is opened and streamed through the parser. This is the optimal way of parsing a mail file that you have on disk.

array mailparse_rfc2045_getstructure(resource mimemail) returns an array containing a list of message parts in the form: array("1", "1.1", "1.2")

resource mailparse_rfc2045_find(resource mimemail, string partname) returns an mime mail resource representing the named section

array mailparse_rfc2045_getinfo(resource mimemail) returns an array containing the bounds, content type and headers of the section.

mailparse_rfc2045_extract_file(resource mimemail, string filename[, string callbackfunc]) Extracts/decodes a message section from the supplied filename. If no callback func is supplied, it outputs the results into the current output buffer, otherwise it calls the callback with a string parameter containing the text. The contents of the section will be decoded according to their transfer encoding - base64, quoted-printable and uuencoded text are supported.

All operations are done incrementally; streaming the input and output so that memory usage is on the whole lower than something like procmail or doing this stuff in PHP space. The aim is that it stays this way to handle large quantities of email.

TODO:

. Add support for binhex encoding? . Extracting a message part without decoding the transfer encoding so that eg: pgp-signatures can be verified.

. Work the other way around - build up a rfc2045 compliant message file from simple structure information and filenames/variables.

vim:tw=78 vim600:syn=php:tw=78

pecl/mailparse 适用场景与选型建议

pecl/mailparse 是一款 基于 C 开发的 Composer 扩展包,目前已累计 4.76k 次下载、GitHub Stars 达 36, 最近一次更新时间为 2025 年 05 月 19 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 pecl/mailparse 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 pecl/mailparse 我们能提供哪些服务?
定制开发 / 二次开发

基于 pecl/mailparse 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 4.76k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 36
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 36
  • Watchers: 9
  • Forks: 35
  • 开发语言: C

其他信息

  • 授权协议: PHP-3.01
  • 更新时间: 2025-05-19