【问题标题】:parsing email attachments in php用php解析电子邮件附件
【发布时间】:2012-11-19 02:16:38
【问题描述】:

我有一个 .forward.postix 将传入的电子邮件传送到一个 shell 帐户,然后传送到一个解析电子邮件的 PHP 脚本 - 太棒了。

到目前为止,根据我在网上看到的所有内容,我正在使用explode('From: ', $email); 方法将所有内容拆分为我的数据库所需的变量。

输入附件!使用相同的方法,我这样做是为了提取一个 jpg 附件 - 但似乎并非每个电子邮件客户端都以相同的方式格式化原始源,这引起了一些头痛!

$contentType1 = explode('Content-type: image/jpg;', $email); //start ContentType
$contentType2 = explode("--Boundary_", $contentType1[1]); //end ContentType

$jpg1 = explode("\n\n", $contentType2[0]); //double return starts base64 blob
$jpg2 = explode("\n\n", $jpg1[1]); //double return marks end of base64 blob

$image = base64_decode($jpg2[0]); //decode base64 blob into jpg raw

这是我的问题: 并非所有邮件客户端(例如 GMail)都将附件列为'Content-type: image/jpg'。 GMail 输入'Content-Type: IMAGE/JPEG',有时以'Content-Type: image/jpeg' 发送!哪个不符合我的爆炸...

我的问题:有人知道找到 base64 blob 边界的更好方法吗?或者可能是一种不区分大小写的方式来爆炸'Content-Type:',这样我就可以尝试针对image/jpgimage-jpeg 来查看匹配的内容?

【问题讨论】:

  • 附加说明:我建议您使用正则表达式来匹配您的标题语句而不是explode。
  • 您是否尝试过使用 PHP 内置的 IMAP 功能?我过去已经成功地实施了一个解决方案

标签: php base64 explode email-attachments


【解决方案1】:

您可以尝试使用preg_split() 拆分字符串。也许是这样的

$pattern = '#content-type: image/jpe?g#i';
$split_array = preg_split($pattern, $email);

【讨论】:

  • 看,我知道有一种方法可以编写一个可以解决我所有问题的模式 - 但这些模式对我来说毫无意义,我终生无法找到做什么做什么。我猜e? 使 e 可选,而最后的i 使其不区分大小写?谢谢朋友!
  • @JoelHackney 是的,? 表示可以有 0 或 1 或前面的模式组件。模式修饰符i 使匹配不区分大小写,正如您所猜测的那样。
  • @JoelHackney 请注意我修改后的答案。我刚刚注意到我搜索了image.jpe?g(如文件名)而不是image/jpe?g(内容类型)
  • 是的,我正要说我无法让以前的模式工作 - 有了你的修订,它完美地工作!
猜你喜欢
  • 1970-01-01
  • 2021-05-18
  • 2011-02-10
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2011-06-16
  • 2012-08-23
  • 1970-01-01
相关资源
最近更新 更多