我正在开发某种应用程序,我可以通过 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,但这是一个理想的世界。
所以我建议你这样做。
- MySQL 的转义字符串
- 使用 strip_tags 去除潜在危险的 html 标签,如脚本等
向用户展示时
- 从 MySQL 中转义数据
- 显示剥离的数据。
您还可以使用 eml 解析器并将 eml 文件保存在数据库中。
检查:
关于php - 将电子邮件正文存储在数据库中的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915127/