プロフィール
VBA

Excel VBA メール送信ツール(フリーメール)

VBAでメール送信について紹介します。

自動でメール送信するツールを作ってみました。

今回はOutlookではなくフリーメール(Gmail、YahooJapan)です。

YahooJapanは送信が成功したり失敗したりするのでGmailがおすすめです。

Excel VBA メール送信ツール(Outlook)VBAでOutlookのメール送信について紹介します。 自動でOutlookのメール送信するツールを作ってみました。 htt...

実際に作ったExcelマクロファイルはこちらに載せています。

https://yahoo.jp/box/vuzRfV

エクセルの名前の定義

エクセル自体にもセル名の定義をしているので、まずそこから説明しておきます。

意外とエクセルのVBAでは名前の定義を色々使えると良いことが多いです。

仕様と合わせて説明します。

仕様

①「送信元アカウント」を選択します。

リストは「アカウント」をもとに選べます。

下の画像で言うと、Gmail、Yahoo、YahooUSAがあるので3つから選べる状態です。

②送信ボタンをクリックすると「送信元アドレス」からとなりのシートを1つずつ読込んでメールを送信していきます。

名前の定義

メインシートの各名前は以下のようなルールで定義づけしています。

SMTPServer   :[送信元アカウント] + [_smtpserver]
PortNumber   :[送信元アカウント] + [_smtpserverport]
送信アカウント名 :[送信元アカウント] + [_sendusername]
パスワード    :[送信元アカウント] + [_sendpassword]
送信元アドレス  :[送信元アカウント] + [_From]

「メール送信」ボタンクリック後、後続の処理で「送信元アカウント」と文字連結をして送信を行います。

参照設定

参照設定

ファイル用もフォルダ用もダイアログを開くに参照設定を必要です。

手順はコードエディターから「ツール(T)」→「参照設定(R)」と移動します。

その後、Microsoft CDO for Windows 2000 Libraryにチェックを付けておいてください。

CDOとはMicrosoft Collaboration Data Objectsのことだそうです。

CDO は、メッセージング機能を持つアプリケーションの作成を容易にするために、あるいは、既存のアプリケーションにメッセージング機能を追加するために設計されたものです。
microsoft.comより

許可設定

Gmail

Gmailアカウントを使ってメール送信する場合は「安全性の低いアプリのアクセス」許可しておく必要があります。

設定は以下にアクセスすることで変更できます。

https://myaccount.google.com/lesssecureapps

YahooJapan

ヤフージャパンアカウントを使ってメール送信する場合は特に設定は必要はないようです。

VBA C# オススメ参考書プログラミングの参考書でオススメの紹介をしていきます。 それぞれ私が使っている言語のみです。 VBAのオススメ参考書をExc...

メール送信処理のコード

処理の流れは以下の順です。

①メインシートから送信元情報を取得
②となりのシートから送信メール内容を取得
③添付ファイルをメールオブジェクトに貼り付ける
④メールを送信する
⑤次のシートを同様に処理

コード

解説

 

送信元アカウント情報を設定(メインシートから取得)

strSendAccount = Sheets(1).Range(“SendAccount”).Value

でメインシートの名前「SendAccount」からアカウント名を取得しています。

その後取得したアカウント名とSMTPServerやPortNumberの名前を文字連結して送信するための情報を取得しています。

送信元アカウントでGmailを選んだなら.Range(strSendAccount & “smtpserver”).Valueの中身はRange(“Gmail_smtpserverport)”.Value

Yahooを選んだならRange(“Yahoo_smtpserverport”).Valueのようになります。

メール情報を取得

ここでは改行コードLFをCRLFに置換しています。

なぜかと言うとYahooで送信する場合は、エラーになるためです。

改行コードがCRとLFではなく、LFだけの行があるために、エラー
メールが送信できるようになった より

メールに情報をセットする

ここではメールのオブジェクトに件名や宛先などをセットしています。

添付ファイルを貼り付ける

FileSearchメソッドを使って、添付ファイルのパスを取得しメールのオブジェクトに張り付ける処理を行っています。

FileSearchは後で説明を記載しています。

その後、添付ファイルがない場合、メールは送らず次のシートを処理するようになっています。

※発注連絡という想定なので、発注書の添付ファイルがなければ連絡はする必要がないから送らないという考え方です。

FileSearchメソッド

送信対象のファイル([yyyymmdd_シート名.拡張子]フォーマット)のファイル名を検索し配列に格納する処理です。

検索する場所は「..\VBA Outlookメール送信\添付ファイル」以下のみです。

他の場所に配置したファイルは添付ファイルとして検索されません。

コード

解説

引数として受け取った検索フォルダ(SearchPath)を検索条件(SearchText)を元に検索します。

見つかったファイルのパスを配列に格納していきます。

検索条件に一致するファイルが見つからなくなったら配列を呼び出し元に返しています。

ShowErrMsgメソッド

エラーをキャッチするメソッドです。

予測できないエラーがあればここでキャッチしてエラーがあったことをメッセージ表示します。

コード

解説

エラーがあった場合、そのエラー番号とエラー内容をメッセージ表示します。

送信結果

送信結果はこんなメールです。

<参考URL>
・メールを送信する
http://officetanaka.net/excel/vba/tips/tips45.htm
・「 Gmailで相手に一斉に送信するエクセルマクロ」のコメント一覧
http://bzowner.blog.fc2.com/blog-entry-2.html?sp&m2=res
・CDO.Messageによるメール送信
http://serialty.blog117.fc2.com/blog-entry-10.html
・iCloud メールクライアント向けのメールサーバ設定
https://support.apple.com/ja-jp/HT202304
・CDOでメール送信
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html
・VBAでメール送信する
https://excel-ubara.com/excelvba4/EXCEL233.html
・VBAでGmail送信!CDOを活用してメールを操作する方法
http://www.fastclassinfo.com/entry/vba_gmail_sendmail
・メールが送信できるようになった
https://ajya.hatenablog.jp/entry/2012/03/22/223917

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です