Magento CE 1.9.1.0(EE 1.14.1.0)以降ではMagentoから送信されるメールの処理方法が少し変わりました。
主にパフォーマンスを向上させるための変更なのですが、これまでのバージョンとは挙動が変わりますので、注意が必要です。

これまでのMagentoのメール送信の仕組み

 CE 1.9.1.0(EE 1.14.1.0)以前のバージョンのMagentoは、ニュースレター以外のメールをブラウザ上で行われた操作(会員登録や注文の確定)と同じタイミングで送信してきました。
この方式は多くのWebアプリケーションで採用されている方式で、ありふれた実装方法だと言えます。
その反面、この方式の場合にはパフォーマンスの面で問題があります。

 メール送信処理にかかる時間がサイトの性能を左右してしまう

この方式の場合、データベースに対する更新処理とメール送信処理が1対1で同期しています。
データベースに対する更新処理は一般的に読み出し処理よりも遅いのですが、それに加えてメール送信処理が行われます。
Webサーバーとメールサーバーが同じサーバー、もしくは同じネットワーク上にある別のサーバーを使う場合は、ネットワーク遅延はあまり考慮しなくても良いのですが、Google AppsやOffice365のような外部のメールサーバーを利用している場合は、これらのサービスのパフォーマンスが大きく影響してきます。

というのも、メールサーバーによってはメールの送信に数秒〜数十秒かかることがあります。
この時間はダイレクトにクライアントのブラウザでの遅延となってあらわれます。
1日の注文受付数がさほど多くないサイトでは、「なんだか遅いサイトだなぁ」という程度で問題にならないかもしれませんが、相応の注文が一定時間に入ってくるようなサイト向けでは、どんなに高スペックなサーバーを用意したとしても、予想をはるかに上回る勢いで負荷が増大し、膨大な量の機会損失が起きてしまう恐れがあります。

これからのMagentoのメール送信の仕組み

CE 1.9.1.0 (EE 1.14.1.0)以降のMagentoでは、メール送信は従来の方式に加えて、ブラウザの操作とは非同期で送信される方式が追加されました。
この方式は、送信されるはずだったメールのデータを一旦データベースに格納し、Magentoに標準で備わっているバッチ処理によって一定件数ずつ配信します。

この方式のメリットは以下のとおりです、

  • メールの送信が完了する前に、処理結果をブラウザに返すことができる
  • 送信件数制限がある外部のメールサーバーでも制限を超過せずに送信ができる

という点です。反対にデメリットとしては、

  • メール送信が即座に行われるわけではないため、タイムラグが発生する
  • メール送信が別処理で行われるため、メール送信エラーに気がつくのが遅れがちになる

ということが挙げられます。

非同期配信の対象になるメールとは

注文関係のメールは標準状態で非同期配信になります。

それ以外のメールについては通常はリアルタイム配信ですが、Mage_Core_Model_Email_Template::sendTransactional()を利用するメール送信処理は、管理画面上でオリジナルのテンプレートを定義し、関連付けている場合は非同期配信になるように設計されています。
ですから、非同期配信を使いたいのであれば、ロケール側でメールテンプレートをカスタマイズするのではなく、Magentoの管理画面上でメールテンプレートをカスタマイズするべき、ということになります。
メールテンプレートをデフォルトのまま使う、という方は多分少ないと思うので、大抵のサイトでは非同期配信を使うことになるのではないかと思います。

まとめ

  • Magento CE 1.9.1.0からメール配信はリアルタイム配信と、キューによる非同期配信の2通りが実装された
  • 注文関係のメールは基本的に非同期配信で処理される
  • その他のメールも、テンプレートを管理画面上でカスタマイズし、割り当てていると、非同期配信になる