大量メールの送信に便利なFlushMailメソッド

基本的なメールの送信はSendMailメソッドで対応できますが、大量のメールを送信するようなケースではちょっと不便なこともあります。まず同期モードでメールが送信されますので、スクリプトの完了まで場合によっては多くの時間がかかるという点、そして、送信の途中で処理に失敗した場合に一部を再送するのが難しいという点です。

後者については、たとえば、スクリプトから出力されたエラーメッセージを確認して、エラーの出た分だけをもう一度リストとして送信し直すという作業が必要になるでしょう(もちろん、エラーリストを自動で出力することもできますが、いずれにせよ、「自分で」なにかしらのしくみを用意する必要があります)。

しかし、FlushMailメソッドを利用することで、メールをいったんキューと呼ばれる一時保管場所に保存しておいて、改めて送信することができるようになります。送信時にエラーとなったメールについてはエラーフォルダに保存しておくことができますので、もしあとから再送したい場合にもエラーフォルダの内容をもう一度キューに戻してやることで、簡単に対応できます。

また、FlushMailメソッドでは非同期モード(=別プロセスでメールを送信)に対応していますので、大量メールの送信にもスクリプトそのものは最短の時間で終了します(*)。大量のメールを送信する場合には、できるだけ、こちらのFlushMailメソッドを利用するようにすると良いでしょう。

*)そもそもFlushMailメソッド自体も大量メールに最適化されたメソッドですので、通常のSendMailメソッドよりも効率よく複数メールを送信できます。

FlushMailメソッド利用の準備

FlushMailメソッドを利用する場合には、あらかじめ以下のフォルダを用意しておく必要があります。

FlushMailメソッドに必要なフォルダ

フォルダ 概要
キューフォルダ 送信メールを保存するフォルダ
sentフォルダ FlushMailメソッドで送信成功したメールを保存するフォルダ
errフォルダ FlushMailメソッドで送信失敗したメールを保存するフォルダ

キューフォルダは、任意のパスに作成することができますが、sent、errフォルダについてはキューフォルダのサブフォルダとして作成するようにしてください。sent、errという名前は変更することはできません。ここでは、以下のような構造でフォルダを用意しておくものとします。

サンプルのフォルダ構造

C:\tmp\mail
        |--\queue   キューフォルダ
            |--\sent    送信済みメールフォルダ
            |--\err     エラーメールフォルダ

sentフォルダが存在しない場合、FlushMailメソッドは送信成功したメールを無条件に削除し、errフォルダが存在しない場合、FlushMailメソッドは送信失敗したメールを移動せずにそのままキューフォルダに残します。もしもエラーメールを無条件に再送したいという場合には、errフォルダを作らずにおいた方が簡単でしょう。