![]() |
1
4
对我来说这听起来并不难:
|
![]() |
2
6
因此,我们接受发送到我们所关注的收件箱的所有电子邮件。我们使用 VERP 将电子邮件与用户关联,并将整个电子邮件按原样存储在数据库中。然后,当管理员请求查看电子邮件时,我们必须解析电子邮件。 我的第一次尝试与先前的回答非常相似。如果其中一个部分是html,则显示它。如果是文本,就显示出来。否则,显示原始电子邮件。这个问题很快就解决了,只有一些电子邮件不是由sendmail生成的。Outlook、Exchange和其他一些电子邮件系统不这样做,它们使用多部分发送电子邮件。经过大量的挖掘和咒骂,我发现这个问题似乎没有很好的记录。通过查看MHonArc并阅读RFC(rfc245和rfc246),我决定了下面的解决方案。我决定不使用MHonArc,因为我无法轻松恢复解析和显示功能。我不认为这是完美的,但我们用它已经足够好了。 首先,获取消息并使用Email::MIME解析它。然后调用一个名为get\u part的函数,使用Email::MIME提供的部件数组->零件()。 get\u part,对于传递的每个部分,对内容类型进行解码,在哈希中查找,如果存在,则调用与该内容类型关联的函数。如果解码器能给我们一些东西,就把它放到一个结果数组中。 最后一块拼图是这个解码器阵列。基本上,它定义了我可以处理的内容类型:
我按原样返回的非多部分部分部分。对于mixed、related和alternative,我只调用MIME节点上的get\u部分并返回结果。因为alternative是特殊的,所以在调用get\u parts之后它有一些额外的代码。如果它有一个html部分,它将只返回html,或者它将只返回它的文本部分有一个文本部分。如果两者都没有,它将不会返回任何有效的内容。
还有一件事我要提一下。作为其中的一部分,我们创建了一个单独的域来实际服务于这些消息。管理员工作的主域将拒绝提供消息,并将浏览器重定向到我们的用户内容域。第二个域将只服务于用户内容。这是为了帮助浏览器正确地沙盒内容远离我们的主域。参见同一原产地政策( http://en.wikipedia.org/wiki/Same_origin_policy ) |
![]() |
3
2
重用现有的完整软件。这个 MHonArc mail-to-HTML converter 有出色的MIME支持。 |
![]() |
MUSTAFA KAYA · 如何识别电子邮件的收件人? 3 年前 |
![]() |
taylor.2317 · 转发收件箱中当前的所有电子邮件 3 年前 |
![]() |
GH00N · 我想获得电子邮件身份验证 3 年前 |
![]() |
Tarmo Silta · 文件中的PHP邮件收件人和邮件间隔 3 年前 |
![]() |
auto · PHP联系人表单在Wordpress上不起作用 7 年前 |