用正则表达式替换用户的电子邮件地址域

时间:2019-07-05 18:28:53

标签: regex email office365

我正在尝试解决与Exchange Online的电子邮件域共存问题。基本上我需要它,因此,当邮件发送到一个租户(domain.com)并转发给另一租户(newdomain.com)时,To和/或CC标头将替换为端点(newdomain.com)电子邮件地址,然后再发送他们被交付到最终目的地。

例如:

1)Gmail(或任何用户)向sally.sue@domain.com发送并发送电子邮件,查找该域的MX,并将其传递到domain.com的Office 365租户

2)该Office 365租户已设置为将电子邮件转发到sally.sue@newdomain.com(不同的租户)

3)当邮件到达sally在newdomain.com上起诉时,她单击“全部答复”,原始发件人及其电子邮件地址(sally.sue@domain.com)被添加到电子邮件的“收件人:”行中。

解决方法是使用带有Proofpoint的标头替换,如下所述,该替换仅在单个用户的基础上起作用。下面的整个问题是我试图让RegEx(这是唯一的解决方案)对大量用户起作用。

我需要转换以下用户的电子邮件地址:

username@domain.com到username@newdomain.com

必须使用ProofPoint(云托管的MTA)完成此操作。他们已经能够提供某种答案,但是没有用。

Proofpoint支持建议使用以下方法:

Header Name : To
Find Value  : domain\.com$
Replace     : newdomain\.com$ or just newdomain.com 

以上两种方法均无效。在这两种情况下,值都将被完全忽略。

这似乎是在找到值:

Header Name : To
Find Value  : \b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
Replace     : $1@fake.com

但是以上内容只是简单地将To:行(在电子邮件中)替换为文字字符串:$1@fake.com

我还需要能够在电子邮件地址中找到小写字母和数字。我相信上面的例子只能找到上限。

我需要执行以下操作:

Header Name : To
Find Value  : \b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b (find users email address, domain) 
Replace     : user.name@newdomain.com 

这适用于大量用户,因此无法为每个用户手动更新或创建单独的规则。

如果我确实创建了一条单独的规则,则它会按预期工作,但如上所述,这需要手动键入每个用户的“收件人:”地址及其新的所需“收件人:”地址。

此解决方案几乎可以正常工作:Regex to replace email address domains?

1 个答案:

答案 0 :(得分:0)

尽管我没有专门使用Office365,但我有一些从一般经验中得出的结论。

首先,用于替换的正则表达式通常需要具有“捕获组”。通常用括号表示,如:

match       : \b([A-Z0-9._%-]+)@domain.com$
replacement : $1@newdomain.com

这个想法是,替换模式中的$1被匹配模式中()中发现的内容所替换。

请注意,某些正则表达式引擎使用不同的符号进行替换,因此它可能是\1@newdomain.com或类似的符号。另请注意,某些正则表达式引擎需要转义括号,因此匹配的模式可能类似于\b\([A-Z0-9._%-]+\)@domain.com$

第二,如果要将-包含在“字符类”集合中(即,在方括号[]中),则-应该位于第一;否则会造成歧义,因为-也用于一系列字符。有问题的正则表达式引擎可能不在乎,但我建议将匹配模式编写为:

\b([-A-Z0-9._%]+)@domain.com$

这样,第一个-本身就很明确,因为在它之前没有任何内容可以指示范围的开始。

第三,对于小写字母,最简单的方法是扩展字符集以包含它们,如下所示:

[-A-Za-z0-9._%]