【发布时间】: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?