1

Postfix からメールを受信し、PHP スクリプトを使用してメッセージをデータベースに挿入する法律事務所の電子メールのアーカイブを運用しています。これはほとんど問題なく動作しますが、From、To、および Cc ヘッダーから電子メール アドレスを解析するために使用する正規表現では、100% の精度で電子メール アドレスを取得できないことがあります。私はstackoverflowでここに提起された他の解決策を試しました(filter_var()を使用し、imap_rfc822_parse_adrlistを使用し、質問1028553の正規表現を使用して)、実際には私が持っているものよりも成功していません。

システム コールを最小限に抑え (現在、あまりにも多くの preg を使用しています)、精度を高めたいと考えています。現在の関数は、ヘッダー テキスト (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;
}
4

1 に答える 1

0
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);
}
于 2012-01-19T10:47:46.613 に答える