AA中使用VBS发送邮件

在RPA实施中,邮件的自动化是必不可少的一部分内容。通过邮件,可以实现人与机器人之间的信息互通。

一、发送邮件的方式类型

有关发送邮件,有多种多样的方式。在开始之前,先了解一下在AA中发送邮件都有哪些实现方式。

1. 模拟人工操作

作为RPA本质的一种方式就是模拟人的操作,所以可以通过AA打开邮箱,创建邮件,编写邮件内容,添加附件等一系列操作来完成,此方法中,主要使用到AA的Object Clone命令,脚本如下截图。

image

缺点: 此方法执行效率低,易出错,针对于不同版本的outlook或其他邮件客户端,需要适配并修改代码。

2. 自带Command

在AA中也有相应的Command,如 "Send Email",此命令是通过SMTP发送邮件,需要在客户端中配置SMTP服务器,这里使用163邮箱进行示例,配置如下:打开AAE客户端,点击Tools->Options->Email settings

image

脚本如下:

image

image

结果:

image

缺点:

  • 命令中的的Message类型有两种方式,一种纯文本格式,一种是富文本格式,所以不能使用HTML的方式来发送消息,这种就不能实现客户定制化内容的需求。
  • Message中传入参数,邮件内容只能以文本格式显示,不能显示带格式的内容。

3. 利用好BotStore

在Automation Anywhere的Bot应用商店中,有很多封装好的Task/Metabots,如下图,可以通过搜索找到自己想要的Bots。

image

4. 其他方式

除了以上几种方式,可以使用其他语言来实现邮件发送的功能。如用C#编写,然后打包成dll,之后在Metabot中进行方法的调用;或者使用VBS脚本,可以用脚本调用outlook发送,或者使用windows自带的CDO.Message对象来发送。

二、使用VBS发送SMTP邮件

1. 起因

  • 客户要求不能使用dll,所以不能使用C#实现(C#发送邮件的功能已经实现,代码可以在知识星球中下载,链接:https://t.zsxq.com/zjUZr7i)
  • 模拟人手工操作,执行效率比较低,易出错
  • JavaScript实现发送邮件,需要用到外部的引用,也不方便调试,并且在AA中调用的时候会出现各种奇葩问题
  • Botstore中也都是基于C#开发,封装成dll的形式,所以也不能使用。

所以最终采用了使用VBS调用windows自带的CDO.Message对象来发送SMTP邮件,这样可以脱离outlook组件或者相关dll,也不需要其他外部的依赖,只要是windows系统都可以直接进行调试。

调试VBS方法:打开cmd,运行wscript C:\RPA\SendSMTPEmail.vbs进行调试

2. 思路及代码说明

AA中调用VBS脚本,在传入参数时候,如果参数的值中存在空格,则会出现传参错误的异常(因为Run Script命令传参是以空格作为分隔符的),也可以参考知识星球中这篇文章。所以在使用VBS脚本发送邮件时,需要使用AA脚本动态生成VBS脚本文件,然后发送邮件。

首先编写并调试VBS脚本,脚本代码如下:

'##### 调试方法:打开cmd,运行C:\Users\liw>wscript C:\RPA\SendSMTPEmail.vbs进行调试,此方法可以查看在哪一行中的哪个字符出现问题 #####
'##### 需要将文件保存为ANSI格式编码,否在邮件中的中文会以乱码显示 ####
'##### 功能:使用CDO.Message发送邮件 #####
'##### Send Email With SMTP ####


Dim Mail,fso,schema,isHtml,arrAttachment

schema = "http://schemas.microsoft.com/cdo/configuration/"
Set Args=WScript.Arguments
Wscript.Stdout.Writeline Args(0)
Set Mail = CreateObject("CDO.Message")
Set fso = CreateObject("Scripting.FileSystemObject")
With Mail
    .Configuration(schema & "smtpauthenticate")=1
    .Configuration(schema &"sendusing")=2
'设置SMTP服务器
    .Configuration(schema &"smtpserver")="smtp.163.com"
'设置SMTP服务器端口
    .Configuration(schema &"smtpserverport")=25
'设置发件人邮箱
    .Configuration(schema &"sendusername")="[email protected]"
'设置发件人邮箱密码
    .Configuration(schema &"sendpassword")="qqqq"
'设置SMTP服务器端口
    .Configuration(schema &"smtpusessl")=True
    .Configuration(schema &"sendlanguagecode")="utf-8"
    .Configuration.Fields.Update
End With
'设置发件箱
Mail.From="[email protected]"
'设置收件人'
Mail.To="[email protected]"
Mail.Subject="RPA Test 测试邮件"
' 邮件内容设置 邮件类型(text/html)text文本格式/html网页格式
isHtml=TRUE
If isHtml Then
    Mail.HtmlBody=Args(0)
    Mail.HTMLBodyPart.Charset = "utf-8"
Else
    Mail.TextBody=Args(0)
    Mail.BodyPart.Charset = "utf-8"
End If
'Mail.BodyPart.Fields.Item("urn:schemas:mailheader:content-transfer-encoding") = "base64"
'Mail.BodyPart.Fields.Update
'添加所有附件,参数为附件列表数组,单个文件可使用 arrPath = Split( strPath & "|", "|")传入路径。
arrAttachment="C:\LogonUI.log|C:\ScrubRetValFile.txt|C:\aaa_TouchMeNo_.txt"
If Not IsArray( arrAttachment ) Then arrAttachment = Split( arrAttachment & "|", "|")
For i = 0 To UBound( arrAttachment )
    If fso.FileExists( arrAttachment(i) ) = True Then
        Mail.Addattachment arrAttachment(i)
    End If
Next

'Mail.AddAttachment("C:\LogonUI.log")
'Mail.AddAttachment("C:\ScrubRetValFile.txt")
'Mail.Fields.Update

Mail.Send
Set Mail=Nothing
Set Args=Nothing

在完成VBS代码调试之后,需要将其中的一些变量替换掉,之后编写AA脚本,在AA脚本中,需要将上面的VBS代码通过Log To File的命令写入到临时的文件中,然后使用Run Script命令执行临时的VBS脚本。(文件可以在知识星球中下载,链接:https://t.zsxq.com/E2rrFu7)

image

3. AA参数说明

在Metabot中的参数有如下:

image
参数名称 方向 说明
in_Attachments 入参 邮件附件,以竖线分割
in_Body 入参 邮件正文内容
in_Cc 入参 抄送人地址,使用";"分割
in_isHtml 入参 正文内容是否是HTML格式(True/False)
in_Subject 入参 邮件主题
in_To 入参 收件人地址,使用";"分割
out_Result 出参 发送邮件的结果(True/False)
vMailServer None 邮件服务器地址
vMailServerPort None 邮件服务器端口
vPassword None 发件人邮箱密码
vFrom None 发件人邮箱地址
vScriptFile None VBS文件名称
vScriptFolder None VBS文件存放路径
vSendSMTPEmailTemp None VBS文件临时存放的路径

四、总结

在AA中发送邮件的方式多种多样,用户可以依据自己的实际情况,选择合适的方法以提高开发效率和机器人的执行效率。在选择使用VBS/JavaScript脚本方式执行函数或者功能时,可以通过动态生成脚本的方式来避免一些传参的异常。

文中涉及到的代码都可以在知识星球中下载,链接:https://t.zsxq.com/E2rrFu7

你可能感兴趣的:(AA中使用VBS发送邮件)