ses
SMTP
ECCUBE2

EC-CUBE 2系から SES でメールを送信する

2010年に EC-CUBE 2系をベースに構築したシステムがあり、さくらの専用サーバ(ベーシック)上で稼働している。

システムも、サーバもさすがに老朽化が進んできていて、メンテナンスを継続できないので、新規システムをフルスクラッチで制作し、AWS 上で稼働させることにしたい。

ただ、システムを一から作り直すには時間が足りないので、まず現行システムをそのまま AWS に移行させる。そこまでが第1フェイズ。

AWS 上での安定運転を確認してから、おもむろにシステム制作に着手し、リリースする。これが第2フェイズ。

第1フェイズでは、現行システムが1台の物理サーバで兼務している各機能(ただしストレージ用途にはもう1台、別の物理サーバがある)を、AWS のそれぞれのサービスに分担させる(もちろん最小限の改修は必要)。

  • EC2 - Web/APサーバ
  • RDS - データベース
  • S3 - ストレージ
  • SES - メールサーバ

しかし、SES で数時間ハマった。

EC-CUBE 2系では、メール送信で内部的に PEAR を使用している。いろいろ設定を変えてやってみたが、これがうまく SES と連携してメールを送信することができない。

最終的になんとかメール送信までこぎつけたが、その設定とカスタマイズは次のようにした。

  • 管理画面にログインし、
    • SMTP_HOST を "tls://email-smtp.us-west-2.amazonaws.com" に設定
    • SMTP_PORT を "465" に設定
  • /data/class/SC_SendMail.php を以下のように変更
/data/class/SC_SendMail.php
function getBackendParams($backend) {

  switch ($backend) {

    /* 省略 */

    case "smtp":
    default:
      $arrParams = array(
        'host'     => $this->host,
        'port'     => $this->port,
        'auth'     => TRUE,          // 追加
        'username' => SES_USER,      // 追加
        'password' => SES_PASSWORD   // 追加
      );
      break;
  }

  return $arrParams;
}

SMTP_HOST を "tls://" で始めるのがポイント。これがないとどうやっても STARTTLS コマンドを送出できない。また、ポート番号は 465 しか効かなかった。587 でがんばっても、たぶん徒労。あ、あと管理画面からパラメータを設定するときは、両端の " を忘れないようにする。

EC-CUBE 2系から SES を使用してメールを送信しよう…などと考える人はまずいないと思うけど、万が一にもありえないとは言い切れないので、参考のために記録を残しておく。