【问题标题】:PHP - Filtering Email Body, Removing Reply QuotesPHP - 过滤电子邮件正文,删除回复引用
【发布时间】:2011-07-16 23:39:16
【问题描述】:

我正在编写一个电子邮件管道脚本,该脚本只需要保存回复内容,而不是原始引用的电子邮件。我正在使用 mime 解析器类 (http://www.phpclasses.org/package/3169-PHP-Decode-MIME-e-mail-messages.html) 从电子邮件中获取我需要的所有信息:

Message ID: AANLkTimYRxMJwjLSdcDP5ksM=xxx@mail.gmail.com
Reply ID: 20110316205225.xxx@example.com

Subject: Re: MessageX
To:  q1-1234567890@example.com
From: Someone someone@someothersite.com

Body: Hello,
Blah Blah Blah
-Someone

On Wed, Mar 16, 2011 at 3:52 PM,  <q1-1234567890@example.com> wrote:
> Hello,
>
> Some other blah, blah, blah.
>
> Thank you,
> Me

在正文部分,我收到了原始引用的电子邮件。我怎样才能过滤掉这个?我知道电子邮件客户经常在引用的内容旁边添加“>”,但我不确定这是否足够好。感谢您的帮助。

【问题讨论】:

  • 这听起来有点像您正在对系统进行某种客户支持类型的电子邮件回复。我经常在原文中看到类似“==============REPLY ABOVE ABOVE ABOVE ABOVE THIS LINE==================”的字符串电子邮件给“客户”,然后可以很容易地找到它,并将删除所有的回复报价。这显然可能根本不是您想要做的,但它也可能是您的有效选择。

标签: php email piping


【解决方案1】:

这可以通过正则表达式来实现。试试:

$text = preg_replace('#(^\w.+:\n)?(^>.*(\n|$))+#mi', "", $text);

【讨论】:

  • 感谢您的快速回答,到目前为止运行良好。在任何情况下这可能不起作用?
  • 肯定有电子邮件客户端允许或在邮件中逐字使用&gt;。或者,如果您通过电子邮件发送源代码或差异等。为了使其更具弹性,您可以在正则表达式中将最后一个 + 交换为 {2,}。这样,它只会匹配至少两个连续的&gt; 行,这肯定表明它是被引用的部分。
  • 这个问题永远不会有完美的解决方案。它可能(尽管不太可能)在电子邮件中包含看似已回复部分的内容。考虑this snippet 的第 10 到 13 行(我修改了您的原始示例)。很有可能,这些行最终会被删除。
  • 好吧,我认为它运作良好。一个问题:# 符号在正则表达式中的作用是什么?我找不到任何关于它的信息。非常感谢您的帮助。
  • @davishmcclurg,# 只是替代的正则表达式分隔符。使用#...*# 等价于/...*/
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 2013-09-04
  • 2013-07-30
  • 2017-05-16
  • 1970-01-01
  • 2016-08-08
相关资源
最近更新 更多