在RPA实施中,邮件的自动化是必不可少的一部分内容。通过邮件,可以实现人与机器人之间的信息互通。
一、发送邮件的方式类型
有关发送邮件,有多种多样的方式。在开始之前,先了解一下在AA中发送邮件都有哪些实现方式。
1. 模拟人工操作
作为RPA本质的一种方式就是模拟人的操作,所以可以通过AA打开邮箱,创建邮件,编写邮件内容,添加附件等一系列操作来完成,此方法中,主要使用到AA的Object Clone命令,脚本如下截图。
缺点: 此方法执行效率低,易出错,针对于不同版本的outlook或其他邮件客户端,需要适配并修改代码。
2. 自带Command
在AA中也有相应的Command,如 "Send Email",此命令是通过SMTP发送邮件,需要在客户端中配置SMTP服务器,这里使用163邮箱进行示例,配置如下:打开AAE客户端,点击Tools->Options->Email settings
脚本如下:
结果:
缺点:
- 命令中的的Message类型有两种方式,一种纯文本格式,一种是富文本格式,所以不能使用HTML的方式来发送消息,这种就不能实现客户定制化内容的需求。
- Message中传入参数,邮件内容只能以文本格式显示,不能显示带格式的内容。
3. 利用好BotStore
在Automation Anywhere的Bot应用商店中,有很多封装好的Task/Metabots,如下图,可以通过搜索找到自己想要的Bots。
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命令传参是以空格作为分隔符的),也可以参考知识星球中<AA中调用VBS、JS代码>这篇文章。所以在使用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")="x@163.com"
'设置发件人邮箱密码
.Configuration(schema &"sendpassword")="qqqq"
'设置SMTP服务器端口
.Configuration(schema &"smtpusessl")=True
.Configuration(schema &"sendlanguagecode")="utf-8"
.Configuration.Fields.Update
End With
'设置发件箱
Mail.From="x@163.com"
'设置收件人'
Mail.To="x@qq.com"
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)
3. AA参数说明
在Metabot中的参数有如下:
参数名称 | 方向 | 说明 |
---|---|---|
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