初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

中級者のためのExcel エクセルマクロVBA入門:メールを送信するその2(BASP21を使う)


f:id:drumer2sh:20140814112354j:plain

BASP21は強力な送受信ツール


今回はメール送信のその2です。前回よりもこっちの方が簡単ですが、Excel2010とかあたりで動作未検証なので、ちょっと記事としてはあまりよろしくはないかもしれないのですが、一応ナレッジとしては共有しちゃおうかな?っていうのと、この記事を機に64bit版でも検証しちまうか?的なことも含めております。軍曹!

BASP21って?


BASP21は、メールの送受信や、HTTP・FTPなどの機能を提供してくれるDLLです。
VBなどのプログラミング言語だけでなく、もちろんVBAからも使用可能です。

これを使うことで、前回よりも多分簡単にメール送信とかが可能になります。なので上級ではなくて中級というわけです。では早速メール送信をしてみましょう。

BASP21のダウンロード


こちらから、BASP21をダウンロードするのですが・・・どこかわかりますか?正直私も( ゚д゚)?的なのところだったので、ちょっとだけ、詳細書いておきます。以下のページの枠で囲ったリンクからダウンロードします。

f:id:drumer2sh:20140814112410p:plain

このページの赤い枠のリンクをそれぞれダウンロードします。ダウンロードしたら、「BASP21-2003-0211.exe」を[右クリック]→[管理者として実行]

後は次へ次へと普通にインストールすればOKです。次にBsmtp20070629-587.lzhを解凍すると、[Bsendm.exe]と[Bsmtp.dll]とう二つのファイルができます。アイコンがなんかいかがわしいですが、気にせずに(笑)後は、この2つのファイルをコピーして、インストールされているsystem32フォルダに上書きコピーします。

これで、インストールは完了です。

BASP21をエクセルVBAで使う。


エクセルVBAでBASP21を使うには、参照設定が必要になります。参照設定は、ファイルシステムオブジェクト(FSO)を使う時にも設定した思います。VBE上の[ツール]→[参照設定]から「BASP21 1.0 Type Library」にチェックを付けます。これでメールを送るための準備が整いました。

メール送信する


メールを送るためのSMTPの設定やポートがどうとか、メールヘッダがどうとかはとりあえず、置いといて、いきなりコード書いておきます。

Sub MailTest()
    ' 送信に必要な変数
    Dim objMail As Variant
    Dim mailResult As String
    Dim server As String
    Dim mailTo As String
    Dim mailFrom As String
    Dim mailTitle As String
    Dim mailBody As String
    
    'メール送信オブジェクトを作成
    Set objMail = CreateObject("basp21")   
    
    '送信に必要なパラメータの設定
    server = "hoge.xxxxx.com"           ''SMTPサーバー
    mailTo = "bar@example.com"          ''宛先
    mailFrom = "foo@example.com"        ''差出し人
    mailTitle = "タイトル"              ''タイトル
    mailBody = "ここに本文を書きます"   ''本文
    
    ' メール送信を行う結果はmailResultに入る
    mailResult = objMail.SendMail(server, mailTo, mailFrom, mailTitle, mailBody, "")
    
    ' 送信後オブジェクト破棄
    Set objMail = Nothing
    
    ' 送信エラーの場合にはメッセージを表示する
    If mailResult <> "" Then MsgBox mailResult
    
End Sub

はい、こんな感じです。実際に送信するのはBASP21に入っているSendMailメソッドで行います。後は必要なパラメーターを用意してあげるだけです。非常に簡単ですね。

このメソッドに、たとえばメールアドレスとかを引数にしてあげれば、特定ではなく、指定したメールアドレスにメールを送ることも可能になるわけです。もちろん、ファイルを添付してメールを送ることだってできます。ちなみにファイルを添付してメールを送信する場合は・・・

    Dim filePass As String

    filePass = "C:\test.txt|application/octet-strea" + vbtab + "C:\test2.txt|sample.txt"
    ' メール送信を行う結果はmailResultに入る
    mailResult = objMail.SendMail(server, mailTo, mailFrom, mailTitle, mailBody, filePass)

というように、SendMailメソッドの最後の引数にファイルパスを指定します。

提供する時ってどうすれば?


これでメールを送ることは簡単にできるようになりますが、1つ問題があります。それはだれか別の人のPCにこのマクロを配布して使ってもらう場合ですね。この場合だと、配布先のPCにBASP21が入ってないと当然メールを送ることはできませんので、必ずマクロとBASP21のDLLファイルを一緒に配布する必要があります。
各DLLファイルのコピー先はSystem32と決まっているので、インストーラー作成ソフトなどでインストーラーを作り、それを使ってあげれば配布にはとても便利です。



いかがでしたでしょうか?以前紹介した上級向けのメール送信よりは楽に作れると思います。ちょっとDLLを別で配布しないといけないデメリットはありますが、こちらも十分使えると思います。


次はこのメール送信とクラウドサービスを組み合わせてエクセルからFAX送信をしてみます。


今日はここまで!


かしこ