Убрать адреса электронной почты из строки в PHP

Я управляю архивом электронной почты для юридической фирмы, которая получает почту от Postfix и использует PHP-скрипт для вставки сообщений в базу данных. Это работает в основном нормально, но иногда регулярное выражение, которое я использую для анализа адресов электронной почты из заголовков From, To и Cc, не захватывает адреса электронной почты со 100% точностью. Я попробовал другие решения, изложенные здесь, на stackru (используя filter_var(), используя imap_rfc822_parse_adrlist, используя регулярное выражение в вопросе 1028553) с фактически меньшим успехом, чем у меня.

Я пытаюсь свести к минимуму системные вызовы (сейчас я использую слишком много прегов) и повысить точность. Текущая функция принимает текст заголовка (поля From, To или Cc) и возвращает "чистые" адреса электронной почты без скобок, кавычек, комментариев и т. Д.

Буду признателен за любую помощь, кто может оказать, как я в тупик!

Венди

Моя функция:

function return_proper ($email_string) {
if (is_array($email_string)) {
    $x = "";
    foreach ($email_string as $val) {
        $x .= "$val,";
    }
    $email_string = substr($x, 0, -1);
}

$email_string = strtolower(preg_replace('/.*?([A-Za-z0-9\_\+\.\'-]+@[A-Za-z0-9\.-]+).*?/', '$1,', $email_string));
$email_string = preg_replace('/\>/', "", $email_string);
$email_string = preg_replace('/,$/', "", $email_string);
$email_string = preg_replace('/^\'/', "", $email_string);
return $email_string;
}

1 ответ

function return_proper($email_string) {
    if (is_array($email_string)) {
        // Deal with array
        foreach ($email_string as $email_string_line) {
            $results[] = return_proper($email_string_line);
        }

        $result = implode(',', $results);
    } else {
        preg_match_all('/[A-Za-z0-9\_\+\.\'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]+/', $email_string, $matches);

        $result = implode(',', $matches[0]);
    }

    return strtolower($result);
}
Другие вопросы по тегам