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"):邮件的时间戳。
  • 相关阅读:
    Linux下#!/usr/bin/env bash和#!/usr/bin/bash、#!/bin/bash的比较
    重要:1. hive查询时,先看表格元数据是怎样分区的,然后在where里写分区条件,否则会查询出错;2. 在Where条件中使用变量时,Hive查询会非常慢
    001机器人姿态RPY及移动路径方式
    linux 查看并对外开放端口(防火墙拦截处理)
    协程,twisted
    flask源码走读
    python 协程与go协程的区别
    Python 自带 RPC Demo
    这样逼格满满的弹出框消息提示你不心动吗?
    JS获取本周、本季度、本月、上月的开始日期、结束日期
  • 原文地址:https://www.cnblogs.com/TeresaMu/p/10065137.html
Copyright © 2011-2022 走看看