zoukankan      html  css  js  c++  java
  • 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。一种基础的邮箱协议,仅能用来发送消息。

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

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

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

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

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


    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

    可选参数:

    • 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参数才能运行。

    3) 最便利的选择

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

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

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

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

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

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

    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。

     

    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属性,这可能会拖慢运行速度。

    • 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)


    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参数来自定义发件人的名称。

      

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

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

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

      


    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"):邮件的时间戳。
  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/TeresaMu/p/10065137.html
Copyright © 2011-2022 走看看