AA中使用VBS发送邮件

作者: Xiangdong_She | 来源:发表于2020-04-09 17:26 被阅读0次

在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

相关文章

  • AA中使用VBS发送邮件

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

  • email

    1. django 发送邮件 settings.py中配置发送邮件邮箱 使用send_mail方法发送邮件

  • 2018-07-17

    发送邮件 django中内置了邮件发送功能,被定义在django.core.mail模块中,发送邮件需要使用SMT...

  • smtp服务器开启

    发送邮件 Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMT...

  • iOS邮件发送功能

    iOS程序中邮件发送方法有三种方式,有两种原生自带方法发送邮件,另一种是使用第三方库发送邮件。使用原生发送邮件,前...

  • Django——发送邮件和缓存

    发送邮件 概述:Django 中内置了邮件发送功能,发送邮件需要使用 SMTP服务,常用的免费服务器有:163、1...

  • Golang使用SMTP发送邮件

    使用SMTP发送邮件 发送邮件测试 邮箱如下

  • spring boot 邮件发送基础详解(4种邮件超级详细)

    本文将介绍spring boot邮件发送将介绍以下几个方面: 邮件使用场景 邮件发送原理 邮件发送流程 邮件发送步...

  • SpringBoot 发送邮件

    # 依赖 # 配置 # 发送简单文本邮件 # 发送html邮件 # 使用邮件模板发送邮件 添加依赖 配置 新建ht...

  • 使用Python发送邮件,既然碰到了这么详细的教程,这个必须ge

    开发中,使用到邮件发送的场景特别多,比如用户注册、找回密码、推广等等。本文简单介绍下使用 Python 发送邮件的...

网友评论

    本文标题:AA中使用VBS发送邮件

    本文链接:https://www.haomeiwen.com/subject/eszcmhtx.html