解析邮箱(mbox或mbx)php

时间:2011-05-18 12:18:19

标签: php parsing email mbox

我需要使用php解析mbox或电子邮件文件,也就是说我会传递包含多封电子邮件的文件.mbox或.eml,并将其解析为其成员,例如from,to,bcc等。

是否有任何库可以执行此操作,或者有任何关于如何在php中执行此操作的代码?

thansk

4 个答案:

答案 0 :(得分:6)

有一个PEAR课程http://pear.php.net/package/Mail_Mbox

虽然手动分离.mbox文件并不困难。单个邮件简单地由/^From\s/(可能永远不会出现在邮件正文中)和Headers:块组成。大多数邮件应用程序还在那里存储一个长度字段。但是使用现成的脚本处理所有变体确实更容易。

答案 1 :(得分:4)

上面的PEAR类用于从MBOX中获取单个消息,但如果您还要将消息解析为其组成元素,如“From Address”,“Attachments”等,那么我建议{{3} }

实际上mime_parser.php也可以处理从MBOX中提取消息,因此根据您的需要,您可能不需要PEAR类。

答案 2 :(得分:2)

以下是用于解析mbox数据的PEAR模块Mail_Mbox:

https://pear.php.net/manual/en/package.mail.mail-mbox.php

答案 3 :(得分:0)

如果你需要更快的东西来满足小需求,比如你通过分组到标签中并将你收集的所有电子邮件提取到gmail中并导出google takeout以便导入列表让我们说到mailchimp ......

<?php
// tested with google mail > account > privacy > data exporter (with label)
// https://takeout.google.com/settings/takeout
$raw = file_get_contents('emails.mbox');

preg_match_all('/^Reply-To:\s(.*)$/im', $raw, $matches);

// avoid duplicate
$emails = array_unique($matches[1]);

$filtered_out = '';

// CSV field example (tested with mailchimp)
$filtered_in = 'Email Address' . "\n";
foreach ($emails as $email) {
    $email = strtolower($email);
    // filter out invalid emails, rarely 
    // happens that exporters makes mistakes ;)
    // for example xxxxxxxxx@gmail.comx.xxxxxxxxxx.org
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $filtered_in .= $email . "\n";
    } else {
        $filtered_out .= $email . "\n";
    }
}

header('Content-Type: text/plain');
// save to file
// file_put_contents('emails.csv', $filtered_in);
echo $filtered_in;
?>
希望这有帮助!