(57)【要約】【課題】複数のメールサーバにより構成されるメールシステムにおいて、可用性の高いメールシステムを提供すること。【解決手段】複数のメールサーバと、複数のメールサーバが共有するデータベースとによって構成されるメールシステムであって、各メールサーバが、電子メールを受け付け、受け付けた電子メールを、データベースに格納し、データベースにアクセスして未配送の電子メールを検索し、検索された電子メールを配送する処理を行う。【選択図】図３
2010103850.tif 000002
【特許請求の範囲】
【請求項１】
複数のメールサーバと、当該複数のメールサーバが共有するデータベースとによって構成されるメールシステムであって、
前記各メールサーバが、
電子メールを受け付ける受け付け部と、
受け付けた電子メールと、当該電子メールの配送状況とを、前記データベースに格納する処理を行う格納部と、
前記データベースに格納されている電子メールのうち、配送状況が未配送である電子メールを特定し、特定された電子メールの配送状況を、配送中を示す情報に更新する処理を行う更新部と、
配送状況が配送中を示す情報に更新された前記電子メールを、配送する処理を行う配送部とを含むことを特徴とするメールシステム。
【請求項２】
請求項１において、
前記各メールサーバが、
前記データベースに格納されている電子メールのうち、配送状況が配送中を示す情報に更新された時点から所定期間内に配送完了に更新されていない電子メールを、検索する検索部を更に含み、
前記更新部が、
配送処理が完了した電子メールの配送状況を、配送完了に更新する処理と、
検索された前記電子メールの配送状況を、未配送に更新する処理とを行うことを特徴とするメールシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メールシステムに関する。
【背景技術】
【０００２】
従来から、冗長化させた複数のメールサーバによって構成されるメールシステムが存在する。このようなメールシステムは、障害発生時の復旧時間を短縮させるために、待機中の第２のメールサーバが、稼動中の第１のメールサーバを監視し、第１のメールサーバに障害が発生したことを第２のメールサーバが検知すると、第２のメールサーバが稼働し、第１のメールサーバを引き継ぐ処理を行う（特許文献１）。
【特許文献１】特開２００４−１０４７３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、従来のメールシステムでは、復旧時間を節約しようとしても、第１のメールサーバから第２のメールサーバにデータを引き継ぐ処理に数時間を要するものであった。例えば、代替する第２のメールサーバは、ネットワークの再構築を行ったり、ファイルシステムの整合性のチェックを行うために時間を要していた。したがって、既に第１のメールサーバが受け付けた電子メールは、この引継作業が終了するまで、第２のサーバによっては配送されない事態が生じていた。
【０００４】
このように、一旦受け付けた電子メールが引継作業中の数時間において配送されない事態が生じる従来のメールシステムは、利用者に不便をきたすものであり、即時伝達という電子メールの魅力を失わせてしまう。
【０００５】
本発明は、上述した課題に鑑みたものであり、複数のメールサーバにより構成されるメールシステムにおいて、可用性の高いメールシステムを提供することにある。
【課題を解決するための手段】
【０００６】
（１）本発明は、複数のメールサーバと、当該複数のメールサーバが共有するデータベースとによって構成されるメールシステムであって、前記各メールサーバが、電子メールを受け付ける受け付け部と、受け付けた電子メールと、当該電子メールの配送状況とを、前記データベースに格納する処理を行う格納部と、前記データベースに格納されている電子メールのうち、配送状況が未配送である電子メールを特定し、特定された電子メールの配送状況を、配送中を示す情報に更新する処理を行う更新部と、配送状況が配送中を示す情報に更新された前記電子メールを、配送する処理を行う配送部とを含むメールシステムに関する。また、本発明は、上記各部としてコンピュータを機能させるプログラム、及び、コンピュータ読み取り可能な情報記憶媒体であって、上記各部としてコンピュータを機能させるプログラムを記憶した情報記憶媒体に関する。
【０００７】
本発明によれば、一方のメールサーバのサービスが停止した場合であっても、一方のメールサーバから他方のメールサーバに、引継作業を要することなく、運用を続行することができ、可用性の高いメールシステムを提供することができる。すなわち、本発明によれば、一旦受け付けた電子メールはデータベースに格納され、複数のメールサーバのうち、いずれかのメールサーバが配送処理を行うことになるので、仮に、一方のメールサーバのサービスが停止したとしても、他方のメールサーバが遅滞なく、データベースに格納されている電子メールを配送することができる。さらに、本発明によれば、配送状況に基づいて電子メールを配送する処理を行うので、同一の電子メールに対する重複配送を回避することができる。
【０００８】
（２）また、本発明のメールシステムは、前記各メールサーバが、前記データベースに格納されている電子メールのうち、配送状況が配送中を示す情報に更新された時点から所定期間内に配送完了に更新されていない電子メールを、検索する検索部を更に含み、前記更新部が、配送処理が完了した電子メールの配送状況を、配送完了に更新する処理と、検索された前記電子メールの配送状況を、未配送に更新する処理とを行うようにしてもよい。
本発明によれば、仮に、電子メール配送中のメールサーバが停止した場合でも、他のメールサーバが、この電子メールを配送することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【００１０】
１．構成
（１）メールサーバ
本実施形態のメールシステムは、冗長化させた複数のメールサーバ（メールサーバＳ１、Ｓ２）を備える。図１は、各メールサーバの機能ブロック図の一例である。本実施形態の各メールサーバは、図１の各部を全て含む必要はなく、その一部を省略した構成としてもよい。
【００１１】
記憶部１７０は、処理部１００などのワーク領域となるもので、記憶部１７０には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）を記憶することができる。
【００１２】
また、記憶部１７０は、ＲＡＭ（ＶＲＡＭ）、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク（ＭＯ）、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ（ＲＯＭ）等によるコンピュータにより読み取り可能な情報記憶媒体を含み、この情報記憶媒体にはプログラムやデータなどが格納されている。即ち、情報記憶媒体には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。
【００１３】
また記憶部１７０は、複数のモジュール（モジュール１、モジュール２、モジュール３）等のモジュールプログラムが格納されている。なお、モジュール実行部１１７の実行命令に基づき、これらのモジュールが実行されることになる。
【００１４】
処理部１００は、記憶部１７０に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行い、記憶部１７０内の主記憶部をワーク領域として各種処理を行う。処理部１００の機能は各種プロセッサ（ＣＰＵ、ＤＳＰ等）などのハードウエアや、プログラムにより実現できる。
【００１５】
処理部１００は、受け付け部１１１、格納部１１２、取得部１１３、判断部１１４、更新部１１５、検索部１１６、モジュール実行部１１７、配送部１１８、削除部１１９、データベース制御部１２０を含む。
【００１６】
受け付け部１１１は、電子メールを受け付ける処理を行う。具体的には、受け付け部１１１は、ＳＭＴＰ（Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）を通じてネットワーク上で電子メールを受け付ける処理を行う。例えば、図３に示す端末２０のＭＵＡ（Ｍａｉｌ  Ｕｓｅｒ  Ａｇｅｎｔ）によって送信された電子メールを受け付ける処理を行う。
【００１７】
格納部１１２は、受け付けた電子メールと、当該電子メールの更新識別情報ＭＩＤと、当該電子メールの配送状況とを、データベースに格納する処理を行う。例えば、格納部１１２は、電子メールを受け付けると、当該電子メールに固有の識別情報を付与し、当該識別情報に対応づけて、電子メールと、更新識別情報ＭＩＤと、配送ステータスとを、データベースに格納する処理を行う。ここで、配送ステータスとは、未配送、配送中、配送完了、配送エラーなどの配送状況を数値で表したデータである。また、格納部１１２は、受け付けた電子メールを、エンベロープの宛先、エンベロープの差出元、メッセージのヘッダ、メッセージのボディ等に解析する処理を行い、解析された各データをデータベースＤＢ１、ＤＢ２のテーブルに対応づけて格納する処理を行う。
【００１８】
取得部１１３は、メールサーバがデータベースに対してなした要求に対する応答結果を取得する。例えば、取得部１１３は、検索要求に対する検索結果を取得したり、更新要求に対する更新結果（更新成功、更新失敗）の情報を取得する。例えば、取得部１１３は、データベースに対して未配送の電子メールの検索を要求し、検索された電子メールを取得する。
【００１９】
判断部１１４は、データベースに対してデータの更新要求を行い、当該更新要求の結果に基づいて更新権を有するか否かを判断する。判断部１１４は、例えば、検索された未配送の電子メールの配送権を有するか否かを、配送状況の更新要求に対する更新結果に基づいて判断する。例えば、判断部１１４は、配送状況の更新要求に対してデータベースから更新成功を取得すると、検索された未配送の電子メールの配送権を有すると判断し、配送状況の更新要求に対してデータベースから更新失敗を取得すると、検索された未配送の電子メールの配送権を有しないと判断する。
【００２０】
更新部１１５は、データベースに格納されている電子メールのうち、配送状況が未配送を示す電子メールを特定し、特定された電子メールの配送状況を、配送中を示す情報に更新する。つまり、更新部１１５は、データベースに対して、未配送の電子メールを検索する要求をし、検索結果を取得することによって、配送状況が未配送を示す電子メールを特定し、データベースに対して、当該特定された電子メールの配送状況を、配送中を示す情報に更新要求する。なお、更新部１１５は、未配送の電子メールを検索した時点（第１の時点）の更新識別情報ＭＩＤと、配送状況を配送中を示す情報に更新要求する時点（第２の時点）の更新識別情報ＭＩＤとが一致することを条件に、配送状況を未配送から、配送中を示す情報に更新要求すると共に、更新識別情報ＭＩＤの値（例えば、「１」）を、第１の時点の更新識別情報ＭＩＤとは異なる値（例えば「２」）に更新要求する。
【００２１】
更新部１１５は、電子メールの配送処理が完了した場合には、当該電子メールの配送状況を配送完了（配送済）に更新する。また、更新部１１５は、検索部１１６によって、データベースに格納されている電子メールのうち、配送状況が配送中を示す情報に更新した時点から所定期間内に配送完了に更新されていない電子メールが検索された場合には、当該検索された電子メールの配送状況を、未配送に更新する処理を行う。
【００２２】
検索部１１６は、データベースに格納されている電子メールのうち、配送状況が配送中を示す情報に更新された時点から所定期間内に配送完了に更新されていない電子メールを検索する。つまり、検索部１１６は、データベースに格納されている電子メールのうち、電子メールに対応する配送状況が配送中を示す情報に更新された時点（更新日時）から所定期間内（例えば１０分以内）に、当該配送状況が未だ配送完了に更新されていない電子メールを検索する。
【００２３】
モジュール実行部１１７は、予め記憶部１７０に格納されているモジュール１、モジュール２、モジュール３を実行させる処理を行う。例えば、モジュール１実行部１１７ａは、電子メールのウイルスを検出する処理を行うモジュールを実行させる処理を行う。モジュール２実行部１１７ｂは、電子メールを電子メール蓄積用データベースに登録させる処理を行うモジュールを実行させる処理を行う。モジュール３実行部１１７ｃは、電子メールを所定条件に基づいてフィルタリング処理を行うモジュールを実行させる処理を行う。モジュール実行部１１７は、データベースに格納されている各電子メールに対して、予めデータベースＤＢ１、ＤＢ２に格納されている実行順に即してモジュールを実行させる処理を行う。
【００２４】
配送部１１８は、データベースに格納されている電子メールを配送する処理を行う。例えば、配送部１１８は、配送状況が配送中を示す情報に更新された電子メールを配送する処理を行う。ここで、電子メールを配送するとは、ＳＭＴＰを通じて、受け付けた電子メールを他のメールサーバに配送する処理や、メールサーバが稼動する同一システム内にアカウントを持つユーザ宛に配送するためのローカル配信エージェントＭＤＡ（Ｍａｉｌ  Ｄｅｌｉｖｅｒｙ  Ａｇｅｎｔ）に配送する処理、ＭＤＡを介せずにメールサーバが稼動する同一システム内にアカウントを持つユーザ宛に配送する場合も含む。配送部１１８は、データベースＤＢ１、ＤＢ２に格納されているの電子メールの配送命令５１が有効である場合にその電子メールを配送する処理を行う。
【００２５】
また、本実施形態の配送部１１８は、データベースに格納されている配送先メールサーバ５３のアドレスを参照し、ネットワークを介して、配送先メールサーバに電子メールを配送する処理を行う。
【００２６】
削除部１１９は、配送処理が完了した電子メールを、データベースから削除する。具体的には、削除部１１９は、データベースＤＢ１、ＤＢ２に登録されている電子メールのうち、モジュール実行部１１７における全モジュール処理が完了し（モジュール１、２、３の全モジュールが実行完了し）、配送命令が有効である電子メールの配送処理が完了した電子メール、及び、モジュール実行部１１７における全モジュール処理が完了し（モジュール１、２、３の全モジュールが実行完了し）、配送命令が無効である電子メールを、データベースＤＢ１、ＤＢ２から削除する処理を行う。
【００２７】
データベース制御部１２０は、本実施形態のデータベースＤＢ１、ＤＢ２が同一のデータが書き込まれるように、同期レプリケーション処理を行うものである。例えば、データベース制御部１２０は、データベースに対する格納・更新・削除・参照、検索などの要求データ（クエリ）を、データベースＤＢ１、ＤＢ２それぞれ同時に送信する処理を行い、データベースＤＢ１、ＤＢ２間においてタイムラグが生じることなくデータの同一性を維持させるようにする。また、データベース制御部１２０は、一方のデータベース（例えばデータベースＤＢ１）に障害が発生したことを検出した場合や、データベースＤＢ１、ＤＢ２間においてデータの不整合を検出した場合には、一方のデータベース（例えばデータベースＤＢ１）を切り離す処理を行い、他方のデータベース（例えばデータベースＤＢ２）が格納・更新・削除・参照などの処理を継続して行う。
【００２８】
（２）データベース
図２は、本実施形態のデータベース（データベースＤＢ１、ＤＢ２）に格納されるデータの一例を示す。ここで、データベースとは、データの管理や、要求データ（クエリ、コマンド）に基づいて、データの格納、削除、更新、参照、検索などの処理を行う機能を有する。本実施形態のメールシステムのデータベースＤＢ１、ＤＢ２それぞれは、メールサーバにおけるデータベース制御部１２０の同期レプリケーション処理により、同一のデータが記録される。
【００２９】
電子メール格納領域３０は、メールサーバＳ１、Ｓ２が受け付けた電子メールデータが格納される。例えば、電子メール格納領域３０には、メールサーバＳ１、Ｓ２が受け付けた電子メールを固有の識別情報（ＩＤ）に対応づけて、電子メールのエンベロープの宛先、電子メールのエンベロープの差出元、電子メールの内容（ヘッダ部、ボディ部の内容）、登録日時、更新日時、更新識別情報（ＭＩＤ）が格納される。
【００３０】
モジュール情報格納領域４０には、モジュール１のステータス４１、モジュール２のステータス４２、モジュール３のステータス４３、経過ステータス４４のデータが格納される。モジュール１のステータス４１、モジュール２のステータス４２、モジュール３のステータス４３は、電子メールの識別情報（ＩＤ）に対応する、それぞれのモジュールの実行状況データである。なお、経過ステータス４４は、モジュールの実行順に即したモジュールの実行状況データである。
【００３１】
配送情報格納領域５０には、電子メールの識別情報（ＩＤ）に対応付けて、配送命令５１、配送ステータス５２、配送先メールサーバ５３が格納される。配送命令５１は、配送命令の有無を示すデータであり、配送ステータス５２は、配送状況を示すデータであり、配送先メールサーバ５３は、メールサーバＳ１、Ｓ２が電子メールを配送するための配送先メールサーバのアドレス（ＩＰアドレス、メールサーバ名）である。
【００３２】
２．本実施形態の処理の手法
（１）メールシステムの概要
図３は、本実施形態のメールシステムのネットワーク図を示す。本実施形態は、冗長化された複数のメールサーバＳ１、Ｓ２と、冗長化された複数のデータベースＤＢ１、ＤＢ２とを含むメールシステムである。ここで、メールサーバは、ＭＴＡ（Ｍｅｓｓａｇｅ  Ｔｒａｎｓｆｅｒ  Ａｇｅｎｔ）であり、他のメールサーバからインターネットを介して配送された電子メールやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）の端末のＭＵＡから送信された電子メールを、受け付けて配送する処理を行うものである。
【００３３】
本実施形態のメールサーバＳ１、Ｓ２は、データベース（データベースＤＢ１、ＤＢ２）を共有し、同一のデータを用いて、電子メールの処理を行っている。つまり、本実施形態のメールシステムは、例えば、端末２０から送信され、宛先（送信先）が指定された電子メールを、メールサーバＳ１、Ｓ２のうちいずれかのメールサーバが受け付け、受け付けた電子メールをデータベースＤＢ１、ＤＢ２に格納し、メールサーバＳ１、Ｓ２のうちいずれかのメールサーバが、データベースＤＢ１、ＤＢ２に格納されている電子メールを、配送先のメールサーバに配送する処理を行うものである。
【００３４】
図４は、本実施形態のメールシステムにおいて、電子メールに対するジョブの流れを図示したものである。まず、他のメールサーバ等から配送された電子メールが、メールサーバＳ１、Ｓ２のいずれかに受け付けられると、データベースＤＢ１、ＤＢ２に格納され、メールサーバＳ１、Ｓ２のうちいずれかのメールサーバが、電子メールについてモジュール１の実行処理を行い、モジュール１の実行処理が完了すると、メールサーバＳ１、Ｓ２のうちいずれかのメールサーバが、モジュール２の実行処理を行い、モジュール２の実行処理が完了すると、メールサーバＳ１、Ｓ２のうちいずれかのメールサーバが、モジュール３の実行処理を行う。そして、この電子メールに対する配送命令が有効である場合に、メールサーバＳ１、Ｓ２のうちいずれかのメールサーバが、電子メールを配送先メールサーバに配送する処理を行う。そして、モジュール１、２、３の実行処理と、配送処理がすべて完了すると、電子メールはデータベースから削除される。つまり、本実施形態のメールシステムにおいて、データベースＤＢ１、ＤＢ２に格納された電子メールのジョブは、電子メールに対してモジュール１を実行するジョブ、電子メールに対してモジュール２を実行するジョブ、電子メールに対してモジュール３を実行するジョブ、電子メールを配送する処理を行うジョブ、電子メールをデータベースから削除するジョブがある。
【００３５】
このように、本実施形態のメールシステムは、仮に、一方のメールサーバＳ２が障害等により停止したとしても、他方のメールサーバＳ１が稼働しているので、データベースＤＢ１、ＤＢ２に格納されている電子メールのモジュールの実行処理、配送処理を滞りなく行うことができる。例えば、図５に示すように、メールサーバＳ２においてモジュール１の実行完了後に、メールサーバＳ２が停止した場合には、メールサーバＳ１が、当該電子メールに対するモジュール２、モジュール３の実行、及び、配送処理を行う。
【００３６】
なお、本実施形態のメールシステムでは、メールサーバＳ１、Ｓ２は、それぞれ異なる装置（ハードウエア）で稼動してもよいし、同一の装置で稼動してもよい。また、データベースＤＢ１はメールサーバＳ１と同じ装置で稼動するものでもよいし、メールサーバＳ１、Ｓ２、データベースＤＢ２とは異なる装置で稼動するものでもよい。同様にデータベースＤＢ２もメールサーバＳ２と同じ装置で稼動するものでもよいし、メールサーバＳ１、Ｓ２、データベースＤＢ１とは異なる装置で稼動するものであってもよい。また、メールサーバＳ１、Ｓ２、データベースＤＢ１、ＤＢ２は、同一のＬＡＮに接続され、データベースＤＢ１、ＤＢ２とデータの送受信ができるように、各メールサーバＳ１、Ｓ２は、データベースＤＢ１、ＤＢ２のデータベース名や、データベースサーバ名（ホスト名）、ＩＰアドレス、ポート番号を予め記憶部に記憶する。
【００３７】
（２）ステータス情報
本実施形態では、データベースに格納されている電子メールそれぞれについて、モジュールの実行経過を示す経過ステータス４４、各モジュールのステータス４１、４２、４３、配送ステータス５２等のステータス情報が設定され、本実施形態のメールサーバは、ステータス情報を参照して、未実行（未処理）のジョブを検索し、検索されたジョブを実行する処理を行っている。
【００３８】
図６（Ａ）は経過ステータス４４の一覧を示す。まず、電子メールについてモジュール１、２、３が未実行である場合、つまり、モジュール１、２、３のいずれのモジュールも実行されていない状況である場合には、経過ステータス４４の値は「１」に設定される。そして、電子メールについて、モジュール１の実行が完了し、モジュール２の実行が完了される前の状況は、経過ステータス４４の値は「２」に設定される。そして、電子メールについて、モジュール１、２の実行が完了し、モジュール３の実行が完了される前の状況は、経過ステータス４４の値は「３」に設定される。そして、電子メールについて、モジュール１、２、３の実行が完了された状況である場合には、経過ステータス４４の値は「４」に設定される。
【００３９】
図６（Ｂ）は、モジュール１、２、３のステータス４１、４２、４３の一覧を示す。例えば、電子メールについてモジュール１が未実行である場合には、モジュール１のステータス４１の値は「１」に設定される。そして、電子メールについて、モジュール１の実行中である場合には、モジュール１のステータス４１の値は「２」に設定される。そして、モジュール１の実行が完了した場合には、モジュール１のステータス４１の値は「３」に設定される。また、モジュール１の実行がエラーで終了した場合には、モジュール１のステータス４１の値は「４」に設定される。モジュール２のステータス４２の値、モジュール３のステータス４３の値は、モジュール１のステータス４１と同様に実行状況に応じて設定される。
【００４０】
図６（Ｃ）は、配送ステータス５２の一覧を示す。例えば、電子メールについての配送状況が未配送である場合には、配送ステータス５２の値は「１」に設定される。そして、電子メールについて、配送状況が配送中である場合には、配送ステータス５２の値は「２」に設定される。そして、電子メールの配送状況が配送完了になると、配送ステータス５２の値は「３」に設定される。また、配送処理がエラーで終了した場合には、配送ステータス５２の値は「４」に設定される。
【００４１】
（３）受け付け処理
本実施形態のメールサーバＳ１、Ｓ２は、図３に示すように、ＳＭＴＰを通じて、他のメールサーバからインターネットを介して配送された電子メールや、端末２０のＭＵＡから送信された電子メールを受け付け、受け付けた電子メールを、データベースＤＢ１、ＤＢ２それぞれに格納させる処理を行う。つまり、本実施形態では、メールサーバＳ１、Ｓ２は、受け付けた電子メールを、メールサーバＳ１、Ｓ２が共有するデータベースＤＢ１、ＤＢ２にスプールさせる処理を行っている。
【００４２】
また、図３に示すように、本実施形態のメールシステムのＤＮＳ（Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）のＭＸレコードには、メールアドレスの同一のドメインに対応づけて、メールサーバＳ１のメールサーバ名を定義するレコードと、メールサーバＳ２のメールサーバ名を定義するレコードとを設定する。その際に、メールサーバＳ１、メールサーバＳ２のＭＸレコードの優先順位（プリファレンス値）を同位にして設定してもよい。このようにすれば、メールサーバＳ１、Ｓ２それぞれが、ほぼ均等に電子メールを受け付けることができる。
【００４３】
また、本実施形態では、メールサーバＳ１、Ｓ２が受け付けた電子メールをデータベースＤＢ１、ＤＢ２に格納する際に、経過ステータス４４を「１」（未実行）に設定して、電子メールの識別情報（ＩＤ）に対応づけてデータベースＤＢ１、ＤＢ２に格納し、モジュール１、２、３のステータス４１、４２、４３を「１」（未実行）に設定して、電子メールの識別情報（ＩＤ）に対応づけてデータベースＤＢ１、ＤＢ２に格納し、配送ステータス５２を「１」（未配送）に設定して、電子メールの識別情報（ＩＤ）に対応づけてデータベースＤＢ１、ＤＢ２に格納する。
【００４４】
（４）モジュールを実行させる処理
本実施形態のメールサーバＳ１、Ｓ２は、電子メールについて、複数のモジュールを実行させる処理を行う。複数のモジュールとは、例えば、ウイルスを検出するウイルス検出モジュール、電子メールを外部記憶領域に蓄積させるモジュール、電子メールのフィルタリングを行うモジュール等である。
【００４５】
本実施形態では、これらのモジュールの実行順序を、モジュールに対応づけて予めデータベースに格納している。例えば、ウイルスを検出するウイルス検出モジュールをモジュール１として１番目に実行させ、電子メールを外部記憶領域に蓄積させるモジュールをモジュール２として２番目に実行させ、電子メールのフィルタリングを行うモジュールをモジュール３として３番目に実行させるという実行順をデータベースに格納し、各メールサーバが共有できるようにしている。
【００４６】
そして、本実施形態では、経過ステータス４４や、モジュール１、２、３のステータス４１、４２、４３を参照し、電子メールそれぞれについてモジュール実行順に各モジュールを実行するように制御している。
【００４７】
例えば、経過ステータス４４が「１」（未実行）、各モジュールのステータス４１、４２、４３が「１」（未実行）の状態である電子メールＡに対する各モジュールの実行処理について説明する。
【００４８】
まず、メールサーバＳ１、Ｓ２が、経過ステータス４４が「１」（未実行）である電子メール（モジュール１のステータス４１が「１」（未実行）である電子メール）を検索する。そして、例えば、メールサーバＳ１が、メールサーバＳ２よりも先に、電子メールＡを検索したとする。すると、メールサーバＳ１が、電子メールＡについてモジュール１を実行する処理を行う。本実施形態では、メールサーバＳ１が、電子メールＡについてモジュール１を実行する前に、電子メールＡのモジュール１のステータス４１を「２」（実行中）に更新し、その後、電子メールＡについてモジュール１を実行する。このように、モジュール１のステータス４１を、モジュール１の実行前に更新する理由は、一方のメールサーバＳ１のモジュール１の実行中に、他方のメールサーバＳ２が電子メールＡを検索してモジュール１を実行することを回避するためである。そして、メールサーバＳ１において、モジュール１の実行が完了すると、メールサーバＳ１が、電子メールＡについてのモジュール１のステータス４１を「３」（実行完了）に更新し、経過ステータス４４を「２」（モジュール１の実行完了）に更新する。
【００４９】
そして、メールサーバＳ１、Ｓ２が、経過ステータス４４が「２」（モジュール１の実行完了）である電子メールであって、モジュール２のステータス４２が「１」（未実行）である電子メールを検索し、例えば、メールサーバＳ１が、メールサーバＳ２よりも先に、電子メールＡを検索したとする。すると、メールサーバＳ１が、電子メールＡについてモジュール２を実行する処理を行う。その際に、メールサーバＳ１が、電子メールＡについてモジュール２を実行する前に、電子メールＡのモジュール２のステータス４２を「２」（実行中）に更新し、その後、電子メールＡについてモジュール２を実行する。そして、メールサーバＳ１において、モジュール２の実行が完了すると、メールサーバＳ１が、電子メールＡについての、モジュール２のステータス４２を「３」（実行完了）に更新し、経過ステータス４４を「３」（モジュール２の実行完了）に更新する。
【００５０】
そして、メールサーバＳ１、Ｓ２が、経過ステータス４４が「３」（モジュール２の実行完了）である電子メールであって、モジュール３のステータス４３が「１」（未実行）である電子メールを検索し、例えば、メールサーバＳ１が、メールサーバＳ２よりも先に、電子メールＡを検索したとする。すると、メールサーバＳ１が、電子メールＡについてモジュール３を実行する処理を行う。その際に、メールサーバＳ１が、電子メールＡについてモジュール３を実行する前に、電子メールＡのモジュール３のステータス４３を「２」（実行中）に更新し、その後、電子メールＡについてモジュール３を実行する。そして、メールサーバＳ１において、モジュール３の実行が完了すると、メールサーバＳ１が、電子メールＡについての、モジュール３のステータス４３を「３」（実行完了）に更新し、経過ステータス４４を「４」（モジュール３の実行完了）に更新する。
【００５１】
このように、本実施形態では、経過ステータス４４、モジュール１、２、３のステータス４１、４２、４３を参照することによって、各電子メールについてモジュール１、２、３を実行させる処理を行っている。
【００５２】
また、本実施形態では、重複処理を回避するために、複数のメールサーバＳ１、Ｓ２のうち、いずれか１つのメールサーバが、モジュール１の実行処理を行い、また、複数のメールサーバＳ１、Ｓ２のうち、いずれか１つのメールサーバが、モジュール２の実行処理を行い、複数のメールサーバＳ１、Ｓ２のうち、いずれか１つのメールサーバが、モジュール３の実行処理を行う。本実施形態では、未実行のモジュールを最先に検索したメールサーバが、モジュールの実行権を取得し、モジュールの実行をさせるようにしている。
【００５３】
このように、本実施形態のメールシステムによれば、電子メールを受け付けたメールサーバ（例えばメールサーバＳ１）が、その電子メールの各モジュールの実行権を取得し、各モジュールを実行することもできるし、電子メールを受け付けたメールサーバ（例えばメールサーバＳ１）とは異なるメールサーバ（例えばメールサーバＳ２）が、その電子メールの各モジュールの実行権を取得し、各モジュールを実行することもできる。したがって、仮に一方のメールサーバが停止した場合であっても、他方のメールサーバが、電子メールについて各モジュールの実行処理を継続して行うことができ、可用性のあるメールシステムを提供することができる。
【００５４】
（５）配送処理
本実施形態では、メールサーバＳ１、Ｓ２が、データベースＤＢ１、ＤＢ２に格納されている配送命令５１を参照し、配送命令５１が有効に設定されている電子メールについて、その電子メールを配送させる処理を行っている。なお、本実施形態の配送命令５１の有効・無効は、初期値としていずれかを設定してもよいし、モジュール１、２、３のうち、少なくとも１つのモジュールの実行中に設定するようにしてもよい。例えば、ウイルスを検出するモジュール１の処理において、ウイルスがないと判断された電子メールについて、配送命令５１を有効に設定し、ウイルスがあると判断された電子メールについて配送命令５１を無効に設定する。また、配送命令の有効・無効は、例えば、配送フラグを用いて設定する。具体的には、配送命令が有効である場合に、配送フラグを真に設定し、配送命令が無効である場合に、配送フラグを偽に設定する。
【００５５】
そして、本実施形態では、メールサーバＳ１、Ｓ２が、配送ステータス５２が「１」（未配送）であって、配送命令５１が有効に設定されている電子メールを検索し、検索された当該電子メールを配送先メールサーバに配送させる処理を行っている。
【００５６】
例えば、配送命令５１が有効に設定され、配送ステータス５２が「１」（未配送）である電子メールＡについての配送処理について説明する。
【００５７】
まず、配送命令５１が有効であり、配送ステータス５２が「１」（未配送）である電子メールを、メールサーバＳ１、Ｓ２が検索する。そして、例えば、メールサーバＳ１が、メールサーバＳ２よりも先に、電子メールＡを検索したとする。すると、メールサーバＳ１が、電子メールＡを配送先メールサーバに配送させる処理を行う。本実施形態では、メールサーバＳ１が、電子メールＡについて配送処理を開始する前に、電子メールＡの配送ステータス５２を「２」（配送中）に更新し、その後、電子メールＡについて配送処理を開始させる。このように、配送ステータス５２を、配送処理開始前に更新する理由は、モジュールの実行と同様に、一方のメールサーバＳ１の配送中に、他方のメールサーバＳ２が電子メールＡを検索して配送処理を行うことを回避するためである。そして、メールサーバＳ１において、配送処理が完了すると、メールサーバＳ１が、電子メールＡについて、配送ステータス５２を「３」（配送完了）に更新する。
【００５８】
また、本実施形態では、重複処理を回避するために、複数のメールサーバＳ１、Ｓ２のうち、いずれか１つのメールサーバが、配送処理を行うように制御する。例えば、本実施形態では、配送命令が有効であって、未配送の電子メールを最先に検索したメールサーバが、配送権を取得し、その電子メールの配送処理を行うようにしている。
【００５９】
このように、本実施形態のメールシステムによれば、電子メールを受け付けたメールサーバ（例えばメールサーバＳ１）が、その電子メールを配送する権利を取得し、配送処理を行うこともできるし、電子メールを受け付けたメールサーバ（例えばメールサーバＳ１）とは異なるメールサーバ（例えばメールサーバＳ２）が、その電子メールを配送する権利を取得し、配送処理を行うこともできる。したがって、仮に一方のメールサーバが停止した場合であっても、他方のメールサーバが配送処理を継続して行うことができ、可用性のあるメールシステムを提供することができる。
【００６０】
（６）重複処理を回避させる手法
また、本実施形態では、重複処理を回避するために、複数のメールサーバＳ１、Ｓ２のうち、未実行のモジュールを最先に検索したメールサーバが、モジュールの実行権を取得し、モジュールの実行をさせるようにし、また、複数のメールサーバＳ１、Ｓ２のうち、配送命令が有効であって、未配送の電子メールを最先に検索したメールサーバが、配送権を取得し、その電子メールの配送処理を行うようにしている。
【００６１】
より詳しく説明すると、本実施形態では、更新識別情報ＭＩＤを参照することによって、複数のメールサーバＳ１、Ｓ２のうち、モジュールの実行権の有するメールサーバ、或いは、配送権を有するメールサーバが決定される。
【００６２】
図７（Ａ）は、配送命令５１が有効であって、配送ステータス５２が「１」（未配送）である電子メールＡについて、各メールサーバが配送権を有するか否かを判断する手法を説明するための図である。例えば、メールサーバＳ１が、配送命令５１が有効であって、配送ステータス５２が「１」（未配送）である電子メールＡを検索すると、電子メールＡを検索した時点（Ｔ１時点）において、更新識別情報ＭＩＤを取得する。
【００６３】
そして、メールサーバＳ１は、データベースＤＢ１、ＤＢ２にアクセスして配送ステータス５２を、「１」（未配送）から「２」（配送中）に更新要求する際（Ｔ３時点）において、検索時（Ｔ１時点）の更新識別情報ＭＩＤと、配送ステータス５２の更新要求時（Ｔ３時点）の更新識別情報ＭＩＤとが一致することを条件に、電子メールＡの更新識別情報ＭＩＤを、検索時（Ｔ１時点）の更新識別情報ＭＩＤ（ＭＩＤ＝１）とは異なる更新識別情報ＭＩＤ（例えば、ＭＩＤ＝２）に更新すると共に、配送ステータス５２を「１」（未配送）から「２」（配送中）に更新する要求をデータベースＤＢ１、ＤＢ２に対して行う。
【００６４】
そして、検索時（Ｔ１時点）の更新識別情報ＭＩＤと、配送ステータス５２の更新要求時（Ｔ３時点）の更新識別情報ＭＩＤとが一致する場合には、データベースＤＢ１、ＤＢ２において、更新識別情報ＭＩＤ及び配送ステータス５２の更新処理に成功する。メールサーバＳ１は、データベースＤＢ１、ＤＢ２から更新成功の情報を取得した場合に、配送権を有すると判断し、電子メールＡを配送する処理を行う。
【００６５】
一方、検索時（Ｔ１時点）の更新識別情報ＭＩＤと、配送ステータス５２の更新要求時（Ｔ３時点）の更新識別情報ＭＩＤとが一致しない場合には、データベースＤＢ１、ＤＢ２において、更新識別情報ＭＩＤ及び配送ステータス５２の更新処理に失敗する。メールサーバＳ１は、データベースＤＢ１、ＤＢ２から更新失敗（エラー）の情報を取得した場合に、配送権を有しないと判断し、電子メールＡの配送処理を行わないように制御する。
【００６６】
図７（Ａ）の例では、メールサーバＳ１は、検索時（Ｔ１時点）の更新識別情報ＭＩＤ（ＭＩＤ＝１）と、配送ステータス５２の更新要求時（Ｔ３時点）の更新識別情報ＭＩＤ（ＭＩＤ＝１）とが一致するので、更新識別情報ＭＩＤ及び配送ステータス５２の更新に成功し、配メールサーバＳ１は、電子メールＡについて配送処理を開始させる処理を行う。
【００６７】
また、メールサーバＳ２の観点で検討すると、メールサーバＳ２は、Ｔ１時点の直後のＴ２時点において、配送命令５１が有効であって、配送ステータス５２が「１」（未配送）である電子メールＡを検索すると、電子メールＡを検索した時点（Ｔ２時点）において、更新識別情報ＭＩＤを取得する。
【００６８】
そして、メールサーバＳ２は、データベースＤＢ１、ＤＢ２にアクセスして配送ステータス５２を、「１」（未配送）から「２」（配送中）に更新要求する際（Ｔ４時点）において、検索時（Ｔ２時点）の更新識別情報ＭＩＤと、配送ステータス５２の更新要求時（Ｔ４時点）の更新識別情報ＭＩＤとが一致することを条件に、電子メールＡの更新識別情報ＭＩＤを、検索時（Ｔ２時点）の更新識別情報ＭＩＤ（ＭＩＤ＝１）とは異なる更新識別情報ＭＩＤ（例えば、ＭＩＤ＝２）に更新すると共に、配送ステータス５２を「１」（未配送）から「２」（配送中）に更新する要求をデータベースＤＢ１、ＤＢ２に対して行う。
【００６９】
しかし、ここでデータベースＤＢ１、ＤＢ２において、Ｔ３時点でメールサーバＳ１によって、更新識別情報ＭＩＤの値が１から２へ更新されているため、電子メールＡが検索された時点（Ｔ２時点）の更新識別情報ＭＩＤ（ＭＩＤ＝１）と、ステータス更新要求時（Ｔ４時点）の更新識別情報ＭＩＤ（ＭＩＤ＝２）とが不一致となり、メールサーバＳ２は、データベースＤＢ１、ＤＢ２から更新失敗の情報を取得する。そして、メールサーバＳ２は、更新失敗の情報を取得すると、電子メールＡについて配送権を有しないと判断し、配送処理を行わないように制御する。
【００７０】
このように、本実施形態では、配送ステータス５２の更新と同時に、更新識別情報ＭＩＤを更新する処理を行うので、例えば、他のメールサーバＳ２において、極僅かな差で、メールサーバＳ１との配送重複処理が行われてしまうことを回避することができる。
【００７１】
また、図７（Ｂ）に示すように、メールサーバＳ１において、電子メールＡの配送処理が完了した場合にも、更新識別情報ＭＩＤを用いて配送ステータス５２の値を更新する処理を行う。例えば、メールサーバＳ１は、配送ステータス５２を「２」（配送中）から、「３」（配送完了）に更新する要求を、データベースＤＢ１、ＤＢ２に対して行う。
【００７２】
かかる場合に、電子メールＡに対する直前に更新した時点（Ｔ３時点）の更新識別情報ＭＩＤと、配送ステータス５２を「２」（配送中）から「３」（配送完了）に更新要求する時点（Ｔ７時点）の更新識別情報ＭＩＤとが一致することを条件に、電子メールＡの更新識別情報ＭＩＤを、直前の更新時（Ｔ３時点）の更新識別情報ＭＩＤ（ＭＩＤ＝２）とは異なる更新識別情報ＭＩＤ（例えば、ＭＩＤ＝３）に更新すると共に、配送ステータス５２を「２」（配送中）から「３」（配送完了）に更新する要求をデータベースＤＢ１、ＤＢ２に対して行う。
【００７３】
図７（Ｂ）の例では、メールサーバＳ１は、Ｔ３時点の更新識別情報ＭＩＤと、更新要求時（Ｔ７時点）の更新識別情報ＭＩＤとが一致する（ＭＩＤ＝２で一致する）ので、電子メールＡの更新識別情報ＭＩＤを、直前の更新時（Ｔ３時点）の更新識別情報ＭＩＤ（ＭＩＤ＝２）とは異なる更新識別情報ＭＩＤ（例えば、ＭＩＤ＝３）に更新すると共に、配送ステータス５２を、「２」（配送中）から、「３」（配送完了）に更新することができる。
【００７４】
このようにすれば、複数のメールサーバＳ１、Ｓ２が同一のデータベースＤＢ１、ＤＢ２を共有する場合であっても、デッドロック等の問題を回避することができる。
【００７５】
なお、本実施形態では、配送ステータス５２だけでなく、経過ステータス４４や、モジュール１、２、３のステータス４１、４２、４３を更新する度に、更新識別情報ＭＩＤを用いて、メールサーバＳ１、Ｓ２が、更新権（モジュールの実行権、配送権）を有するか否かを判断して、メールシステム全体として、重複処理を回避させたり、矛盾を生じさせないように制御してもよい。
【００７６】
（７）エラーの検索
本実施形態では、モジュール１のステータス４１が「２」（実行中）に更新された時点から、所定期間内にモジュール１の実行が完了しない場合、つまり、所定期間内にモジュール１のステータス４１が「３」（実行完了）に更新されていない場合には、モジュール１のステータス４１を「１」（未実行）に更新する処理を行っている。同様に、モジュール２のステータス４２、モジュール３のステータス４３についても、モジュールのステータスが「２」（実行中）に更新された時点から、所定期間内にモジュールのステータスが「３」（実行完了）に更新されていない場合には、モジュールのステータスを「１」（未実行）に更新する処理を行っている。また、配送ステータス５２が「２」（配送中）に更新された時点から、所定期間内に配送処理が完了しない場合、つまり、配送ステータス５２が「２」（配送中）に更新された時点から、所定期間内に配送ステータス５２が「３」（配送完了）に更新されていない場合には、配送ステータス５２を「１」（未配送）に更新する処理を行っている。
【００７７】
例えば、図７（Ｃ）に示すように、配送ステータス５２を「２」（配送中）に更新した時点から所定期間（１０分）内に、配送ステータス５２が「３」(配送完了)に更新されない電子メールを、メールサーバＳ１、Ｓ２が検索する。つまり、メールサーバＳ１、Ｓ２は、データベースに格納されている電子メールのうち、配送ステータス５２が「２」（配送中）に更新された時点から所定期間経過しても未だに配送ステータス５２が「２」（配送中）である電子メールを検索する。そして、例えば、メールサーバＳ２が、メールサーバＳ１よりも先に、配送ステータス５２を「２」（配送中）に更新した時点から所定期間内に、配送ステータス５２が「３」（配送完了）に更新されていない電子メールＡを検索すると、メールサーバＳ２が、電子メールＡの配送ステータス５２を「１」（未配送）に更新する処理を行う。このようにすれば、メールサーバＳ１が、電子メールＡの配送途中で停止した場合であっても、電子メールＡは、再度、未配送の電子メールとして検索対象となり、配送される機会を与えられることになる。
【００７８】
（８）削除処理
本実施形態では、各モジュールのステータス４１、４２、４３が「３」（実行完了）であり、配送命令５１が有効であって配送ステータス５２が「３」(配送完了)である電子メール、及び、各モジュールのステータス４１、４２、４３が「３」（実行完了）であり、配送命令５１が無効である電子メールを検索し、検索された電子メールを、データベースＤＢ１、ＤＢ２から削除する処理を行う。つまり、削除対象として検索された電子メールは、全てのジョブが完了したので、データベースＤＢ１、ＤＢ２から電子メールと、当該電子メールに対応する各モジュールのステータス４１、４２、４３、経過ステータス４４、配送ステータス５２を削除する。
【００７９】
３．メールサーバ間におけるデータを共有する手法
本実施形態では、データベースＤＢ１、ＤＢ２に電子メールを格納しているので、メールサーバＳ１、Ｓ２間で、ヘッダ情報を書き換えずに情報を共有することができる。例えば、通常、メールサーバ間で電子メールの配送、受け取りを行う場合に、メールサーバ間で、特定情報を共有させる場合には、電子メールのヘッダ部分に、その特定情報を記録する必要があった。しかし、本実施形態のメールシステムによれば、メールサーバＳ１、Ｓ２において、特定情報を共有する場合には、その特定情報をデータベースＤＢ１、ＤＢ２に格納すればよいので、電子メールのヘッダ部分に特定情報を記録することなく、特定情報をメールサーバＳ１、Ｓ２間で共有することができる。
【００８０】
４．フローチャート
本実施形態のメールサーバＳ１、Ｓ２の処理の流れを図８を用いて説明する。まず、未実行のジョブを検索する（ステップＳ１）。例えば、データベースに格納されている１又は複数の電子メールそれぞれについて、各電子メールのステータス情報、配送命令に基づき、未実行のジョブを有する電子メールを検索する。例えば、ジョブとは、電子メールに対してモジュールを実行させる処理、電子メールを配送させる処理、電子メールをデータベースＤＢ１、ＤＢ２から削除させる処理等である。
【００８１】
具体的に説明すると、経過ステータス４４が「１」（モジュール１、２、３が未実行）である電子メールは、モジュール１のジョブが未実行であるとして検索される。また、経過ステータス４４が「２」（モジュール１の実行完了）であって、モジュール２のステータス４２が「１」（未実行）である電子メールは、モジュール２のジョブが未実行であるとして検索される。また、経過ステータス４４が「３」（モジュール２の実行完了）であって、モジュール３のステータス４３が「１」（未実行）である電子メールは、モジュール３のジョブが未実行であるとして検索される。
【００８２】
また、配送命令５１が有効であって、配送ステータス５２が「１」（未配送）である場合には、電子メールの配送ジョブが未実行であるとして検索される。なお、本実施形態では、経過ステータス４４、モジュールのステータス４１、４２、４３の値に関わらず、配送命令５１が有効であって、配送ステータス５２が「１」（未配送）である電子メールは、配送が未実行であるとして検索される。
【００８３】
そして、未実行のジョブがあるか否かを判断し（ステップＳ２）、未実行のジョブがあると判断されると（ステップＳ２のＹｅｓ）、次の処理に進む。一方、未実行のジョブがないと判断されると（ステップＳ２のＮｏ）、処理を終了する。
【００８４】
そして、検索されたジョブを実行する（ステップＳ３）。例えば、未実行のモジュール１の電子メールＡが検索された場合には、当該電子メールＡについて、モジュール１を実行させる処理を行う。そして、検索された全てのジョブが終了したか否かを判断し（ステップＳ４）、検索された全てのジョブが終了した場合（ステップＳ４のＹｅｓ）、処理を終了する。検索された全てのジョブが終了していない場合（ステップＳ４のＮｏ）、ステップＳ３に戻り、終了していないジョブを実行する処理を行う。そして、本実施形態では、処理終了後、再度ステップＳ１に戻り、永続的に繰り返し処理を行っている。
【００８５】
５．応用例
（１）本実施形態のメールシステムの応用例として、例えば、メールサーバＳ１、Ｓ２が、受け付けた電子メールをデータベースＤＢ１、ＤＢ２に格納し、メールサーバＳ１、Ｓ２が、データベースＤＢ１、ＤＢ２に格納されている電子メールを取得して配送する処理を行うようにしてもよい。つまり、各メールサーバが、モジュールを実行させることなく、電子メールの受け付け処理と、受け付けた電子メールをデータベースＤＢ１、ＤＢ２に格納する処理、データベースＤＢ１、ＤＢ２に格納されている電子メールを取得して配送処理を行うようにする。かかる場合には、一方のメールサーバＳ１が格納した電子メールＡを、他方のメールサーバＳ２が取得して電子メールＡを配送することが可能であるので、仮に、一方のメールサーバＳ１が停止した場合であっても、メールサーバＳ２が、メールサーバＳ１が受け付けた電子メールを、配送することができ、メールシステム全体として、電子メールの受け付け、配送のサービスを停止させないようにすることができる。
【００８６】
（２）本実施形態のメールシステムは、未配送の電子メールとして検索された電子メールが、他のメールサーバによって配送されている電子メールのエンベロープの宛先と、同一のエンベロープの宛先が指定されている電子メールである場合には、検索された電子メールを配送させないようにしてもよい。
【００８７】
例えば、メールサーバＳ１が暗号化されたファイルを添付した電子メール（以下、「第１の電子メール」という。）を、第１の電子メールのエンベロープの宛先に基づいて、配送する処理を行い、メールサーバＳ２が、第１の電子メールのエンベロープの宛先と、同一のエンベロープの宛先であって、第１の電子メールに添付した暗号化ファイルの復号化パスワードを通知するための電子メール（以下、「第２の電子メール」という）を配送する処理を行う場合がある。
【００８８】
かかる場合に、メールサーバＳ１が、添付ファイルの暗号化に処理時間を要するために、メールサーバＳ１が第１の電子メールを配送完了する前に、メールサーバＳ２が第２の電子メールを配送完了してしまう場合がある。つまり、同一の宛先に対して複数の電子メールを配送する際に、配送開始順と配送完了順とが異なってしまう場合がある。このように、配送開始順と配送完了順が異なってしまうと、例えば、本来、第１の電子メールを第２の電子メールよりも先に受信するべき受信者が、第２の電子メールを受信した後に、第１の電子メールを受信することになってしまい混乱してしまうおそれがある。
【００８９】
そこで、本実施形態のメールシステムのメールサーバＳ１、Ｓ２は、未配送の電子メールを検索した場合に、その電子メールのエンベロープの宛先と同一のエンベロープの宛先が指定されている他の電子メールを検索し、検索された他の電子メールの配送ステータス５２が「２」（配送中）である場合には、未配送の電子メールを配送しないように制御する。
【００９０】
例えば、メールサーバＳ２は、未配送の第２の電子メールを検索した場合に、第２の電子メールのエンベロープの宛先と同一のエンベロープの宛先が指定されている電子メールを検索し、第１の電子メールが検索されたとする。すると、メールサーバＳ２は、検索された第１の電子メールの配送ステータス５２を参照することによって、第１の電子メールの配送ステータス５２が「２」（配送中）であると判断すると、第２の電子メールを配送しないように制御する。つまり、第２の電子メールの配送ステータス５２を「１」（未配送）のまま、この第２の電子メールの配送ジョブを無視し、検索された他のジョブの実行処理に移行する。なお、無視された第２の電子メールは、配送ステータス５２が「１」（未配送）であり、メールサーバＳ１、Ｓ２のジョブ検索対象であるので、配送される機会は失われない。
【００９１】
このようにすれば、例えば、メールサーバＳ１が、添付ファイルの暗号化に処理時間を要したとしても、メールサーバＳ２は、メールサーバＳ１が第１の電子メールを配送中は、第２の電子メールの配送処理を行わないように制御するので、第１の電子メールの配送後に、第２の電子メールが配送されることになる。つまり、同一の宛先に対して複数の電子メールを配送する場合でも、配送開始順と配送完了順とを同じ順にすることができる。
【００９２】
（３）本実施形態のメールシステムは、他のメールサーバによって配送されている電子メールのエンベロープの宛先のドメインと、同一のエンベロープの宛先のドメインが指定されている電子メールについて、配送を制御するようにしてもよい。このようにすれば、例えば、上記応用例（２）と同様に、同一のドメイン宛に対して複数の電子メールを配送する際に、配送開始順と配送完了順とが異なってしまう問題を解決でき、さらに、あるドメイン宛の配送がスローダウンするような問題が発生した場合でも、すべてのメールサーバがそのドメイン宛の配送を行うことがないので、メールシステム全体への影響を小さくすることができる。
【００９３】
つまり、本実施形態のメールシステムのメールサーバＳ１、Ｓ２は、未配送の電子メールを検索した場合に、その電子メールのエンベロープの宛先のドメインと同一のドメインを有するエンベロープの宛先が指定されている他の電子メールを検索し、検索された他の電子メールの配送ステータス５２が「２」（配送中）である場合には、未配送の電子メールを配送しないように制御する。
【００９４】
例えば、メールサーバＳ２は、未配送の第３の電子メールを検索した場合に、第３の電子メールのエンベロープの宛先のドメインと同一のドメインを有するエンベロープの宛先が指定されている電子メールを検索し、第１の電子メールが検索されたとする。すると、メールサーバＳ２は、検索された第１の電子メールの配送ステータス５２を参照することによって、第１の電子メールの配送ステータス５２が「２」（配送中）であると判断すると、第３の電子メールを配送しないように制御する。つまり、第３の電子メールの配送ステータス５２を「１」（未配送）のまま、この第３の電子メールの配送ジョブを無視し、検索された他のジョブの実行処理に移行する。なお、無視された第３の電子メールは、配送ステータス５２が「１」（未配送）であり、メールサーバＳ１、Ｓ２のジョブ検索対象であるので、配送される機会は失われない。
【００９５】
（４）本実施形態のメールシステムでは、配送命令が有効に設定された電子メールについて、配送処理を行うように制御しているが、配送命令に関係なく、データベースＤＢ１、ＤＢ２に格納されている全ての電子メールを配送するようにしてもよい。
【００９６】
（５）本実施形態のメールシステムでは、メールサーバＳ１、Ｓ２のうち、モジュールのステータス４１、４２、４３が「４」（実行エラー）である電子メールを最先に検索したメールサーバが、検索された実行エラーの電子メールについて、再度、モジュールの実行を行わせるようにしてもよい。
【００９７】
また、本実施形態のメールシステムでは、メールサーバＳ１、Ｓ２のうち、配送ステータス５２が「４」（配送エラー）である電子メールを最先に検索したメールサーバが、検索された配送エラーの電子メールについて、再度、配送処理を行わせるようにしてもよい。
【図面の簡単な説明】
【００９８】
【図１】本実施形態のメールシステムのメールサーバ。
【図２】本実施形態のメールシステムのデータベース。
【図３】本実施形態のメールシステムのネットワーク図。
【図４】本実施形態における、電子メールのジョブの一例を示す図。
【図５】本実施形態における、電子メールのジョブの一例を示す図。
【図６】本実施形態のステータス情報の説明図。
【図７（Ａ）】本実施形態の更新識別情報を用いた処理を説明するための図。
【図７（Ｂ）】本実施形態の更新識別情報を用いた処理を説明するための図。
【図７（Ｃ）】本実施形態のエラーを検出するための図。
【図８】本実施形態のメールサーバのフローチャート。
【符号の説明】
【００９９】
Ｓ１、Ｓ２  メールサーバ、ＤＢ１、ＤＢ２  データベース、２０、２１  端末、
３０  電子メール格納領域、
４０  モジュール情報格納領域、
４１  モジュール１のステータス、４２  モジュール２のステータス、
４３  モジュール３のステータス、４４  経過ステータス、
５０  配送情報格納領域、５１  配送命令、
５２  配送ステータス、５３  配送先メールサーバ、
１００  処理部、１１１  受け付け部、１１２  格納部、１１３  取得部、
１１４  判断部、１１５  更新部、１１６  検索部、１１７  モジュール実行部、
１１７ａ  モジュール１実行部、１１７ｂ  モジュール２実行部、
１１７ｃ  モジュール３実行部、１１８  配送部、１１９  削除部、
１２０  データベース制御部、１７０  記憶部
【図１】
2010103850.tif 000003
【図２】
2010103850.tif 000004
【図３】
2010103850.tif 000005
【図４】
2010103850.tif 000006
【図５】
2010103850.tif 000007
【図６】
2010103850.tif 000008
【図７（Ａ）】
2010103850.tif 000009
【図７（Ｂ）】
2010103850.tif 000010
【図７（Ｃ）】
2010103850.tif 000011
【図８】
2010103850.tif 000012