Извлечь адрес электронной почты из файлов eml

Привет, у меня есть папка на моем MacBookPro с кучей файлов eml из моего Outlook 2011. Я пытаюсь получить из них адреса электронной почты, но все ссылки, которые я нашел, требуют, чтобы я купил программное обеспечение или код в чем-то вроде С#.

Неужели это так сложно? Все, что я пытаюсь сделать, это получить список адресов электронной почты из кучи старых писем.

Я немного знаю Python, R и SQL. Если кто-нибудь может дать мне несколько советов о том, как легко вытащить адреса электронной почты из в текстовый файл или преобразовать файлы eml в csv без покупки программного обеспечения или кодирования на С#, я был бы очень признателен.


person user3476463    schedule 30.09.2015    source источник
comment
у тебя установлен php? вы можете проверить это, открыв терминал и запустив php -v, если это так, я могу попытаться поработать над решением.   -  person Pedro Lobito    schedule 30.09.2015
comment
Кажется, что это просто текстовый файл. Так что вам просто нужно их разобрать.   -  person Larme    schedule 30.09.2015


Ответы (2)


С php вы можете сделать что-то вроде:

extract.php

<?php
$emails = array();

foreach(rglob("*.eml") as $eml){
    $emlContent = file_get_contents($eml);
    preg_match_all('/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6})/i', $emlContent, $matches, PREG_PATTERN_ORDER);
    for ($i = 0; $i < count($matches[1]); $i++) {
        $emails[] .= $matches[1][$i];
    }
}


$emails = array_unique($emails);
print_r($emails);


function rglob($pattern='*', $flags = 0, $path='')
{
    $paths=glob($path.'*', GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT);
    $files=glob($path.$pattern, $flags);
    foreach ($paths as $path) { $files=array_merge($files,rglob($pattern, $flags, $path)); }
    return $files;
}

Использование:

Поместите extract.php в папку с файлами eml и запустите из терминала php extract.php

person Pedro Lobito    schedule 30.09.2015
comment
Это регулярное выражение будет извлекать только адреса электронной почты отправителя вместо того, чтобы включать все адреса (от, кому, содержимое электронной почты, ...) preg_match_all('/From: =[^\n]+‹([A-Z0-9._ %+-]+@[A-Z0-9.-]+\.[AZ]{2,6})›/i', $emlContent, $matches, PREG_PATTERN_ORDER); - person migli; 09.05.2021
comment
Приведенный выше код извлечет любой адрес электронной почты из файла eml. - person Pedro Lobito; 09.05.2021
comment
Вы можете настроить регулярное выражение, чтобы принимать новые tld длиннее 6 символов ([A-Z]{2,6}) - person Pedro Lobito; 09.05.2021
comment
Это регулярное выражение для электронных писем очень часто используется (и такое же, как в вашем ответе). Я не нашел официального лимита на расширение tld, у вас есть ссылка? Наконец-то я написал свой собственный скрипт, добавлю сюда новый ответ. - person migli; 10.05.2021

Мне нужна была та же функция в готовом сценарии, поэтому я написал свой собственный.

В двух словах:

  • Откройте Extractor.php в вашем браузере с URL-адреса PHP-сервера.
  • Выберите папку на жестком диске, где находятся файлы .eml.
  • Выберите, хотите ли вы извлечь адреса отправителей, получателей и / или из содержимого электронных писем.
  • Нажмите кнопку Найти адреса электронной почты

Инструмент рекурсивно проанализирует вашу папку и покажет адреса электронной почты в текстовом поле.

Извлечение адресов электронной почты доступно на Github здесь: https://github.com/migliori/email-address-extractor

person migli    schedule 10.05.2021