UiPath로 자동 메일 보내기 VBScript 및 배치 파일, 공휴일 캘린더 사용
도입 배경
폐사에서는 일하는 방법 개혁을 위해, 건전하고 화제의 RPA를 도입했습니다.
본사에서는 WinActor를 메인으로 사용하고 있는 것 같다. 공장에서는 해외 전개도 생각하고 있으므로 UiPath
의 2개 기둥이 될 것 같다.
프로그래머라면 UiPath가 사용하기 쉽다고 생각한다.
그래서 시작에 가벼운 녀석에서 만들어 보았다.
전체감
매주 수요일, 월급일 전, 연휴 전의 규정 시각이 되면, 잔업 신청 메일(첨부 파일 첨부)을 송신한다
· 작업 스케줄러에서 매일 실행
・공휴일 캘린더를 열어 해당 날짜인지 판단
· 신청자 목록의 Excel에 전자 표시가 있는지 확인
→ 없으면 주의 메일을 관계자에게 송신
→있으면, 잔업 신청 메일(첨부 파일 첨부)을 송신한다
Excel에서 연간 달력이 있으며 두 번째 금요일이나 고정이 아닌 날짜를 색칠합니다.
↓
이 파일을 열면 자동으로 시스템 날짜에서 확인
↓
신청서의 Excel을 열어 자동으로 전자표의 존재 체크
↓
배치 파일 실행
지금까지 SendMail.vbs로 이동
SendMail.vbs 코드
Option Explicit
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Call Main
'***************************************************
'Main
'***************************************************
Sub Main()
Dim TextSub
Dim TextBody
Dim oXlsApp
Dim ContentsLog
Dim Nendo
Nendo = Year(dateadd("m",-3,date()))
Dim DirName
DirName = "\\xxxxxxxxxxxxxxxxxx\新フレックス管理表\" & Nendo & "年度\"
Dim LinkDir
LinkDir = "<file://" & DirName & "定時日時間外労働年間計画書\>"
' Excel起動
Set oXlsApp = CreateObject("Excel.Application")
If oXlsApp Is Nothing Then
' Excel起動失敗
ContentsLog = "Excel起動失敗"
Call WriteLog(ContentsLog)
Else
oXlsApp.Application.Visible = false
' --1秒待つ
WScript.Sleep(1000)
ContentsLog = "該当の日付かチェック 開始"
Call WriteLog(ContentsLog)
dim result
' --ブックを開く
Dim xlWB
Set xlWB = oXlsApp.Application.Workbooks.Open(DirName & "(正式)" & Nendo & "年度MIC標準カレンダーma.xlsm")
' --Excelの警告を非表示にする
oXlsApp.Application.DisplayAlerts = False
oXlsApp.Visible = False
result = oXlsApp.application.Worksheets(1).range("B60").value '該当の日付かチェック
xlWB.Close False
ContentsLog = "申請書が存在するかチェック 開始"
Call WriteLog(ContentsLog)
Dim resultCheck
Dim myF
'xlsmをGET
For Each myF in fso.GetFolder(DirName & "定時日時間外労働年間計画書\").Files
If InStr(1,myF.Path,".xlsm") > 0 Then
resultCheck = myF
Exit For
else
resultCheck = "False"
End If
Next
'該当日付のチェック
If result = "OK" Then
ContentsLog = "該当の日付です。 "
Call WriteLog(ContentsLog)
If resultCheck <> "False" Then
ContentsLog = "該当の申請書を発見! "
Call WriteLog(ContentsLog)
Dim TargetResult '印鑑チェック
Set xlWB = oXlsApp.Application.Workbooks.Open(resultCheck)
TargetResult = oXlsApp.application.Worksheets(1).range("K1").value
Dim TargetName '名前チェック
TargetName = oXlsApp.application.Worksheets(1).range("K2").value
xlWB.Close False
' --Excel終了
oXlsApp.Quit
' --Excelオブジェクトクリア
Set oXlsApp = Nothing
ContentsLog = "電子印のチェック完了! "
Call WriteLog(ContentsLog)
'なかったらメール送信
if TargetResult = 0 or TargetName = 0 then
ContentsLog = "メール送信開始。 電子印がない "
Call WriteLog(ContentsLog)
TextSub = "【要確認】電子印がありません"
TextBody = "自動配信メール" & vbcrlf & vbcrlf & "丸山さん、松尾さん" & vbcrlf & vbcrlf & "電子印が押していないため、【自動】残業申請メール処理を中止しました。" & vbcrlf & vbcrlf & "ファイルを確認してください。" & vbcrlf & vbcrlf & LinkDir
Call SendMail(TextSub,TextBody)
ContentsLog = "メール送信終了。 電子印がない"
Call WriteLog(ContentsLog)
else
'すべてがクリアしたら
if result = "OK" then
ContentsLog = "UiPath実行開始! バッチ呼び出し開始 "
Call WriteLog(ContentsLog)
Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.run "C:\Users\utf\Documents\UiPath\test\SendMail.bat",0
ContentsLog = "UiPath実行開始! バッチ呼び出し完了"
Call WriteLog(ContentsLog)
end if
Set oShell = Nothing
end if
else
ContentsLog = "メール送信開始 該当の申請書がない!"
Call WriteLog(ContentsLog)
' --Excel終了
oXlsApp.Quit
' --Excelオブジェクトクリア
Set oXlsApp = Nothing
TextSub = "【要確認】申請書がありません"
TextBody = "自動配信メール" & vbcrlf & vbcrlf & "丸山さん、松尾さん" & vbcrlf & vbcrlf & "申請書が存在しないため、【自動】残業申請メール処理を中止しました。" & vbcrlf & vbcrlf & "ファイルを確認してください。" & vbcrlf & vbcrlf & LinkDir
Call SendMail(TextSub,TextBody)
ContentsLog = "メール送信終了。 該当の申請書がない!"
Call WriteLog(ContentsLog)
end if
else
ContentsLog = "該当日ではありません "
Call WriteLog(ContentsLog)
end if
end if
End Sub
'***************************************************
'Mail送信
'***************************************************
Sub SendMail(strSub , strBody)
Dim UserName
Dim UserPass
UserName = "xxxx@yyyyy"
UserPass = "kimera13"
Dim MailTo
Dim MailFrom
Dim MailBcc
MailTo = "aaaaa@rrrr,hhhh@jjjj,jjjj@kkkk,xxxxx@lllll,"
MailFrom = "ffff@kkkk"
MailBcc = "ffff@kkkk"
Dim ServerName
ServerName = "mail.xxxx"
Dim objMail
Set objMail = CreateObject("CDO.Message")
objMail.From = MailFrom
' objMail.To = UserName
objMail.To = MailTo
objMail.Bcc = MailBcc
objMail.Subject = strSub
objMail.TextBody = strBody
'送信方法 1:ローカルSMTPサービスのピックアップ・ディレクトリにメールを配置する 2:SMTPポートに接続して送信 3:OLE DBを利用してローカルのExchangeに接続する
'SMTPサーバを指定(ホスト名orIP)
Dim schem
schem = "http://schemas.microsoft.com/cdo/configuration"
objMail.Configuration.Fields.Item(schem & "/sendusing") = 2
objMail.Configuration.Fields.Item(schem & "/smtpserver") = ServerName
'SMTPポート
objMail.Configuration.Fields.Item(schem & "/smtpserverport") = 25
'SSL通信をする/しない
objMail.Configuration.Fields.Item(schem & "/smtpusessl") = False
'SMTP認証 1(Basic認証)/2(NTLM認証)
objMail.Configuration.Fields.Item(schem & "/smtpauthenticate") = 1
'SMTP送信ユーザ名
objMail.Configuration.Fields.Item(schem & "/sendusername") = UserName
'SMTP送信ユーザパスワード
objMail.Configuration.Fields.Item(schem & "/sendpassword") = UserPass
'タイムアウト
objMail.Configuration.Fields.Item(schem & "/smtpconnectiontimeout") = 30
objMail.Configuration.Fields.Update
objMail.Send
Set objMail = Nothing
End Sub
'************************************************* **
'로그 쓰기
'************************************************* **
Sub WriteLog(strText)
Dim objLog
Dim TimeStamp
Dim LogFile
LogFile = "C:\Users\utf\Documents\UiPath\test\log\mail_ope_log.txt"
TimeStamp = Date & "_"& Time
Set objLog = fso.OpenTextFile(LogFile,8,False)
objLog.WriteLine(strText & " " & TimeStamp)
objLog.Close
Set objLog = nothing
End Sub
``
아래 UiPath
도전
· 패스워드, 유저명을 어떻게 가질 수 있을까?
· Windows 보안의 스마트 로그인 방법은?
·
Reference
이 문제에 관하여(UiPath로 자동 메일 보내기 VBScript 및 배치 파일, 공휴일 캘린더 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/karcenciel0113/items/bf48ea1bef1fbb2ee066텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)