【问题标题】:Read Email and save data to database in PHP在 PHP 中读取电子邮件并将数据保存到数据库
【发布时间】:2013-06-13 15:19:31
【问题描述】:

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

Name: xyz
Zip: 33402

现在我们需要做的是在数据库表的'name'列中保存“Name”,在“zip”列中保存“Zip”。

我可以通过 PHP 脚本通过 IMAP 阅读邮件,并且可以获取“BODY”,但我需要帮助找出方法以便我可以阅读这些字段。

请分享您的任何方式/选项。

【问题讨论】:

  • 对不起,我没有任何经验。也有解析。您能否给我提供任何参考资料,以便我仔细阅读并检查它是否对我的情况有帮助?

标签: php database email


【解决方案1】:

如果问题真的只是解析,在这种情况下我会推荐简单的正则表达式。

不过,我推荐的是使用命名模式,这样您就不会混淆索引并且可能匹配错误。

这是一个简单的例子:

$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!
}

如果您的邮件变长,请多次使用 preg_match。可能对于您要单独解析的每个字段。因为如果你有更多的字段,编写一个巨大的正则表达式很难维护。 还必须考虑字段的顺序。

然而,这一切都不是很强大。尤其要考虑字段的内容。

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

我真的很想在冒犯之前考虑将邮件正文改成更好的格式。一种处理逃跑的方法。例如 CSV 或(我最喜欢的)JSON。

【讨论】:

  • 感谢您的回复。但是是的,我有大约 15 个字段要输入,发送电子邮件是客户的强制性要求之一,所以我不能使用 CSV
  • 您可以在电子邮件中发送 csv/json 吗?电子邮件是如何生成的?你不能为此工作吗?然后你可以以某种方式序列化你的数据(例如json),而只是在另一端反序列化它。不需要任何解析。出错的空间也更小...
猜你喜欢
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2012-12-24
  • 2023-03-06
  • 2013-07-05
  • 1970-01-01
  • 2014-11-22
  • 2023-03-27
相关资源
最近更新 更多