electronは大変便利なプラットフォームですが、Windows環境で使う場合に於いて、特に企業ユースの場合「あれは駄目、これは駄目」そういったケースが多いと思います。その1つがメール送信。(SMTP駄目やらWeb APIの使用駄目などなど)。

そうすると、メール1つ送るにしても、electronからはこのままでは送る事ができません。しかし、ほとんどの企業で穴になっている「VBA」や「VBS」については使える事が多いので、これを利用してVBScriptにそれら代理をしてもらう手段を考えました。VBScriptに引数を渡し、指定の条件でOutlookからのメール送信をやってもらうのが今回の目的。

VBScriptが使えると、Windows環境ではoffice製品のコントロールをelectronからも行えるようになるので、活用の幅が広がるのではないかと。

今回使用するプロジェクトファイル

※今回はjQuery以外に特に外部モジュールをnpm installしていません。

※中に入ってるmailer.vbsは、今回はデスクトップに配置してください。

図:こんな感じのウィンドウから作業開始になります。

ソースコード

electron側

レンダラプロセス側

  • IPC通信にて、メインプロセスにテキストボックスのメアドを送り込んでいます。

メインプロセス側

  • 同期的にコマンドラインを実行する必要があるので(返り値を取得するため)、child_processでは、spawnSyncを利用しています。
  • デスクトップに配置したmailer.vbsが今回メールを送信するVBSスクリプトファイルです。
  • vbsCommandにはvbsファイルへのパスと、ダイアログから受け取ったメアドを引数で渡しています。
  • spawnSyncにてコマンドライン実行。cscript.exeがvbscriptの実行本体。コマンドライン引数にfullpathとaddressをつなげています。
  • vbsファイルからの返り値は、child.statusとして取得しています。

VBS側(mailer.vbs)

  • 無事に送信されると、electron側に0のstatusが返る
  • Outlookが起動していなくとも、APIで実行されているのでメールはデフォルトアカウントで送信されます。
  • 冒頭のargsにて、引数として指定されてるメアドを取得しています。
  • 今回は、Office365のOutlook Version 16.0でテストしています。
  • メールが送れるので、APIなしでOutlookを使って、Microsoft Teamsのチームチャンネルに投稿が可能です。

関連リンク

共有してみる: