php - 将电子邮件正文存储在数据库中的最佳方式

标签 php mysql email file-get-contents email-headers

我正在开发某种应用程序,我可以通过 cron 作业从我的收件箱获取电子邮件,我只需将邮件发件人、邮件主题和邮件正文插入 MySQL 数据库。

我遇到的问题是不同的邮件类型,如 HTML 邮件、纯文本邮件......

有没有办法只获取文本?我试过使用 fetchbody 和 HTML 实体,printable_decode,但这有时会导致插入一个空的正文或一个包含所有特殊字符的插入,有时甚至是完美的。

    //$body = mysqli_real_escape_string($db, htmlentities(quoted_printable_decode(imap_fetchbody($stream,$email_id, 1.2)), ENT_QUOTES));
$body = mysqli_real_escape_string($db, quoted_printable_decode(imap_fetchbody($stream,$email_id, 1.2)));
//$body = quoted_printable_decode(imap_fetchbody($stream,$email_id,2));
$bodyText = imap_fetchbody($stream,$email_id,1.2);
if(!strlen($bodyText)>0){
    $bodyText = "<html><body>".imap_fetchbody($stream,$email_id,1)."</body></html>";
}

然后我尝试使用完整的 html 主体,但这会导致插入数据库时​​出现问题,如果我转义字符串,HTML 会变得困惑。我通过获取完整的 HTML 正文并将其写入 .html 文件来临时修复它,但这并不是一个真正的选择。

我将它们存储到 MySQL 数据库中的原因是,我可以将用户、颜色......分配给不同的邮件(例如,这不是 Outlook 中 iMAP 邮件的选项。)

我的最终想法是保存电子邮件,就像它在 Outlook 中显示的那样,然后像在 .php 页面上一样显示它们,但这并不总是那么容易。

也许我以完全错误的方式解决这个问题,但也许你们有一些提示、想法或其他什么?

提前致谢, 伯特

最佳答案

如果电子邮件发送正确,应该有纯文本和 HTML,但这是一个理想的世界。

所以我建议你这样做。

  1. MySQL 的转义字符串
  2. 使用 strip_tags 去除潜在危险的 html 标签,如脚本等

向用户展示时

  1. 从 MySQL 中转义数据
  2. 显示剥离的数据。

您还可以使用 eml 解析器并将 eml 文件保存在数据库中。

检查:

关于php - 将电子邮件正文存储在数据库中的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915127/

相关文章:

php - 使用 php 从数据库中选择随机名称列表

php - foreach 是否保证在 php 中以数组顺序进行迭代?

mysql - 内部连接后记录消失

vb.net - 使用 smtp 发送电子邮件,但使用 ZOHO 操作超时

html - Outlook 2003 和字体大小

php - 使用 Web 服务的 Codeigniter 分页

php - 遍历一行电子邮件

mysql - 在 Drupal 中过滤 theme_table

MYSQL:为 'comments' 列生成 ID 的完美方法

php - 在使用相同脚本提交时从 html 表单发送带有 PHP 的电子邮件