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 보안의 스마트 로그인 방법은?
·

좋은 웹페이지 즐겨찾기