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

标签 php database email

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

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

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

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

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

我强烈建议在发送邮件之前考虑将邮件正文转换为更好的格式。一个处理逃跑的。例如 CSV 或(我最喜欢的)JSON。

关于php - 在 PHP 中读取电子邮件并将数据保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17066397/

相关文章:

javascript - 如何在没有任何键的情况下读取 php 中的 JSON 数组?

php - 将 table1 中的值放入下拉菜单中,然后放入新的 mySql 表中

java - 如何将 HTML 链接放入电子邮件正文中?

php - 如何使用 Google Maps API 根据距离进行搜索?

php - 随机选择的子查询选择中的 SQL 语法错误

wpf - 将数据库中的文本放入 WPF 中的文本框中

python - 通过使用 Python 给出属于该文档的字段值来获取 firestore 中文档的数据?

java - 这是允许多个用户同时访问数据库的好方法吗?

java - sendSimpeMessage 返回 500

Powershell - Outlook - 将多个附件添加到电子邮件