サーバサイドからメールを送信

背景

N社で新規に構築したワークフローシステムは、Excelをベースに作られています。
その中の機能の1つで、申請を行った際は申請先に、承認・却下時は申請者にメールを送る仕組みがあります。

当初、クライアント側からメールを直接送る方式を想定して設計されていましたが、ふたを開けてみるとセキュリティ設定のため直接メールが出せないことが判明し、急遽サーバからメールを送る仕組みを検討することになりました。

改善方針

サーバに新たなアプリケーションを導入することは、稟議が通る時間を考えただけでも間に合いそうにありません。

そこで、アプリケーションではない、「ただのファイル」としてのExcelファイル(もちろんマクロ入り)を使って、サーバ側からメールを送ることにしました。
これなら、途中まで作ってあったクライアントからメールを送る仕組みが、そのまま利用できます。

課題・実装

ピーク時には相当な数の申請が行われるため、同時に送信することになるメールの量もかなりの量が予想されました。また、たまたまメールサーバがメンテナンス中で繋がらなかった等の理由で送信できなかった場合の措置も検討しておく必要があります。

大量メールについてはメール1通ごとに処理するプロセスを分離することで、送信エラー時についてはリトライする仕組みを設け運用上も定期的に未送信が無いか検証することでカバーしました。

実現したシステム

利用者が申請を行うと、ワークフローシステムの申請者画面に当該申請が表示されるだけでなく、リアルタイムでマスタに定義された申請先にメールが送られることで、申請が来たことが分かるようになりました。

しかも、申請書のイメージがPDFで添付されてくるので、メールだけで承認・却下の判断が可能です。承認者が却下すれば、申請者に却下された旨のメールが届きます。
同じく、承認すれば次の承認者にメールが送られます。

ここでメール送信しているのがサーバ上で動作するExcelであることが、このシステムの最大の特徴です。