Eml文件转换成MailMessage类型

背景

前段时间由于国产化的趋势,公司将Outlook弃用转而使用网页版邮箱替代。这就带来了一些邮箱自动化方面的问题。在使用Uipath对邮件自动化中,我们通过outlook相关的组件从而达到自动化收发邮件的目的。但是,启动网页版邮箱以后这些组件也不再可用,另外公司内使用smtp协议也被限制且需要额外申请开通白名单。鉴于此,我本来打算等待相关部门安排下来之后,再思考解决邮件收发的问题。这个时候,收到了公司业务老师的消息,业务老师自己动手开发了"模拟网页邮箱登陆自动发送邮件"的组件,这个消息给了我动力。在该动力的驱使下,我开始着手摸索如何开发自动接收邮件的组件。

思路

通过查看GetOutlookMailMessages组件,我们可以看到,该组件的输出为类型System.Net.Mail.MailMessage的List集合。因此我们可以借鉴该组件的形式,形成模拟网页版邮箱收取邮件的组件。通过遍历该输出结果集合,我们可以获取每封邮件的收发件人、主题、抄送人等信息。

通过测试发现,将网页收件箱中的邮件批量导出,邮箱集合会以EML格式保存为ZIP格式的文件。通过遍历解压后文件中所有的eml邮件,将eml格式一一转换成MailMessage的格式,再保存为MailMessage的集合。这样就可以得到我们想要的输出。步骤如下,

  1. 批量导出邮箱,保存形式为zip文件;

  2. 解压zip文件,并通过Directory.GetFiles获取所有eml邮件路径的集合;

  3. 通过循环遍历步骤2的路径集合,一一转换为MailMessage格式;

  4. 在步骤3中,将MailMessage格式的文件添加到一个集合。

实现

根据上面的思路,我们完成对"模拟获取邮件"的组件开发并不困难,但是上述步骤3将eml格式文件转换为Mailmessages文件中遇到了问题。

1.通过查找资料,我打算通过Uipath社区提供的组件Read Email from Saved File to Object完成格式之间的转换,但是测试之后发现,输出该mailmessage对象的属性皆为空值,获取不到收件时间、主题等信息。

Read Email from Saved File to Object下载链接:https://marketplace.uipath.com/listings/read-email-from-saved-file-to-object

2.于是,改换搜索思路,"通过C#转换Eml文件为MailMessage的可行的方法,结果搜到了如下的这篇文章:

”Easily Retrieve Email Information from .EML Files“  链接:https://www.codeproject.com/Articles/76607/Easily-Retrieve-Email-Information-from-EML-Files-R

通过该篇文章提供的代码,我们进行封装组件,通过重写execute方法,定义好输入、输出参数,按文章提供的调用方法(如下代码段)获得输出变量。

MimeReader mime = new MimeReader();     // this class processes the .EML mime content// this get's the MailMessage into Peter's RxMailMessage class// which is derived from the MS MailMessage classRxMailMessage mm = mime.GetEmail(sEmlPath);
最终完成了对"模拟网页邮箱获取邮件"的组件。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要批量读取多个 EML 文件,你可以使用 `glob` 模块来获取指定目录下的所有 EML 文件文件路径,然后使用 `email.parser` 模块来解析每个 EML 文件。 以下是一个示例代码,演示如何批量读取 EML 文件并解析它们: ```python import glob from email.parser import Parser # 指定包含 EML 文件的目录路径 eml_dir = 'path/to/eml/files' # 获取目录下所有的 EML 文件路径 eml_files = glob.glob(eml_dir + '/*.eml') # 创建一个解析器对象 parser = Parser() # 遍历每个 EML 文件并解析 for eml_file in eml_files: # 打开 EML 文件并读取内容 with open(eml_file, 'r') as f: eml_text = f.read() # 解析 EML 文件 email_object = parser.parsestr(eml_text) # 现在可以访问解析后的电子邮件对象的各个部分了 print('发件人:', email_object['From']) print('主题:', email_object['Subject']) print('正文:', email_object.get_payload()) print('---') # 用于分隔不同的 EML 文件输出 ``` 在上面的示例中,我们首先使用 `glob` 模块获取指定目录下的所有以 `.eml` 结尾的文件路径。然后,我们遍历每个文件,并打开它们,读取文件内容。接下来,我们使用 `Parser` 对象解析每个 EML 文件,并访问解析后的电子邮件对象的各个部分,如发件人、主题和正文。 请确保将 `eml_dir` 替换为你实际存储 EML 文件的目录路径。 希望这个示例对你有帮助!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值