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

要使用这个正则表达式映射添加到后缀配置

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 回答