Я работаю с архивом электронной почты для юридической фирмы, которая получает почту от Postfix и использует PHP-скрипт для вставки сообщений в базу данных. В основном это работает нормально, но иногда регулярное выражение, которое я использую для анализа адресов электронной почты из заголовков From, To и Cc, не фиксирует адреса электронной почты со 100% точностью. Я пробовал другие решения, представленные здесь в stackoverflow (используя filter_var(), используя imap_rfc822_parse_adrlist, используя регулярное выражение в вопросе 1028553) с меньшим успехом, чем то, что у меня есть.
Я хочу свести к минимуму системные вызовы (сейчас я использую слишком много pregs) и повысить точность. Текущая функция принимает текст заголовка (поля 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;
}
getmxrr
чтобы убедиться, что домен имеет действительную запись MX, и вы, вероятно, не ошибетесь. - person CD001   schedule 11.01.2012/^.*([VALID_EMAIL_REGEXP_PART).*$/
в основном, так что любые недопустимые символы до или после адреса электронной почты удаляются? Может быть, нужно немного взглянуть на жадные/нежадные RegExps PHP, но это должно работать. - person CD001   schedule 16.01.2012