2023年11月30日发(作者:)

utomationIntroduction

学习⼤纲:

如何使⽤电⼦邮件相关的专⽤活动

如何发送和接受邮件

如何筛选邮件及下载附件

如何使⽤邮件模板

1. Email进⾏交互

1) Email作为Input

Email标题和主体部分获取⽂本信息,如名称、ID等。

Email附件中获取各种⽂件,如xlsxpdf⽂件等。

2) Email作为Output

发送进度报告。

发送意外情况提醒,⽐如应⽤程序报错。

3) Email相关的活动:

SMTPSimple Mail Transfer Protocol。⼀种基础的邮箱协议,仅能⽤来发送消息。

POP3Post Office Protocol。⼀种古⽼到⼏乎被淘汰的协议,⽤来收取消息。但是⼤部分的邮件服务器⽀持这种协议。

IMAPInternet Message Access Protocol。仅能⽤来收取消息,但UiPath还提供⼀些功能,可以标记消息为已读,或将邮件移动到其

他⽂件夹。

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

Outlook:与上述⼏种略有不同,Outlook的相关活动是与应⽤程序的API进⾏交互。在运⾏时,这些活动已经有了背景信息(基于已有

Outlook账户的设置),因此不需要再为它们设置服务器名、⽤户名及填写其他的技术信息。

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

2. 查看/检索邮件

1) Get Mail Messages活动

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

Get POP3 Mail Messages

Get IMAP Mail Messages

Get Exchange Mail Messages

Get Outlook Mail Messages

可选参数:

Host - MailFolder:指定从某个特定的邮箱⽂件夹⾥收取消息。

Options - OnlyUnreadMessage:只获取未读消息。

Options - MarkAsRead:标记为已读。与OnlyUnreadMessage⼀起使⽤,可以避免⼀些重复操作。

Options - Top:限制收到电⼦邮件的最⼤数量。

2) Connection参数

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

注意:在没有填写Connection相关参数的情况下,IMAPPOP3Get Mail Messages活动出现了有效性警告标志,但是Outlook

Exchange的却没有。这是由于ExchangeOutlook的活动可以使⽤默认值并且⾃动获取服务器的信息,⽽POP3IMAP的活动必须要填写

Connection参数才能运⾏。

3) 最便利的选择

如果已经配置好Outlook,那么使⽤Outlook活动来收取邮件是最便利的选择。因为它需要设置的参数最少,并且还提供了额外的功能,⽐如

Filter功能。使⽤Outlook活动可以兼容任何邮件协议。

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

设置Connection参数:参数信息通常由电⼦邮件的供应商或者IT部门提供。此例使⽤Google邮箱,在参数Server⾥填⼊

Port⾥填⼊993EmailPassword⾥填⼊邮箱和密码,此处使⽤变量来表⽰。

设置其他参数:勾选OnlyUnreadMessages参数,设置为仅读取未读消息;将Top参数设置为5,使读取消息的上限为5条;将消息存

储到变量messages中,该变量为List类型。

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

改为mail

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

For Each循环⾥添加⼀个Message Box活动来显⽰邮件的标题。输⼊mail.会出现下拉菜单,其中包括主体、标题、收件⼈、寄件⼈

等很多选项,此处选择显⽰t

最终的Workflow显⽰为:

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

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

For Each活动⾥的Message Box活动删除,并添加⼀个If活动。将条件设置为ns("personal data change

request")

If活动的Then⾥添加⼀个Save Attachments活动。MailMessage参数设置为mail(循环变量),FolderPath参数设置存储附件的路径

”Attachments“

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

添加⼀个字符串型变量employeeNumber

Save Attachments活动之前添加⼀个Assign活动。左边填⼊变量emloyeeNumber,右边填⼊("#".ToCharArray)

(1).Split(" ".ToCharArray)(0)

Save Attachments活动的FolderPath更改为"Attachments/" + employeeNumber

注意:("#".ToCharArray)(1)将标题Employee #123456 personal data change request分隔为Employee123456 personal

data change request两部分,(1)表⽰取第⼆个值;.Split(" ".ToCharArray)(0)表⽰将123456 personal data change request通过空格进⾏分

隔,取其中的第⼀个值,即123456

6) ⽰例2:使⽤Get Outlook Mail Messages通过筛选获取24⼩时内的邮件。

添加⼀个Get Outlook Mail Messages活动,创建⼀个List类型变量messagesOnlyUnreadMessage参数默认是

选中的,不需要做更改。

使⽤ng可以获取未读邮件的数量。

添加⼀个

For Each活动

,在未读邮件中循环。MailMessage对象的⼤部分属性可以从邮件的标题中提取,但不包括时间戳。时间需要⽤s("Date")

来提取。

使⽤Headers筛选的缺点:Email需要先读取邮件才能获得邮件的Headers属性,这可能会拖慢运⾏速度。

Outlook提供了⾮常⽅便的筛选参数Filter,可以通过不同的标准进⾏筛选,如SubjectSenderEmailAddressReceiveTime等。如果

要筛选24⼩时内收到的邮件,可以写⼊"[ReceivedTime] > 01/18/2017 12:38 PM"。但是通常情况下,我们不会把⽇期写成⼀个固定的

值,所以“24⼩时内将会表⽰为:"[ReceivedTime] >= '" + s(-2).ToString("MM/dd/yyyy hh:mm tt") +"'"

(-1)表⽰现在的时间减去⼀天。

Filter功能的实现依赖于Microsoft组件,更多的Expression详情可以参见Microsoft的官⽅⽂档

3. 发送邮件

1) Send Mail Messages活动

UiPath提供了下列3Send 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参数为Post参数为587参数EmailPassword

设置活动的Logon参数,使⽤变量表⽰Email参数和Password参数;还可以设置Sender下的Name参数来⾃定义发件⼈的名称。

最后填⼊在To⾥写⼊收件⼈邮箱,Subject⾥写⼊邮件标题,Body⾥写⼊邮件正⽂即可。

3) ⽰例拓展:使⽤更规范的正⽂,并添加附件。

将正⽂写⼊⼀个txt⽂本⽂件⾥,添加⼀个Read Text File活动读取该⽂件,并保存在变量template中。

直接把正⽂写到Body参数⾥会⽐较难管理和维护,更⽅便的做法是使⽤模板⽂件,模板⽂件可以使⽤HTML格式或者纯⽂本格

式。

使⽤template的另⼀个好处是,通过功能,在运⾏程序时把⽂本中的占位符更改为动态内容。

Send SMTP Mail Messages活动的Body参数设置为(template, Now),可以在运⾏时将占位符{0}更改为实时时间。

添加⼀个Take Screenshot活动,该活动会⽣成⼀个png图⽚。创建⼀个Image型变量screenshot⽤来保存图⽚。

添加⼀个Save Image活动,将screenshot保存在硬盘上。Send Mail活动的附件只接受⽂件路径,因此需要将图⽚保存下来。

点击Send SMTP Mail Messages活动中的Attach Files,在弹出的窗⼝中填写添加附件的路径。

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

4. 练习1

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

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

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

添加⼀个Get Outlook Mail Messages活动,使⽤Outlook的默认账户,设置好从哪个⽂件夹⾥读信,将读取的邮件存储在

List型变量email⾥。

添加⼀个Read Range活动来读取Excel⽂件中的规则,创建⼀个DataTable型变量mailRules来保存规则。

添加⼀个For Each活动建⽴循环,需要设置循环个体的TypeArgumentMailMessage型以在邮件中进⾏循环。

添加⼀个For Each Row活动,在DataTable变量mailRules中进⾏循环,判断某⼀封邮件是否符合任⼀规则。

添加⼀个If活动,判断邮件的发件⼈地址是否包含mailRules中的Sender列的值。

如果包含,则添加⼀个Move Outlook Mail Message活动,将邮件移动到对应⾏Folder列的值表⽰的⽂件夹中。

我们还需要添加⼀个断点,当邮件已经符合某⼀规则就跳出For Each Row活动。

5. 练习2

1) 要求:

读取"Session 11 - exercise 2 - "的第六页;

读取"Session 11 - exercise 2 - "的第⼆页;

发送⼀封邮件,将两个pdf⽂件附上,将之前读取的内容作为邮件的正⽂。

2) 思路:

第⼀个pdf⽂件是native pdf,即⽂本可选取,所以可以使⽤Read PDF Text活动读取。将Range参数设置为6,创建⼀个变量

installationPDFText存储读取的内容。

第⼆个pdf⽂件是扫描版的pdf,即所有内容都是图像,⽆法选取任何元素,所以需要使⽤Read PDF with OCR活动读取。将Range

数设置为2,创建⼀个变量invoicePDFText

添加⼀个Send Outlook Mail Messages活动,设置好ToSubject参数。在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活动

ns("xxx"):邮件标题中是否包含xxxmail是⼀个MailMessage型变量。

ng:邮箱中邮件的数量。

s("Date"):邮件的时间戳。