3

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

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

谢谢

4

4 回答 4

6

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

尽管手动分离 .mbox 文件并不难。单个邮件仅由/^From\s/(可能永远不会出现在邮件正文中)和一个Headers:. 大多数邮件应用程序也会在其中存储一个长度字段。但是使用现成的脚本来处理所有的变化确实更容易。

于 2011-05-18T12:48:57.243 回答
4

上面的 PEAR 类用于从 MBOX 中获取单个消息,但如果您还想将消息解析为其组成元素,如“发件人地址”、“附件”等,那么我会推荐mime_parser.php

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

于 2011-05-24T19:46:36.820 回答
2

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

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

于 2011-05-18T12:48:49.763 回答
0

如果你需要一些更快的东西来满足小需求,比如通过分组到标签中提取你收集到 gmail 的所有电子邮件并使用谷歌外卖导出,以便导入列表让我们说给 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;
?>

希望这有帮助!

于 2017-06-24T20:35:41.957 回答