1

私は Postfix MTA を使用しており、次の形式で送信される壊れた MTA (私の管理下にないため修正できません) から重要なメールを受け取ります。

RCPT TO: <+49 (681) 12345678>

私が必要とするのは:

RCPT TO: 4968112345678

そこで、文字列が「RCPT TO:」で始まるかどうかを最初にチェックする正規表現を探しています。これが真の場合は、その後のすべての特殊文字を削除する必要があるため、[a-zA-Z0-9] のみが左。

Postfix はそのような正規表現の例を出荷しています:

# Work around clients that send RCPT TO:<'user@domain'>.
# WARNING: do not lose the parameters that follow the address.
#/^RCPT\s+TO:\s*<'([^[:space:]]+)'>(.*)/     RCPT TO:<$1>$2

しかし、数時間後、私はそれを自分のニーズに適応させることができません.

前もって感謝します、マルコ

4

2 に答える 2

4

一般的なケースでは、英数字以外の文字の組み合わせを取り除くことはできないようです。しかし、例で与えられたようなアドレスの場合、この正規表現で十分なはずです:

/^[^a-z0-9]*([a-z0-9]+)[^a-z0-9]*([a-z0-9]+)[^a-z0-9]*([a-z0-9]+)$/     $1$2$3

postmap コマンドで正規表現マップをテストできます。

$ postmap -q "+49 (681) 12345678" pcre:/path/to/regexp_map
4968112345678

この正規表現マップを使用するには、postfix config に追加します

canonical_maps = prce:$config_directory/regexp_map

canonical_maps についてADDRESS_REWRITING_READMEを読んでください。

于 2012-12-06T14:35:43.630 に答える
1

試してください:/[^RCPT\sTO\:\s]([a-zA-Z0-9]+)/すべての英数字の値を除外して、49 681 12345678. [1] .

別のより良い方法は、すべての不要な文字 をブラックリストに登録することもオプションですが、最適とは言えません。/([^<+\)\(>]+)/になりますRCPT TO: 49 681 12345678[2]

または、最適なオプションは、単語の文字 (文字、数字、アンダースコア) をキャプチャし/(\w+|:)/RCPT TO: 49 681 12345678[3]

これはすべて rubular でテストされており、Postfix MTA については知りません。しかし、これが役立つことを願っています。

パーマリンク:

  1. http://www.rubular.com/r/Uapn2m52yk
  2. http://www.rubular.com/r/015iyaNG3T
  3. http://www.rubular.com/r/mmJZBNbH99
于 2012-12-06T14:49:29.037 に答える