【问题标题】:Parse forwarded email body in PHP在 PHP 中解析转发的电子邮件正文
【发布时间】:2012-04-20 11:02:29
【问题描述】:

我需要解析电子邮件正文(可以是文本和html),转发电子邮件,以找到电子邮件的原始发件人(姓名和电子邮件)。

假设约翰向史蒂夫发送电子邮件,史蒂夫转发给马特。 因此,在大多数客户端中,消息将如下所示:

From: John Smith [mailto:john@example.com]
Sent: 02 March 2012 AM 01:23
To: 'Steve'
Subject: Hello Steve

或者

---------- Forwarded message ----------
From: John Smith <ejohn@example.com>
Date: 02 March 2012 AM 01:23
Subject: Hello Steve
To: Steve <steve@example.com>

那么,在这两种情况下,如何从名称和电子邮件值中提取?请注意,我只需要提取此文本的第一次出现,因为“From:...”行可能有多次出现。

【问题讨论】:

  • 您如何以及从何处获取原始格式的电子邮件??
  • 我从 IMAP 服务器获取消息,它们不是原始格式,但消息正文包含这些行,我需要对其进行解析以获取有关原始发件人的信息。

标签: php regex parsing email


【解决方案1】:

使用正则表达式

/^From:\s+(.*?)\s*(?:\[mailto:|<)(.*?)(?:[\]>])$/

您将获得第一个匹配姓名和第二个匹配电子邮件地址


<?php
  $string = "...";
  $pattern = '/^From:\s+(.*?)\s*(?:\[mailto:|<)(.*?)(?:[\]>])$/mi';
  preg_match($pattern, $string, $matches);
  print_r($matches);
?>

有时在姓名联系人的开头和结尾处还有'"。要消除这种情况,请使用:

/^From:\s+["']?(.*?)["']?\s*(?:\[mailto:|<)(.*?)(?:[\]>])$/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2010-09-21
    • 2013-09-22
    相关资源
    最近更新 更多