анализ почтового ящика (mbox или mbx) php - PullRequest
3 голосов
/ 18 мая 2011

Мне нужно проанализировать файлы mbox или email, используя php, то есть я передам файл .mbox или .eml, содержащий несколько писем, и проанализирую его по составляющим, например, от, до, скрытая копия и т. Д.

есть ли библиотека, которая делает это, или какой-либо код о том, как это сделать в php?

thansk

Ответы [ 4 ]

6 голосов
/ 18 мая 2011

Для этого есть класс PEAR http://pear.php.net/package/Mail_Mbox.

Хотя разделить файл .mbox вручную не сложно.Отдельные письма просто разделяются /^From\s/ (может никогда не отображаться в теле письма) и блоком Headers:.И большинство почтовых приложений также хранят поле длины там.Но действительно проще использовать готовый скрипт для обработки всех вариантов.

4 голосов
/ 24 мая 2011

Класс PEAR, указанный выше, работает для получения отдельных сообщений из MBOX, но если вы хотите затем также проанализировать сообщение в составляющие его элементы, такие как «С адреса», «Вложения» и т. Д., Я бы порекомендовал mime_parser. .php

На самом деле mime_parser.php может также обрабатывать извлечение сообщений из MBOX, поэтому в зависимости от ваших потребностей вам может не понадобиться класс PEAR.

2 голосов
/ 18 мая 2011

Вот модуль PEAR Mail_Mbox для анализа данных mbox:

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

0 голосов
/ 24 июня 2017

если вам нужно что-то быстрее для небольших нужд, например, извлеките все письма, собранные вами в 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;
?>

надеюсь, что это поможет!

...