在PHP中读取电子邮件并将数据保存到数据库

在PHP中读取电子邮件并将数据保存到数据库,php,database,email,Php,Database,Email,我有一个要求,根据我需要阅读邮件(将在指定的格式)。电子邮件的格式基本上包括一些字段信息,如: Name: xyz Zip: 33402 现在我们需要做的是在数据库表的'Name'列中保存“Name”,在'Zip'列中保存“Zip” 我可以通过PHP脚本通过IMAP读取邮件,并可以获取“BODY”,但我需要帮助找到方法,以便能够读取字段 请分享你的任何方式/选择 如果问题真的只是解析,那么在这种情况下,我建议使用简单的正则表达式 但是我建议使用命名模式,这样就不会混淆索引,也不会有错误的匹配

我有一个要求,根据我需要阅读邮件(将在指定的格式)。电子邮件的格式基本上包括一些字段信息,如:

Name: xyz
Zip: 33402
现在我们需要做的是在数据库表的'Name'列中保存“Name”,在'Zip'列中保存“Zip”

我可以通过PHP脚本通过IMAP读取邮件,并可以获取“BODY”,但我需要帮助找到方法,以便能够读取字段


请分享你的任何方式/选择

如果问题真的只是解析,那么在这种情况下,我建议使用简单的正则表达式

但是我建议使用命名模式,这样就不会混淆索引,也不会有错误的匹配

下面是一个简单的例子:

$str = <<<body
Name: xyz
Zip: 33402
body;

if(preg_match('/(?P<name>\w+): (?P<zip>\d+)/', $str, $matches)) {
    print_r($matches);

    // db beeing your database connector, for example pdo

    $sql = "INSERT INTO mytable (name,zip) VALUES(".$db->quote($matches['name']).",".$db->quote($matches['zip']);

    echo $sql;
} else {
    //mail does not correspond to pattern!
}
$str=quote($matches['name']),“$db->quote($matches['zip']);
echo$sql;
}否则{
//邮件不符合模式!
}
如果您的邮件越来越长,请多次使用preg_match。可能对于要单独分析的每个字段。因为如果你有更多的字段,写一个巨大的正则表达式是很难维护的。 还必须考虑字段的顺序

然而,这一切都不是很稳健。特别是必须考虑字段的内容

如果某人的名字中有换行符或逗号怎么办


我真的很想把邮件的主体放在更好的格式之前。逃跑者处理逃跑问题的人。例如CSV或(我最喜欢的)JSON。

很抱歉,我没有任何解析方面的经验。你能给我提供一些参考资料吗?这样我就可以完成它,并检查它对我的情况是否有帮助?谢谢你的回复。但是,是的,我有大约15个字段要输入,发送电子邮件是客户的强制性要求之一,所以我不能使用csv。你可以在电子邮件中发送csv/json吗?电子邮件是如何生成的?你不能在那一端工作吗?然后,您可以以某种方式序列化数据(例如json),然后在另一端取消序列化。不需要任何解析。也减少了出错的空间。。。