mfacious/email

更快的 MIME 邮件解析器可以用于解析 MIME 格式的电子邮件。

dev-master 2019-09-18 08:43 UTC

This package is auto-updated.

Last update: 2024-09-18 20:07:20 UTC


README

更快的 MIME 邮件解析器可以用于解析 MIME 格式的电子邮件。

使用方法

基本用法如下

$file = fopen('path/to/file.eml', 'r');
$message = \bashkarev\email\Parser::email($file);

$message->textHtml();

$message->getParts();
$message->getAttachments();

设置

有一些设置可用。

  • charset - 要使用的字符集。应仅以大写字母指定。默认是 UTF-8

    \bashkarev\email\Parser::$charset = "WINDOWS-1251";
  • buffer - 以字节为单位的读取缓冲区大小。默认是 500000

    \bashkarev\email\Parser::$buffer = 4096;

附件

支持附件解析。

将附件保存到文件

保存到文件可以按以下方式完成

$file = fopen('path/to/file.eml', 'rb');
$message = \bashkarev\email\Parser::email($file);
foreach ($message->getAttachments() as $attachment) {
    $attachment->save('dir/' . $attachment->getFileName('undefined'));
}

将附件流式传输到输出

为了直接将附件流式传输到输出,您需要执行以下操作

$file = fopen('path/to/file.eml', 'rb');
$message = \bashkarev\email\Parser::email($file);
$attachment = $message->getAttachments()[0];
header("Content-Type: {$attachment->getMimeType()};");
header("Content-Disposition: attachment; filename=\"{$attachment->getFileName('undefined')}\"");
$attachment->getStream()->copy(fopen('php://output', 'c'));

message/partial

$block = \bashkarev\email\Parser::email([
    fopen('path/to/part.1.eml', 'rb'),
    fopen('path/to/part.2.eml', 'rb'),
]);
$block->getMessage();

message/rfc822

$file = fopen('path/to/file.eml', 'rb');
$container = \bashkarev\email\Parser::email($file);
$message = $container->getAttachments()[0]->getMessage();

message/feedback-report

$file = fopen('path/to/file.eml', 'rb');
$container = \bashkarev\email\Parser::email($file);
foreach ($container->getAttachments() as $attachment) {
    if ($attachment->getMimeType() === 'message/feedback-report') {
        /**
         * @var \bashkarev\email\messages\Feedback $feedback
         */
        $feedback = $attachment->getMessage();
        $feedback->getType(); // Feedback::TYPE_ABUSE ...
    }
}

message/external-body

支持类型:url、local-file、ftp。

FTP 认证

$file = fopen('path/to/file.eml', 'rb');
$container = \bashkarev\email\Parser::email($file);
foreach ($container->getAttachments() as $attachment) {
    if ($attachment->getStream() instanceof \bashkarev\email\transports\Ftp) {
        /**
         * @var \bashkarev\email\transports\Ftp $transport
         */
        $transport = $attachment->getStream();
        $transport->username = 'username';
        $transport->password = '******';
        $attachment->save('dir/' . $attachment->getFileName('undefined'));
    }
}