如何从此电子邮件中提取嵌入的附件名称?

时间:2009-06-12 13:46:17

标签: php regex email

我的正则表达能力......糟糕。我有这个电子邮件正文。

Hello World

[cid:image002.png@01C9DEDD.67C237D0]

Hello World

[cid:image002.png@01C9DEDD.67C237D0] [cid:image002.png@01C9DEDD.67C237D0]

Hello World

我需要的是一个文件名数组。

preg_match_all("/\[cid:(.*)\@/", $string, $matches);

echo "<pre>";
    print_r($matches);
echo "</pre>";

我得到的第一个文件名很好。但不是第二和第三。

[0] => image002.png
[1] => image002.png@01C9DEDD.67C237D0] [cid:image002.png

如何更改此正则表达式以使其适用于电子邮件正文中的任何嵌入文件?

3 个答案:

答案 0 :(得分:5)

我认为您可以将表达式更改为:

"/\[cid:(.*?)\@/"

使比赛变得非贪婪。

以下是一些可用于测试表达式的工具:

答案 1 :(得分:0)

尝试:

preg_match_all("/\[cid:([^@]*)/", $string, $matches);
编辑:原帖有错误 - 道歉!我试图以不正确的方式缩短贪婪。

答案 2 :(得分:0)

请注意,如果您拥有整个电子邮件(标题和所有内容),您将通过从电子邮件标题而不是正文中提取文件名来获得更一致的结果(其格式严重依赖于邮件软件链,电子邮件在到达之前通过了。)

阅读MIME,多部分邮件和MIME标头,了解如何执行此操作:http://en.wikipedia.org/wiki/Multipart_message#MIME_headers