パスワード別送メールのzipを自動で解凍したい #1

VBA

おはようございます、タナイです。
今日はパスワード別送という悪しき習慣に立ち向かっていきたいと思います。

メールの添付ファイルが勝手にzipで圧縮してあって「先ほどお送りしたメールのパスワードをご連絡します」みたいな機械送信がされる、あのぶっ飛ばしたくなるやつです。

Twitterでもネタにされる有様です

こうしたメールでのパスワード別送やログインパスワードの定期変更など、すでに無意味(あるいはむしろ悪影響)だと結論付いているものに関しても会社に一度導入されたらそうそう無くなりません。

こうした非効率には個人の工夫で立ち向かうしかないのがサラリーマンの常です。

そこで今回は多くの日本企業で用いられているであろうOutlookでパスワード別送zipの自動解凍に挑戦してみたいと思います

賛否両論のOfficeソフトですが、Officeがインストールされていれば自動的にVBAという開発環境・実行環境が全員に揃っているのが何よりの強みです。

※長くなりそうなので数回に分けて投稿していきます。

条件の整理

今回は、話の簡単のため以下の条件で作っていきたいと思います。

  • パスワードメールは機械送信による定型フォーマットのものとする
  • パスワードメールはzip本体を含むメールより先に届くものとする
  • パスワード付きzipの送信元は何社かに絞られているものとする
  • パスワード付きzipのファイル名にも規則があるものとする
  • PCに7-zipがインストールされているものとする

多くの場合は、以上の制限を条件にしても太宗をカバー可能かと思います。

7-zipだけは別にインストールが必要なのでちょっとネックかもしれません。

必要な機能の整理

条件をもとにどのような動作とするかですが、以下とします。

  • メール受信時に自動でzipが解凍される(手動でのマクロ起動はしない)
  • 解凍されたzipの中身はメールの添付ファイルとして追加されるようにする
  • 元のzipは一応残す(消そうと思えば消せるが安全のため)

基本的には手放しでただメールを受信すれば事が済むようにしたいということです。

内部的な動作の想定

以下のような流れで動くプログラムとしましょう。

  1. メール受信時のイベントプロシージャとして記述する
  2. 受信したメールのIDを取得する
  3. パスワード別送の送信元かを判定する
  4. 添付ファイルが含まれているかを判定する
  5. zipファイルであるのかを判定する
  6. メールを含むフォルダを取得する
  7. パスワードメールを特定する
  8. パスワードメールの本文からパスワードを抽出する
  9. 7-zipをコマンドラインで起動してzipをテンポラリに解凍する
  10. 解凍されたファイルを元のメールの添付ファイルとして追加する
  11. 解凍されたファイルをテンポラリから削除する
  12. (必要なら)処理完了のメッセージボックスを表示する

コマンドラインでの起動とファイルの削除が絡むので、WshShellとFileSystemObjectの利用が必要です。遅延バインディングをしないなら参照設定も必要になりそうです。

次回へ

大まかな流れが決まったので次回以降、実際にプログラムを作成していこうと思います。

VBAになじみのない人にとっては呪文のように感じるかもしれませんが、最終的には初心者でも分かるように噛み砕いて解説していきたいと考えています。

コメント

  1. […] おはようございます、タナイです。今日は前回に引き続きパスワード別送zipの自動解凍について書いていきます。 […]

タイトルとURLをコピーしました