背景
前段时间由于国产化的趋势,公司将Outlook弃用转而使用网页版邮箱替代。这就带来了一些邮箱自动化方面的问题。在使用Uipath对邮件自动化中,我们通过outlook相关的组件从而达到自动化收发邮件的目的。但是,启动网页版邮箱以后这些组件也不再可用,另外公司内使用smtp协议也被限制且需要额外申请开通白名单。鉴于此,我本来打算等待相关部门安排下来之后,再思考解决邮件收发的问题。这个时候,收到了公司业务老师的消息,业务老师自己动手开发了"模拟网页邮箱登陆自动发送邮件"的组件,这个消息给了我动力。在该动力的驱使下,我开始着手摸索如何开发自动接收邮件的组件。
思路
通过查看GetOutlookMailMessages组件,我们可以看到,该组件的输出为类型System.Net.Mail.MailMessage的List集合。因此我们可以借鉴该组件的形式,形成模拟网页版邮箱收取邮件的组件。通过遍历该输出结果集合,我们可以获取每封邮件的收发件人、主题、抄送人等信息。
通过测试发现,将网页收件箱中的邮件批量导出,邮箱集合会以EML格式保存为ZIP格式的文件。通过遍历解压后文件中所有的eml邮件,将eml格式一一转换成MailMessage的格式,再保存为MailMessage的集合。这样就可以得到我们想要的输出。步骤如下,
-
批量导出邮箱,保存形式为zip文件;
-
解压zip文件,并通过Directory.GetFiles获取所有eml邮件路径的集合;
-
通过循环遍历步骤2的路径集合,一一转换为MailMessage格式;
-
在步骤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 class
RxMailMessage mm = mime.GetEmail(sEmlPath);
最终完成了对"模拟网页邮箱获取邮件"的组件。