2015年10月27日火曜日

Excel VBA 異常発生をメールで通知

Excel VBA で「ワイヤレス温度計の温度データをモニタして、異常発生時にメールで通知」がテーマ。受信は不要なので、手早くできる方法を選択したい。
ネットで色々探って比較したが、その多くが、いつもお世話になっている「Excelでお仕事」のサイトの「CDOでメール送信」というページの記事を基本にしているようだ。
Gmail を使用したテストメールが成功するまで少し悩まされたので、整理しておく。(他のメールハーバーは試していない)

グーグルヘルプにある、メールが届かないない場合のチェックリスト
  • Gmail で POP や IMAP が有効になっているか
  • SMTP サーバーの SSL を有効にしたか
  • SMTP サーバーの認証を許可したか
    メール クライアントで SMTP サーバーの [認証を許可] がアクティブになっていることを確認します。
  • 入力したユーザー名とパスワードが合っているか
    @gmail.com」まで入力していることを
  • 添付ファイルを送信しようとしているか
    実行ファイル、 25 MB を超えるメッセージの送受信はできない
  • それでもメールを送信できない場合、SMTP サーバーをポート 465(SSL)とポート 587(TLS)で設定していて、メールの送信ができない場合は、ポート 25(SSL)で を設定してみ
  • SMTP サーバー設定、「smtp.gmail.com」に変更して、設定を保存してみて
  • SMTP サーバーに接続できるか、Telnet で試す
まず、Telnet で試してみるべきかも。これがダメなら全て徒労になる。

うまくいかなかった原因は、Gmai が昨年から2段階認証となったこと。古いサイトの記事では出てこない。「安全性の低いアプリへのアクセスを有効」にしておく必要があった。
上の項目は、Gmail の「メール設定」「メール転送とPOP/IMAP」画面だが、ここではなくて、Googleアカウントヘルプから、「安全性の低いアプリがアカウントにアクセスするのを許可する」を選択しておく。
  • すると、「 安全性の低いアプリへのアクセスが有効になりました」と通知メールが届く。
  • Gmai で実際運用する場合は、2段階認証にしてアプリ用のパスワードを使うようにした方がいいのかも
今回、いろいろな人の作成したサンプルコードを比較してみて、パッと見、行数がエラく違ったりしてずいぶん違う印象を持ったのだが、解析していくと当然のことながら同じ。構造体でひとかたまりのデータにして渡しているいるだけだ。(送信するだけなら簡単)