zoukankan      html  css  js  c++  java
  • C#操作EML邮件文件实例(含HTML格式化邮件正文和附件)

    使用QQ邮箱、163邮箱等导出的EML邮件,包含了邮件的发件人、主题、内容、附件等所有信息,该实例就如何解析这些信息,并在编辑后保存做个Demo。

    如下图所示,EML文件是编码后的文本文件,可以使用正则表达式识别其中的关键字,例如Received、Sender、Cc、Bcc、From等。

     但解析后的内容是经过编码后的,例如Sender的内容X-QQ-FEAT……,这个时候需要对内容进行解码,一般使用Base64进行编码。

    EML源文件包含了很多信息,除了使用邮箱客户端看到的收件人、发件人、主题、正文、附件等之外,还可以查看到发件人使用的PC主机名称、邮箱客户端,发送的IP地址,发送的SMTP协议配置情况等信息。

    EML邮件内容可以带格式,带格式的EML邮件内容其实质是HTML标记字符串,因此可以使用HTML处理库对格式化的邮件内容进行处理。

    如下图所示的是TXT文本字符串:

     

    下图所示的是HTML格式化的文本字符串:

    如果我们希望修改邮件内容,并保留原格式,则需要修改HTML格式化的邮件内容,此时需要将HTML解析出来,如下图所示:

    为了便于编辑邮件内容,可以将HTML中的文本内容提取出来,修改后,将源文本的格式化标签应用到新文本上。下图所示的为修改内容界面:

    附件内容是直接嵌入到EML文件中的,可以从中解析出来,包括文件名称、传输编码格式、文件类型,并可以将文件内容提取出后保存到本地磁盘中。

    信息提出出后,可以进行编辑,包括发件人、收件人这些基本信息,也可以套用源格式编辑邮件正文内容,添加、删除邮件附件。

    解析HTML格式化的邮件正文,使用HtmlAgilityPack库处理,此外可以使用Winista.HtmlParser。

     Lexer lexer = new Lexer(html);
     Parser parser = new Parser(lexer);
     NodeList htmlNodes = parser.Parse(null);
    if (htmlNode is ITag)//html节点
                {
                    ITag tag = (htmlNode as ITag);
                    if (!tag.IsEndTag())
                    {
                        string nodeString = tag.TagName;
                        if (tag.Attributes != null && tag.Attributes.Count > 0)
                        {
                            if (tag.Attributes["ID"] != null)
                            {
                                nodeString = nodeString + " { id="" + tag.Attributes["ID"].ToString() + "" }";
                            }
                            if (tag.Attributes["HREF"] != null)
                            {
                                nodeString = nodeString + " { href="" + tag.Attributes["HREF"].ToString() + "" }";
                            }
                        }
                        current = new TreeNode(nodeString);
                        treeNode.Nodes.Add(current);
                    }
                }
    

    另,

    有需要办公辅助等工具开发的朋友,可以联系我,探讨工作中遇到问题的解决方案。

  • 相关阅读:
    JAVA集合类汇总
    springmvc执行流程详细介绍
    java文件上传和下载
    Java中的Filter过滤器
    JSTL介绍及使用
    JSP知识汇总
    JAVA集合类汇总
    服务治理框架dubbo中zookeeper的使用
    map进程数量和reduce进程数量
    Hadoop的序列化
  • 原文地址:https://www.cnblogs.com/mahongbiao/p/EMLToolkit.html
Copyright © 2011-2022 走看看