メール送信用スクリプト


それと処理が完了した後でメールが飛ばしたいというのも有ったので
メール 送信用スクリプト
いろんな人が作っているので今更感があるものの。
念のため保管。Gmailを送信エンジンに使うのもどうかなという気がするけど
SSL対応してない某社メールサーバが悪いということで


Function CompMailSend(val_keyNo,val_Path)

    Dim argRtn(2)        '引数チェック用   
    Dim objFso            'ファイル存在チェック用

    Dim objExcel
    Dim xlSheet
    Dim keyNO           
    Dim excelPath       
    Dim i           
    Dim LastRow        
    Dim matchnum        '対象EXCEL行数確保用
    Dim KeyCell           
    Dim CellValue       
    Dim strEmpCol   
    strEmpCol ="X"         'EXCEL列
    Dim empdateColum        'EXCEL列
    empdateColum ="X"        
    Dim InedepColumn        'EXCEL列
    InedepColumn ="X"        
    Dim TargetRow        '対象行
   
    Dim MailRowValue   
    Dim MailEmpDValue   
    Dim MailindepValue   

    Dim oMsg                'メールオブジェクト
    Dim strConfigurationField
    Dim strBodymsg            'メール本文用
    Dim mailUser            '
    Dim mailpass            '
    Dim smtpserver            'SMTPサーバ
    Dim smtpport            'SMTPポート
    Dim memberto                '送信先
   
    strConfigurationField="http://schemas.microsoft.com/cdo/configuration/"
    'Gmailを使用
    mailUser="XXX"           
    mailpass="XXX"           
    smtpserver="smtp.gmail.com"
    smtpport="465"
    '宛先追加の場合は下記を追加
    memberto="XXX,"
    memberto=memberto & "XXX,XXX"
 
  '/* 引数エラーチェック
    argRtn(0)= argumentChecker(val_keyNo)
    argRtn(1)= argumentChecker(val_Path)
   
    If argRtn(0) ="False" Or argRtn(1) ="False" Then
        CompMailSend = "False"
        Logrtn = OutLogger("[Err],EXCELパスが空白です。")
        If Logrtn = "False" Then
            WScript.Echo LErrMsg
        End If
        Exit Function
    Else
        keyNO = val_keyNo
        excelPath = val_Path
    End If
   
    'ファイル存在チェック
    Set objFso = CreateObject("Scripting.FileSystemObject")
    If objFso.FileExists(excelPath) Then
        Set objExcel = CreateObject("Excel.Application")
        objExcel.Workbooks.Open(excelPath)
        Set xlSheet = objExcel.Worksheets(1)
        objExcel.Visible = False
    Else
        CompMailSend="False"
        Logrtn = OutLogger("[Err],EXCELファイルが存在しません。")
        If Logrtn = "False" Then
            WScript.Echo LErrMsg
        End If
        Exit Function
    End If
   
    LastRow = xlSheet.UsedRange.Rows.Count    'EXCEL最終行取得
   
    For i = 1 To LastRow Step 1
        'KeyNoと比較してヒットするものの行数を取得
        KeyCell = strEmpCol & i
        CellValue = xlSheet.Range(KeyCell).Value
        If keyNO = CellValue Then
            matchnum = i
            Exit For
        End If
    Next
   
    If keyNO <> CellValue Then
        objExcel.DisplayAlerts = False
        objExcel.Application.Quit       
        CompMailSend="False"
        Exit Function
    End If
   
    'メールテンプレート文言用変数にEXCELから取得したそれぞれの値をセット
    MailRowValue=i
    TargetRow = empdateColum & matchnum
    MailEmpDValue=xlSheet.Range(TargetRow).Value
    TargetRow = ""
    TargetRow = InedepColumn & matchnum
    MailindepValue=xlSheet.Range(TargetRow).Value
   
    'メール本文生成
    strBodymsg= strBodymsg & "宛先" & vbCrLf
    strBodymsg= strBodymsg & vbCrLf
    strBodymsg= strBodymsg & "お疲れ様です。" & vbCrLf
    strBodymsg= strBodymsg & "EXCELを更新しました。" & vbCrLf
    strBodymsg= strBodymsg & vbCrLf
    strBodymsg= strBodymsg & excelPath & vbCrLf
    strBodymsg= strBodymsg & vbCrLf
    strBodymsg= strBodymsg & "A列" & MailRowValue & "行目" & vbCrLf 
    strBodymsg= strBodymsg & "値  :" & MailEmpDValue & vbCrLf
    strBodymsg= strBodymsg & "値:" & MailindepValue & vbCrLf
    strBodymsg= strBodymsg & vbCrLf
    strBodymsg= strBodymsg & vbCrLf
    strBodymsg= strBodymsg & "==============================="  & vbCrLf
    strBodymsg= strBodymsg & "送信日時:" & Now & vbCrLf
    strBodymsg= strBodymsg & "このお知らせは送信専用メールアドレスから配信されています。"  & vbCrLf
    strBodymsg= strBodymsg & "このアドレスに返信しないでください。"
   
    'メール送信
    Set oMsg = CreateObject("CDO.Message")
    oMsg.From = "XXX"
    oMsg.To = memberto
    oMsg.Subject = "タイトル"
    oMsg.TextBody = strBodymsg
   
    With oMsg.Configuration.Fields
        .Item(strConfigurationField & "sendusing") = 2
        .Item(strConfigurationField & "smtpserver") = smtpserver
        .Item(strConfigurationField & "smtpserverport") = smtpport
        .Item(strConfigurationField & "smtpauthenticate") = 1
        .Item(strConfigurationField & "sendusername") = mailUser
        .Item(strConfigurationField & "sendpassword") = mailpass
        .Item(strConfigurationField & "smtpconnectiontimeout") = 60
        .Item(strConfigurationField & "smtpusessl") = True           
        .Update
    End With
    oMsg.Send
   
    'EXCELを終了
    objExcel.DisplayAlerts = False
    objExcel.Application.Quit       
    CompMailSend="True"
   
End Function

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)