我为一家从 Postfix 接收邮件并使用 PHP 脚本将消息插入数据库的律师事务所操作电子邮件存档。这工作得很好,但有时我用来从 From、To 和 Cc 标头解析电子邮件地址的正则表达式无法以 100% 的准确率捕获电子邮件地址。我已经尝试过在 stackoverflow 上提出的其他解决方案(使用 filter_var(),使用 imap_rfc822_parse_adrlist,使用问题 1028553 中的正则表达式),但实际上没有我所拥有的成功。
我希望尽量减少系统调用(我现在使用太多的 pregs)并提高准确性。当前函数接受标题文本的输入(发件人、收件人或抄送字段)并返回去掉括号、引号、注释等的“干净”电子邮件地址。
任何人都可以提供任何帮助将不胜感激,因为我很难过!
温迪
我的功能:
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;
}