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);
                }
            }

另,

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

IntelliJ IDEA 最常用配置详细图解,新手入门必看!

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。

883
来自专栏大数据挖掘DT机器学习

用Python调用百度OCR接口实例

本文主要针对Python开发者,描述百度文字识别接口服务的相关技术内容。OCR接口提供了自然场景下整图文字检测、定位、识别等功能。文字识别的结果可以用于翻译、搜...

8805
来自专栏深度学习自然语言处理

这些进程的后台可靠运行命令你都知道了吗

当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP ...

721
来自专栏SDNLAB

基于Open vSwitch的VxLAN隧道实验网络

1 实验目的 该实验通过Open vSwitch构建Overlay的VxLAN网络,更直观的展现VxLAN的优势。在实验过程中,可以了解如何建立VxLAN隧道并...

4576
来自专栏机器学习算法原理与实践

scikit-learn 和pandas 基于windows单机机器学习环境的搭建

    很多朋友想学习机器学习,却苦于环境的搭建,这里给出windows上scikit-learn研究开发环境的搭建步骤。

822
来自专栏linjinhe的专栏

LevelDB:整体架构

上图简单展示了 LevelDB 的整体架构。LevelDB 的静态结构主要由六个部分组成:

3573
来自专栏云霄雨霁

数据链路层协议ARQ

1860
来自专栏阮一峰的网络日志

如何读懂火焰图?

软件的性能分析,往往需要查看 CPU 耗时,了解瓶颈在哪里。 火焰图(flame graph)是性能分析的利器。本文介绍它的基本用法。 ? 一、perf 命令 ...

3656
来自专栏V站

Knowledge丨WordPress数据库文件分析

折腾WordPress必须要有很厚的基础才行,深入更是要小心。西顾再次mark下来知更鸟的文章,做下笔记。想研究模板,可review下前文《Skill丨Word...

2144
来自专栏我是攻城师

windows 10环境下安装Tesseract-OCR与python集成

Tesseract是一个开源的ocr引擎,可以开箱即用,项目最初由惠普实验室支持,1996年被移植到Windows上,1998年进行了C++化。在2005年Te...

1403

扫码关注云+社区

领取腾讯云代金券