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命令传参是以空格作为分隔符的),也可以参考知识星球中<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)

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容