【发布时间】:2012-04-30 23:50:25
【问题描述】:
我想解析规范中正式定义的RFC822 (SMTP)“已接收”行的元素,例如:
原子 = 1* [...] 收到=“收到”“:”;每个继电器一个 [“来自”域] ;发送主机 [“按”域] ;接收主机 [“通过”原子];物理路径 *("with" 原子) ;链接/邮件协议 ["id" 味精-id] ;接收方消息 ID ["for" 地址规范] ;初始形式 “;”约会时间 ;收到时间 [...] msg-id = "" ;唯一消息 ID [...] addr-spec = 本地部分“@”域;全球地址 等用于域、日期时间等。这是一个真实的例子:
收到:来自 ll-194.132.162.89.kv.sovam.net.ua (ll-194.132.162.89.kv.sovam.net.ua [83.170.243.194] (可能是伪造的)) by raq2073.uk2.net (8.10.2/8.10.2) 与的 ESMTP id 为 lASHDDE10765;格林威治标准时间 2007 年 11 月 28 日星期三 17:13:13
正则表达式是捕获接收行的一部分的好策略吗?
我意识到许多 SMTP 服务器没有正确格式化接收到的行(在现实生活中)。
否则,有谁知道 Java 中的库可以很好地做到这一点?
编辑这是一个fiddle,显示了我已经尝试了一段时间的正则表达式和测试,这似乎有效。
Received:\s+(?:from\s+(.+?))?(?:\(qmail (.+?)\))?(?:\s+by\s+(.+?))?(?:\\s+via\s+(.+?))?(?:\s+with\s+(.+?))?(?:\;?\s+id\s+(.+?))?(?:\s+for\s+(.+?))?(?:;\s*(?!.*\;.*)(.+))?$
【问题讨论】: