【问题标题】:Best way to store Email-body in database将电子邮件正文存储在数据库中的最佳方法
【发布时间】:2015-11-02 02:32:36
【问题描述】:

我正在开发某种应用程序,我可以通过 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 页面上完全显示它们,但这并不总是那么容易。

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

提前致谢, 伯特

【问题讨论】:

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


    【解决方案1】:

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

    所以我建议你这样做。

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

    向用户展示时

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

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

    检查:

    【讨论】:

    • 谢谢!我还应该使用 printable_decode 还是 htmlentities?但是我会看看那个电子邮件解析器,没有考虑过这样的事情,也许有一些第三方类可以处理这样的电子邮件。生病检查一下!
    • 这取决于你想做什么。如果您想转义 html,请使用 htmlentities,但最好去除标签并显示 html。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2012-12-21
    • 2017-04-03
    • 2020-04-16
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多