エクセルからメールを送る

今回はエクセルからメールを送る方法を紹介します。

メールを単に送るのであれば、メールソフトやWEBメールを使えばよいんですが、

業務システムの中で、スケジューラ―やタイマーなどで自動実行するアプリケーションがあった場合、その処理が、実行された?・正常に終わった?・どのような結果だった?等、近くに居なくても、処理結果がある程度分かるような情報を携帯にメールで送られて来れば便利。

ということで、利用範囲は広くで、簡単に組み込めます。

かなり以前から利用されている「BASP21」という汎用コンポーネントを使用してみました。今回は、このコンポーネントの中でSMTP、POP3、FTP エンジンである BSMTP.DLLを使用します。(私は、あまり知りませんでした…)

今回は、Windows10(x64)での動作確認もかねて、単純にメールが送信できるか、試してみました。

環境設定 → 入力シート作成 → マクロ作成  の手順で作成してみます。


■■■ 環境設定 ■■■

私が使用しているPCは Windows10(x64) ですので

BSMTP.DLL を C:\Windows\sysWOW64 フォルダにコピーします。

32ビットOSのPCでは C:\Windows\system32 フォルダにコピーします。

BASP21は下記のサイトからダウンロードできます。

BASP21のページ


■■■ 入力シート作成 ■■■

メールの宛先・タイトル・内容等を入力するエクセルのシートを用意します。

エクセルでのメール送信画面

上記の様なシートを準備しました。

「宛先」にはメール送信先のメールアドレス、「件名」にはメールのタイトル、「内容」にはメールの本文を入力できる様にしました。それぞれ入力が終了したら、「送信」ボタンをクリックすることで「宛先」にメールが送信される、ってかんじです。

あとは、「送信」ボタンと実際にメールを送信するマクロを関連付ければ終了です。


■■■ マクロ作成 ■■■

入力シートから、「宛先」、「件名」、「内容」のセルからデータを読み取りメールを送信するマクロを作成します。

Excelの「開発」タブから「コード」「マクロ」を選択してマクロウインドを開きます。

マクロ名に Excel_MailSend と入力し「作成」を選択します。

コード入力画面が表示されたら、以下のコードを入力します。

Option Explicit

Private Declare Function SendMail Lib "bsmtp" _
      (szServer As String, szTo As String, szFrom As String, szSubject As String, _
       szBody As String, szFile As String) As String

Sub Excel_MailSend()
    
    Dim i As Integer
    Dim sStatus As String
    Dim szServer As String  ' SMTPサーバー名
    Dim szFrom As String    ' 送信元
    Dim szTo As String      ' 宛先
    Dim szSubject As String ' 件名
    Dim szBody As String    ' 本文
    Dim szFile As String    ' 添付ファイル
    
    
    szServer = "excel-seed.com"		' ←メールサーバーによって異なります↓
    szFrom = "[ 送信元メールアドレス ]" & vbTab & "[ メールユーザーID ]:[ パスワード ]"
    szTo = Range("C2").Text
    szSubject = Range("C4").Text
    szBody = Range("C6").Text
    szFile = ""
    
    sStatus = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile)

    If sStatus = "" Then
        i = MsgBox("メールの送信が完了しました。", vbInformation, "送信完了")
    Else
        i = MsgBox("メールの送信が異常終了しました。STAT=[" & sStatus & "]", vbCritical, "送信異常")
    End If
    
    
End Sub

SMTPサーバー名(szServer)はご利用のサーバー名に置き換えてください。

メールサーバーによっては、SMTPサーバー名をサーバー名:ポートの形式で指定する場合もあります。

あとは、エクセルシートの「送信」ボタンとマクロ名を関連付ければOKです。

シート状の「送信」ボタンを右クリックして「マクロの登録」を選択。

マクロの登録ウインドウのマクロ名の中から Excel_MailSend を選択して、OKボタンをクリック。

これで、完成です。(保存するのを忘れずに!)

宛先・タイトル・内容を入力して「送信」ボタンを押してみましょう。

「送信完了」が表示されたらOK!

エクセルでのメール送信画面(送信完了)

あ!もう一つ、送信先にこの内容が届いているはずですので、メールを確認してください。

2016年12月07日 17時00分