UiPath Level 1-Lesson 11. Email Automation Introduction

学习大纲:

  • 如何使用电子邮件相关的专用活动
  • 如何发送和接受邮件
  • 如何筛选邮件及下载附件
  • 如何使用邮件模板

1. 与Email进行交互

1) Email作为Input:

  • 从Email标题和主体部分获取文本信息,如名称、ID等。
  • 从Email附件中获取各种文件,如xlsx、pdf文件等。

2) Email作为Output:

  • 发送进度报告。
  • 发送意外情况提醒,比如应用程序报错。

3) Email相关的活动:

  • SMTP:Simple Mail Transfer Protocol。一种基础的邮箱协议,仅能用来发送消息。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • POP3:Post Office Protocol。一种古老到几乎被淘汰的协议,用来收取消息。但是大部分的邮件服务器支持这种协议。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • IMAP:Internet Message Access Protocol。仅能用来收取消息,但UiPath还提供一些功能,可以标记消息为已读,或将邮件移动到其他文件夹。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • Exchange:微软提供的企业级电子邮件解决方案。UiPath能很好地与之整合,可以发送消息,收取消息,移动邮件,删除邮件。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • Outlook:与上述几种略有不同,Outlook的相关活动是与应用程序的API进行交互。在运行时,这些活动已经有了背景信息(基于已有的Outlook账户的设置),因此不需要再为它们设置服务器名、用户名及填写其他的技术信息。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • UiPath还提供了两个通用的Mail活动,用来将邮件和邮件中的附件保存到本地磁盘中。

UiPath Level 1-Lesson 11. Email Automation Introduction


2. 查看/检索邮件

1) Get Mail Messages活动

UiPath提供了下列4种Get Mail Messages活动。它们的功能相同,提供的可选参数也非常相似。

  • Get POP3 Mail Messages
  • Get IMAP Mail Messages
  • Get Exchange Mail Messages
  • Get Outlook Mail Messages

UiPath Level 1-Lesson 11. Email Automation Introduction

可选参数:

  • Host - MailFolder:指定从某个特定的邮箱文件夹里收取消息。
  • Options - OnlyUnreadMessage:只获取未读消息。
  • Options - MarkAsRead:标记为已读。与OnlyUnreadMessage一起使用,可以避免一些重复操作。
  • Options - Top:限制收到电子邮件的最大数量。

2) Connection参数

Connection的参数是用来设置服务器连接的。需要填写用户邮箱和密码,该邮箱的服务器地址和端口(port)一般也是必填的。

注意:在没有填写Connection相关参数的情况下,IMAP和POP3的Get Mail Messages活动出现了有效性警告标志,但是Outlook和Exchange的却没有。这是由于Exchange和Outlook的活动可以使用默认值并且自动获取服务器的信息,而POP3和IMAP的活动必须要填写Connection参数才能运行。

UiPath Level 1-Lesson 11. Email Automation Introduction

3) 最便利的选择

 如果已经配置好Outlook,那么使用Outlook活动来收取邮件是最便利的选择。因为它需要设置的参数最少,并且还提供了额外的功能,比如Filter功能。使用Outlook活动可以兼容任何邮件协议。

UiPath Level 1-Lesson 11. Email Automation Introduction

4) 示例1:使用Get IMAP Mail Messages活动检索邮件。

  • 设置Connection参数:参数信息通常由电子邮件的供应商或者IT部门提供。此例使用Google邮箱,在参数Server里填入imap.gmail.com;Port里填入993;EmailPassword里填入邮箱和密码,此处使用变量来表示。
  • 设置其他参数:勾选OnlyUnreadMessages参数,设置为仅读取未读消息;将Top参数设置为5,使读取消息的上限为5条;将消息存储到变量messages中,该变量为List<MailMessage>类型。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • 添加For Each活动在获取的邮件列表中循环检索。在For Each活动的TypeArgument参数里设置item的类型为MailMessage型。将item改为mail。

UiPath Level 1-Lesson 11. Email Automation Introduction

注意:搜索MailMessage类型时会获得两个结果,我们要使用的是System.Net.Mail下的MailMessage类型。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • 在For Each循环里添加一个Message Box活动来显示邮件的标题。输入mail.会出现下拉菜单,其中包括主体、标题、收件人、寄件人等很多选项,此处选择显示mail.Subject。
  • 最终的Workflow显示为:

UiPath Level 1-Lesson 11. Email Automation Introduction

5) 示例1拓展:基于实例1,根据已知的命名规则来筛选邮件,将符合命名规则的邮件中的附件下载到本地。

Email命名示例:Employee #123456 personal data change request

  • 将For Each活动里的Message Box活动删除,并添加一个If活动。将条件设置为mail.Subject.Contains("personal data change request")
  • 在If活动的Then里添加一个Save Attachments活动MailMessage参数设置为mail(循环变量),FolderPath参数设置存储附件的路径为”Attachments“。

附加要求:将每个邮件的附件分别存储在指定路径的子文件夹中,并用Employee ID命名该子文件夹。

  • 添加一个字符串型变量employeeNumber。
  • 在Save Attachments活动之前添加一个Assign活动。左边填入变量emloyeeNumber,右边填入mail.Subject.Split("#".ToCharArray)(1).Split(" ".ToCharArray)(0)。
  • 将Save Attachments活动的FolderPath更改为"Attachments/" + employeeNumber。

注意:mail.Subject.Split("#".ToCharArray)(1)将标题Employee #123456 personal data change request分隔为Employee和123456 personal data change request两部分,(1)表示取第二个值;.Split(" ".ToCharArray)(0)表示将123456 personal data change request通过空格进行分隔,取其中的第一个值,即123456。

 UiPath Level 1-Lesson 11. Email Automation Introduction

6) 示例2:使用Get Outlook Mail Messages通过筛选获取24小时内的邮件。

    • 添加一个Get Outlook Mail Messages活动,创建一个List<MailMessage>类型变量messages。OnlyUnreadMessage参数默认是选中的,不需要做更改。
      • 使用messages.Count.ToString可以获取未读邮件的数量。
    • 添加一个

For Each活动

    ,在未读邮件中循环。MailMessage对象的大部分属性可以从邮件的标题中提取,但不包括时间戳。时间需要用mail.Headers("Date")来提取。
    • 使用Headers筛选的缺点:Email需要先读取邮件才能获得邮件的Headers属性,这可能会拖慢运行速度。

UiPath Level 1-Lesson 11. Email Automation Introduction

  • Outlook提供了非常方便的筛选参数Filter,可以通过不同的标准进行筛选,如Subject,SenderEmailAddress,ReceiveTime等。如果要筛选24小时内收到的邮件,可以写入"[ReceivedTime] > 01/18/2017 12:38 PM"。但是通常情况下,我们不会把日期写成一个固定的值,所以“24小时内”将会表示为:"[ReceivedTime] >= '" + Now.AddDays(-2).ToString("MM/dd/yyyy hh:mm tt") +"'"。
    • Now.AddDay(-1)表示现在的时间减去一天。
    • Filter功能的实现依赖于Microsoft组件,更多的Expression详情可以参见Microsoft的官方文档 Items.Find Method (Outlook)

UiPath Level 1-Lesson 11. Email Automation Introduction


3. 发送邮件

1) Send Mail Messages活动

UiPath提供了下列3种Send Mail Messages活动。

  • Send SMTP Mail Messages (SMTP=Simple Mail Transfer Protocol)
  • Send Outlook Mail Messages
  • Send Exchange Mail Messages

2) 示例:发送一封邮件。

  • 添加一个Send SMTP Mail Messages活动
  • 设置活动的Connection参数。使用Google的服务器,Server参数为smtp.gmail.com,Post参数为587参数Email和Password。
  • 设置活动的Logon参数,使用变量表示Email参数和Password参数;还可以设置Sender下的Name参数来自定义发件人的名称。

  UiPath Level 1-Lesson 11. Email Automation Introduction

  • 最后填入在To里写入收件人邮箱,Subject里写入邮件标题,Body里写入邮件正文即可。

UiPath Level 1-Lesson 11. Email Automation Introduction

3) 示例拓展:使用更规范的正文,并添加附件。

  • 将正文写入一个txt文本文件里,添加一个Read Text File活动读取该文件,并保存在变量template中。
    • 直接把正文写到Body参数里会比较难管理和维护,更方便的做法是使用模板文件,模板文件可以使用HTML格式或者纯文本格式。
    • 使用template的另一个好处是,通过String.Format功能,在运行程序时把文本中的占位符更改为动态内容。
  • 将Send SMTP Mail Messages活动的Body参数设置为String.Format(template, Now),可以在运行时将占位符{0}更改为实时时间。

  UiPath Level 1-Lesson 11. Email Automation Introduction 

  • 添加一个Take Screenshot活动,该活动会生成一个png图片。创建一个Image型变量screenshot用来保存图片。
  • 添加一个Save Image活动,将screenshot保存在硬盘上。Send Mail活动的附件只接受文件路径,因此需要将图片保存下来。
  • 点击Send SMTP Mail Messages活动中的Attach Files,在弹出的窗口中填写添加附件的路径。

  UiPath Level 1-Lesson 11. Email Automation Introduction

  • 运行程序将收到下图中的邮件。

  UiPath Level 1-Lesson 11. Email Automation Introduction


4. 练习1

1) 要求:读取收件箱中的邮件并对邮件进行排序,按照Excel文件中规定的规则将邮件移动到不同的文件夹里。

*如果邮件的发件人地址中包含Sender列里的某个值,则将这封邮件移动到对应的Folder列的邮件文件夹里。

UiPath Level 1-Lesson 11. Email Automation Introduction

2) 流程:此处使用Get Outlook Mail Messages活动来完成练习。使用其他Get Mail活动的流程略有不同,但主逻辑和用到的活动大致相同。

  • 添加一个Get Outlook Mail Messages活动,使用Outlook的默认账户,设置好从哪个文件夹里读信,将读取的邮件存储在List<MailMessage>型变量email里。
  • 添加一个Read Range活动来读取Excel文件中的规则,创建一个DataTable型变量mailRules来保存规则。
  • 添加一个For Each活动建立循环,需要设置循环个体的TypeArgument为MailMessage型以在邮件中进行循环。
  • 添加一个For Each Row活动,在DataTable变量mailRules中进行循环,判断某一封邮件是否符合任一规则。
  • 添加一个If活动,判断邮件的发件人地址是否包含mailRules中的Sender列的值。
  • 如果包含,则添加一个Move Outlook Mail Message活动,将邮件移动到对应行Folder列的值表示的文件夹中。
  • 我们还需要添加一个断点,当邮件已经符合某一规则就跳出For Each Row活动。

  UiPath Level 1-Lesson 11. Email Automation Introduction


5. 练习2 

1) 要求

  • 读取"Session 11 - exercise 2 - UiPathOrchestratorAzureInstallationGuide2016.1.pdf"的第六页;
  • 读取"Session 11 - exercise 2 - ScannedDoc.pdf"的第二页;
  • 发送一封邮件,将两个pdf文件附上,将之前读取的内容作为邮件的正文。

2) 思路

  • 第一个pdf文件是native pdf,即文本可选取,所以可以使用Read PDF Text活动读取。将Range参数设置为6,创建一个变量installationPDFText存储读取的内容。
  • 第二个pdf文件是扫描版的pdf,即所有内容都是图像,无法选取任何元素,所以需要使用Read PDF with OCR活动读取。将Range参数设置为2,创建一个变量invoicePDFText
  • 添加一个Send Outlook Mail Messages活动,设置好To和Subject参数。在Body参数中填入installationPDFText + invoicePDFText

  

*本课使用过的新活动、方法、函数等:

  • Get POP3 Mail Messages活动
  • Get IMAP Mail Messages活动
  • Get Exchange Mail Messages活动
  • Get Outlook Mail Messages活动
  • Save Attachments活动
  • Send SMTP Mail Messages活动
  • Send Outlook Mail Messages活动
  • Send Exchange Mail Messages活动
  • Take Screenshot活动
  • Save Image活动
  • mail.Subject.Contains("xxx"):邮件标题中是否包含xxx,mail是一个MailMessage型变量。
  • messages.Count.ToString:邮箱中邮件的数量。
  • mail.Headers("Date"):邮件的时间戳。