我需要使用php解析mbox或电子邮件文件,也就是说我会传递包含多封电子邮件的文件.mbox或.eml,并将其解析为其成员,例如from,to,bcc等。
是否有任何库可以执行此操作,或者有任何关于如何在php中执行此操作的代码?
thansk
答案 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:
答案 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;
?>
希望这有帮助!