PHP 在 html 页面中显示 html 电子邮件

Posted

技术标签:

【中文标题】PHP 在 html 页面中显示 html 电子邮件【英文标题】:PHP displaying html email in a html page 【发布时间】:2012-03-11 22:14:15 【问题描述】:

我正在构建一个 php 电子邮件邮箱脚本。

如何让 html 电子邮件像在 gmail/hotmail 中一样清晰地显示。

如果我只是回显它会影响整个页面布局。

我可以使用 iframe,但这肯定不是最好的解决方案。

【问题讨论】:

iframe 是最简单的解决方案,除非您想尝试在电子邮件中动态重写 css,以免影响包含页面。 稍微考虑一下构建 gmail 和 hotmail 的团队的规模,以及他们出现错误和问题的频率,并问问自己,您是否真的想走这条路……“最好的解决方案'是使用现有的库或插件。像afterlogic.org/webmail-lite 这样的东西可能会帮助你。 【参考方案1】:

如果您正在寻找“最佳解决方案”,请加入另一个与您做同样事情的开源电子邮件库。一个人自己维护一个可以安全防止脚本注入和其他黑客攻击的电子邮件渲染器对一个人来说工作量太大了。

一个例子:https://github.com/afterlogic/webmail-lite

另一个:http://trac.roundcube.net/

您可以从使用该库维护代码库的其他开发人员那里受益,因此,如果出现问题,您所要做的就是拉取最新更新(希望如此)并得到修复。如果您发现需要改进的地方,您可以修复或构建它,并使代码对每个人都更好。我真的只是在这里推销开源库,但是在任何商业环境中,在没有大团队的情况下构建自己的电子邮件渲染器是一个坏主意。

【讨论】:

【参考方案2】:

正如 Marc B 所说,我相信 IFrame 将是您最好的选择...但请注意,如果您只是转储任何电子邮件 HTML 代码,您就有可能将自己暴露在病毒、木马和恶意 HTML/javascript 代码中 - 您的开场白除非您找到沙盒/去除 HTML 的好方法,否则您的计算机上的潘多拉魔盒。

这是一个至少可以清理 JavaScript 的简单正则表达式:

"(?s)<script.*?(/>|</script>)"

【讨论】:

该正则表达式仅清除 &lt;script&gt; 块,HTML 标记中没有内联 JavaScript!但我同意,整件事并不容易! 黑名单来实现安全很可能会失败。例如,这不能清除 &lt; script &gt; 可能仍然有效。【参考方案3】:

考虑使用一些 HTML Tidy 库(即:PHP.Tidy)。

您可以通过库传递文本以获得格式良好的 html。

一个好的做法是为您正在使用的 div 中的大多数标签定义 CSS 标准行为。

【讨论】:

【参考方案4】:

创建一个您为其分配宽度(和高度,如果需要)的 DIV 容器,并确保添加一个溢出属性以匹配您的设计。这应该可以防止您的电子邮件 HTML 干扰您的布局。

更新

DIV 容器仍可确保您可以限制显示框的大小,并通过适当的 CSS 行为类似于 iframe,而无需所有包袱。

如果您担心电子邮件中的代码,strip_tags 似乎是比正则表达式更好的解决方案。您可以定义一个标签列表以保持不变,并且仍然有信心剥离其余部分。

【讨论】:

以上是关于PHP 在 html 页面中显示 html 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

通过 PHP 在电子邮件中发送 HTML 页面

对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上

从 PHP 发送的电子邮件中显示 HTML 的问题

我似乎无法让我的表格成功通过电子邮件发送

PHP pdf 电子邮件附件,内容类型:多部分/混合,html 消息未显示

如何使用 PHP 从电子邮件数据中提取 html 编码