PowerShell 处理邮件模板保存的问题

RPA经常涉及到邮件的操作,现在给我们这个big4公司做的审计的一个CloseTIcket项目时,对需要Close的ticket需要邮件发送去提醒Client去关闭,邮件的模板是固定的,需要find 或者replace里面的to,cc, subject,body,signature,问题。

1.在使用UiPath进行邮件模板操作时,用到start process 控件,但是点击start process控件路径加载Email Template,是找不到file的,默认只支持.exe file,所以,不要管它,直接拷贝路径和文件名进行,是可以使用的。

cc,to,subject 用type into 抓取写入就可以了,但是emailbody一直抓取不到,尝试了多个方法,所以放弃了,改用powershell 和vbs 处理。

在做CC,to,subject type into的时候遇到一个问题,总是写的不全,后来发现是输入法的问题,汉字输入法就经常出现乱码,修改为英文输入法解决问题,或者使用set clipboard sendhotkey组合解决。保存邮件时,可以调用F12热键。

2.vbs处理邮件save as 比较简单,用uipath 传入参数,解析就可以。Demo如下:

Dim OlApp
Dim Eml
Dim Arg
Dim EmlBody 
Set Arg = WScript.Arguments

Dim ClientName
ClientName = Arg(0)
Dim AcctNum
AcctNum = Arg(1)
Dim Year
Year = Arg(2)
Dim Bal1
Bal1 = Arg(3)
Dim Bal2
Bal2 = Arg(4)
Dim Bal3
Bal3 = Arg(5)

Dim Input
Input = Arg(6)
Dim Output
Output = Arg(7)

Set OlApp = CreateObject("Outlook.Application")
Set Eml = OlApp.CreateItemFromTemplate(Input)

ProcessMailBody()
ProcessMailSubject()

Eml.SaveAs Output

Sub ProcessMailSubject()
   Eml.Subject = Replace(Eml.Subject, "ClientName", ClientName)
   Eml.Subject = Replace(Eml.Subject, "AccountNumber", AcctNum)
   Eml.Subject = Replace(Eml.Subject, "Year", Year)

End Sub

Sub ProcessMailBody()
  Eml.HtmlBody = Replace(Eml.HtmlBody, "ClientName", AcctName)
  Eml.HtmlBody = Replace(Eml.HtmlBody, "AccountNumber", AcctName)
  Eml.HtmlBody = Replace(Eml.HtmlBody, "Year", Year)
  Eml.HtmlBody = Replace(Eml.HtmlBody, "Balance1", Bal1)
  Eml.HtmlBody = Replace(Eml.HtmlBody, "Balance2", Bal2)
  Eml.HtmlBody = Replace(Eml.HtmlBody, "Balance3", Bal3)
End Sub

3.PowerShell 做email template save as 的时候遇到一个棘手的问题,saveas出来的template不能保持html样式,变成plaintext格式的,影响了美观。

网上查找的这些方法都不能解决#$olMailItem.IsBodyHTML = $true, #$olMailItem.BodyFormat = olFormatHTML ,直接报错

甚至增加save as的参数,也没解决$olSaveType = "Microsoft.Office.Interop.Outlook.OlSaveAsType" -as [type] ,$olMailItem.SaveAs($paths+"\adssadsa.msg",$olSaveType::olMSG) 

发现国外网上还挺多人在问这个问题,并且问了公司的powershell 大神,还是解决不了html format的问题。 

解决办法还是bodyhtml的属性设置,参照如下代码:


param(
    [String]$To="[email protected]",
    [String]$Cc="[email protected]",
    [String]$Subject="Please suggest"

)
$paths="xxxx"
$templatePath=$paths +"\11212.msg"
$olApp = New-Object -ComObject Outlook.Application;
$olMailItem = $olApp.CreateItemFromTemplate($templatePath);

$olMailItem.To = $To;
$olMailItem.Cc = $Cc;
$olMailItem.Subject = $Subject;
$olMailItem.BodyFormat=3
$EmailContent=$olMailItem.HTMLBody
$EmailContent = $EmailContent.Replace("Dear xxx," ,"Dear Amanda");
$olMailItem.HTMLBody=$EmailContent
$olSaveType = "Microsoft.Office.Interop.Outlook.OlSaveAsType" -as [type] 
$olMailItem.SaveAs($paths+"\adssadsa.msg") 
 

猜你喜欢

转载自blog.csdn.net/Alvin_CC/article/details/85778984