如何使用PHP从Outlook邮件正文中提取URL链接
PHP提取Outlook邮件正文URL的实现方案
前置处理:解码Quoted-Printable编码
通过IMAP接口获取的Outlook邮件默认会用Quoted-Printable编码,你提供的样例中出现的genera= ted、3D"就是编码特征,需要先解码得到正常文本才能准确匹配:
// $rawImapContent 是你通过imap功能拿到的原始邮件正文 $decodedContent = quoted_printable_decode($rawImapContent);
正则匹配方案
针对HTTP/HTTPS开头的标准URL,使用以下正则即可覆盖绝大多数场景:
/https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)/
完整的PHP调用代码如下:
// 解码原始内容 $decodedContent = quoted_printable_decode($rawImapContent); // URL匹配正则 $pattern = '/https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)/'; // 执行匹配 preg_match_all($pattern, $decodedContent, $matches); // 提取所有匹配到的URL $extractedUrls = $matches[0];
效果验证
用你提供的样例正文运行上述代码,最终得到的匹配结果为:https://thomsonreuters.sendthisfile.com/sample
完全符合需求。
可选优化点
- 若需要匹配不带HTTP/HTTPS前缀的裸域名,可将正则开头的
https?:\/\/调整为可选规则,你当前需要提取的是文件下载链接,均带HTTPS前缀,现有正则足够使用 - 若遇到包含特殊字符的非常规URL,可根据实际业务场景扩充正则中允许的字符范围
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

