在数据库中存储Email-body的最佳方式

时间:2015-08-10 08:39:56

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

我正在处理某种类型的应用程序,我可以通过cron作业从我的收件箱中收到电子邮件,我只需将邮件,邮件主题和邮件正文插入MySQL数据库。

我遇到的问题是HTML邮件,纯文本邮件等不同的邮件类型。

有没有办法获得文字?我尝试过使用fetchbody和HTML权限,printtable_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页面上显示它们,但它并不总是那么容易。

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

提前致谢, 伯特

2 个答案:

答案 0 :(得分:1)

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

所以我建议你。

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

    向用户显示时

    1. 来自MySQL的Unescape数据
    2. 显示已删除的数据。
    3. 您还可以使用eml解析器并在DB中保存eml文件。

      检查:

答案 1 :(得分:0)

如果您不愿意的话,想在这里添加一个可能的替代选项!

您可以使用Parserr提取电子邮件的正文,然后使用Microsoft Flow或Zapier将数据推送到您的MySql数据库中?然后,它还为您提供了根据需要提取电子邮件详细信息的选项(例如主题,抄送等)。

Parserr可以以已经转义的格式传递它,这样您在它到达数据库时就不必担心它的格式。此外,它已经可以选择添加纯文本(自动为您提取)以及使用HTML markdown的剥离格式版本。