代码之家  ›  专栏  ›  技术社区  ›  aidan

在网站上解析和显示MIME多部分电子邮件

  •  5
  • aidan  · 技术社区  · 15 年前

    我有一封原始电子邮件(MIME multipart),我想在网站上显示它(例如,在iframe中,带有HTML部分和纯文本部分的选项卡,等等)。是否有任何CPAN模块或Template::Toolkit插件可以帮助我实现这一点?

    这是一个遥远的机会,但我想知道是否有人已经做了这一切?如果我自己尝试的话,编写处理程序将是一个漫长且容易出错的过程。

    谢谢你的帮助。

    3 回复  |  直到 15 年前
        1
  •  4
  •   user181548 user181548    15 年前

    对我来说这听起来并不难:

    use Email::MIME;
    my $parsed = Email::MIME->new($message);
    my @parts = $parsed->parts; # These will be Email::MIME objects, too.
    print <<EOF;
    <html><head><title>!</title></head><body>
    EOF
    for my $part (@parts) {    
        my $content_type = $parsed->content_type;
        if ($content_type eq "text/plain") {
             print "<pre>", $part->body (), "</pre>\n";
        }
        elsif ($content_type eq "text/html") {
            print $part->body ();
        }        
        # Handle some more cases here
    }
    print <<EOF;
    </body></html>
    EOF
    
        2
  •  6
  •   atrodo    15 年前

    因此,我们接受发送到我们所关注的收件箱的所有电子邮件。我们使用 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
  •   daxim Fayland Lam    15 年前

    重用现有的完整软件。这个 MHonArc mail-to-HTML converter 有出色的MIME支持。