【问题标题】:PHP Regex email parser only works on mail sent from Live/HotmailPHP Regex 电子邮件解析器仅适用于从 Live/Hotmail 发送的邮件
【发布时间】:2014-12-17 04:50:00
【问题描述】:

我有一个脚本,它使用以下正则表达式来解析发送到服务器的电子邮件

$prefixes = ['/^From:(.*)/', '/^To:(.*)/', '/^Subject:(.*)/'];

while (!feof($email))
{
    while ($line = fgets($email))
    {
        foreach ($prefixes as $prefix)
        {
            if (preg_match($prefix, $line, $matches))
            {
                $data[] = trim($matches[1]);
            }
        }
    }
}

它应该找到任何带有From:To:Subject: 的行,然后将这些值插入到数据库中。

但是,这仅适用于 Microsoft 发送的电子邮件,不适用于 Gmail。

我修改了脚本以将原始输入记录到文件中,来自 Microsoft 和 Gmail 的电子邮件都有相同的 From:To:Subject: 行,所以我不知道为什么会这样'没有正确存储值。

【问题讨论】:

  • 他们进来的顺序可能不同,不确定这个正则表达式是否关心顺序?
  • @JelleKeizer 它不应该。我更新了问题
  • 有点猜测,但以防万一丢掉 ^ 以防有东西在行前
  • 一步一步去找出你失败的地方。对于 gmail 消息,它是否正确打开?是否正确读取每一行?它是否正确循环模式?是否正确找到匹配项?是否正确更新 $data?

标签: php regex email


【解决方案1】:

试试这个

list($headers, $message) = explode("\n\n", $email);

$header = imap_rfc822_parse_headers($headers);

// You can now access
$header->from;
$header->to;
$header->subject;

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2017-07-30
    • 1970-01-01
    • 2013-01-31
    • 2016-01-13
    • 2012-07-28
    相关资源
    最近更新 更多