1

在我的网站所在的共享主机上,我有一个电子邮件转发器,可以将消息作为短信发送到我的手机。然而,最近,它有点失控了。

我希望,使用 cPanel 中的“用户级别过滤”,我可以设置一个基于 RegEx 的过滤器,仅在 07:00:00 到 22:00:00 之间将电子邮件转发到我的手机。

此过滤器将匹配以下电子邮件标头,该标头通常出现在邮件源的 2-3 行中:

Received: by 99.99.99.99 with SMTP id XyXyXyXyXyXyXy;
        Tue, 15 May 2012 01:22:33

...这就是我希望它起作用的方式:

Received: by (ANY IP) with (ANYTHING) id (ANYTHING);
        (Sun|Mon|Tue|Wed|Thu|Fri|Sat), (ANY DATE/MONTH/YEAR) (RegEx magic to match time?)

当匹配成功时(例如,如果时间在 07:00:00 和 22:00:00 之间),消息将被发送到我的手机,否则它什么也不做。(当然,这与 RegEx 本身无关。)

我是一个正则表达式 n00b,但设计了以下(非工作)正则表达式,并且不知道我离它有多近或多远:

\bReceived: by (.*) with [a-Z] id (.*)(Sun|Mon|Tue|Weds|Thu|Fri|Sat),(.*)[0-2][2-7]:[0-2][0-9]:[0-2][0-9]\bsi

有什么想法、建议或创造性的解决方案吗?我的托管服务告诉我,cPanel 中的 RegEx 需要采用 PERL 格式。

4

2 回答 2

1

Eugene 正则表达式的修正版;

/\bReceived: by .*?;\s*(?:Sun|Mon|Tue|Weds|Thu|Fri|Sat),\s*\d+\s+\w+\s+\d+\s+(?:0[789]|1\d|2[01]):\d\d:\d\d\b/

此版本使用非捕获分组,并将可接受时间限制为 07:00:00 到 21:59:59。它假定时间格式是有效的——理论上它会经过 10:99:99 的时间,但我假设你不会看到那些。

于 2012-05-21T18:05:56.560 回答
0

修复了您使用http://gskinner.com/RegExr/工作的问题,但在很大程度上仍然不是最理想的。告诉你是否想更进一步。

\bReceived: by (.*) with \w+ id (.*);\s*(Sun|Mon|Tue|Weds|Thu|Fri|Sat),\s*(\d+\s+\w+\s+\d+)\s+[0-2][0-9]:[0-5][0-9]:[0-5][0-9]\b
于 2012-05-21T17:57:55.767 回答