もりさんのプログラミング手帳

教えることは、二度学ぶこと

スポンサーリンク

【VBAでOutlook操作】同じ宛先に同じ内容のメールを連続送信する

会社のとある業務でメールサーバ負荷テストを実施することになりました。

『指定の時間に指定のメールアドレスに複数名で一斉にメール送信する』

という作業です。

このような単純作業こそ、マクロの出番ですね。

DoS攻撃のようなマクロを作ってみました。

f:id:excel-accounting:20180701084324p:plain:w400

この記事でできること

  • 同じ[宛先]に
  • 同じ[本文]と[添付ファイル]を
  • x秒間隔で
  • y回送信する

f:id:excel-accounting:20180701083454p:plain:w400

事前準備

Excelシート上でこのように設定項目を準備しておきます。
f:id:excel-accounting:20180220213241p:plain:w600

ソースコード

参照設定「Microsoft Outlook xx.0 Object Library」を使用
(バージョンは環境によって異なります)

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub main()

    Dim rc As Long
    rc = MsgBox _
    ("連続送信を開始します。よろしいですか?", vbOKCancel + vbQuestion)
    
    If rc = vbOK Then
    
            Call SendMail
            
            MsgBox "メール送信が終了しました。"
    
    End If

End Sub

Sub SendMail()

    Dim OutlookObj As Outlook.Application 'Outlookオブジェクト
    Set OutlookObj = CreateObject("Outlook.Application")
    
    Dim attached As String '添付ファイル
    attached = Range("B5").Value & "\" & Range("B6").Value
    
    Dim Interval As Long, endCnt As Long
    Interval = Range("D2").Value * 1000 '送信間隔
    endCnt = Range("D3").Value '繰り返し回数
    
    Dim i As Long: i = 1 '繰り返しカウンタ変数
    
    Do Until i = endCnt + 1 '指定回数、送信を繰り返す
    
        Dim mailItemObj As Outlook.MailItem 'Mailオブジェクト
        Set mailItemObj = OutlookObj.CreateItem(olMailItem)
        
        Dim myattach As Outlook.Attachments '添付ファイルオブジェクト
        Set myattach = mailItemObj.Attachments
        
        mailItemObj.To = Range("B2").Value 'To
        mailItemObj.CC = Range("B3").Value 'CC
        mailItemObj.Subject = Range("B4").Value & "(" & i & ")" '末尾に連番を付与
        mailItemObj.Body = Range("B7").Value '本文
        
        myattach.Add attached '添付ファイル付与
        
        mailItemObj.Send 'メール送信
        
        Set mailItemObj = Nothing
        Set myattach = Nothing
        
        i = i + 1
        Sleep Interval
    
    Loop

End Sub


あまり使いどころのなさそうなマクロですが、もし似たような業務をする機会があったらぜひカスタマイズして使ってみてくださいね!

「同じ宛先じゃなくて、別々の宛先に一括で送信したい」という場合はぜひこちらをご覧ください!

スポンサーリンク