メルマガの予約配信と自動化 -EC-CUBE-

"EC-CUBE"には登録会員向けのメルマガ送信機能があり、デフォルトではメール送信作業と同時に各宛先にメール送信を開始するが、利用するサーバに"CRON"と呼ばれる定期自動処理の設定ができる場合、メルマガの予約配信をすることができる。

メルマガを予約配信する利点としては配信するその時間帯に配信作業を行う担当者が拘束されないこと、異なる配信グループに時間差で送信することでアクセス数や購入率などマーケティングデータの取得に役立つ。

ただ注意点としてはこの設定を行うとすぐに配信したい場合でも"CRON"に設定した時間が来るまでメール送信されないため、即時性を求める場合には適していない。


"EC-CUBE"のメール予約配信の設定前に、メールの送信挙動について把握する必要がある。

"EC-CUBE"の管理画面からメルマガ送信を実施すると、データベースの"dtb_send_history"テーブルにメールタイトルや本文が格納され、"dtb_send_customer"テーブルに実際に送信する宛先が格納される。

この"dtb_send_customer"に格納された各宛先にメール送信したか、まだ送信していないかの履歴が残るようになっており、その履歴をプログラムが見て送信処理を行っている。

メールをリアルタイムに送信するか予約送信するかのタイミングはこのメール送信プログラムが実行されるタイミングで使い分けれられている。


では、実際にどのようにすれば"EC-CUBE"に予約配信機能を持たせることができるだろうか。

"EC-CUBE"には既に予約配信機能が組み込まれており、設定値を変更することで利用することができる。

/data/フォルダ配下にある「mtb_constants_init.php」の定数"MELMAGA_BATCH_MODE"を"true"に書き換えるだけでよい。

デフォルトではこの値が"false"になっており、リアルタイムで送信されるようになっている。

 MELMAGA_BATCH_MODEの値


しかし、"MELMAGA_BATCH_MODE"を"true"にするだけだと前述の通り"dtb_send_customer"に送信待ちのメールは溜まっていくのだが、「送信する」という命令を受けないので排出されない状態となる。

そこで、"CRON"で「定期的にメール送信スクリプトを実行する」という指示が必要となる。


"CRON"の設定は利用するサーバにより異なり、ホスティングサービスによってはブラウザのサーバ管理画面から設定できる場合もあるがここでは直接コマンドで設定する方法を紹介する。

まず、既に"CRON"が設定されていないかを確認する。

# crontab -l



もしここで自動処理の設定がされているようであれば記述ミスで損失しないようにバックアップを取るなどの対応策が求められる。

次に実際に"CRON"の設定を行う。

# crontab -e



上記コマンドでviが起動するので、viコマンド操作で下記を入力する。

0 * * * * cd /EC-CUBEがあるパス/html/admin/mail/; /bin/php sendmail.php >/dev/null 2>&1 2>>/tmp/send.log



内容としては毎時0分にEC-CUBEを設定したディレクトリに移動して"sendmail.php"を実行するという内容だ。

「/bin/php」はPHPとして動作させるためのパスであり、このパスも利用するサーバによって異なるので不明の場合はサーバ管理者に問い合わせる必要がある。

加えて、「>/dev/null 2>&1 2>>/tmp/send.log」はスクリプト等にエラーがあっても"CRON"を実行したサーバユーザに通知のメールは出さずに、/tmp/ディレクトリにログファイルを残すという設定になっている。

実際にこの設定で指定した日時に"CRON"が実施されたかは下記コマンドで確認できる。

# cat /var/log/cron



また、"CRON"を実施したユーザ(デフォルトではrootユーザ)宛てにCRON実施状況のメールが送信されるのでそちらを見る手段もある。

ここまでの設定で"EC-CUBE"のメルマガ予約配信の設定と指定日時にメルマガが送信される自動化の設定が完了となる。


ところが、これもサーバの環境に左右されるがメール送信されない事象が発生することがある。

それは実行されるPHPのスクリプトに原因がある。

"CRON"で設定した「sendmail.php」を見ると、デフォルトのソースでは各クラスファイルやモジュールを「require_once("../require.php");」で呼び出している。

この呼び出し元がうまく参照できないことがあるため、下記のように変更するとうまく動作することがある。

$path = '/rootディレクトリからのEC-CUBEがあるパス/data/';
require_once $path . 'install.php';
require_once $path . 'require_base.php';



データベースへのコネクト情報も拾えないことがあるので「install.php」も参照するようにしている。


ちなみに"EC-CUBE"のメール送信は指定した宛先に一斉送信をかけるため、送信先が何千、何万になると送信にかかるサーバ不可が気になるとともに、各社携帯キャリアに送信する場合は"迷惑メール"と判断されてメールの受信を拒否されてしまうことがある。

そのため、一回あたりに送信するメール数を設定値に持たせ、"CRON"の自動処理で少しずつ排出するというカスタマイズもこの予約配信設定で可能になる。

"メルマガの予約配信と自動化 -EC-CUBE-" へのコメントを書く

お名前
ホームページアドレス
コメント