22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC-CUBE から SendGrid を利用する

Last updated at Posted at 2014-10-05

EC-CUBE から SendGrid を利用する

EC-CUBE からメールを送信する際、通常は EC-CUBE をホスティングしているサーバーを利用します。
しかし、メールの到達・開封確認ができなかったり、大量のメール送信に向いていなかったりします。
クラウドメールサービスである SendGrid を利用すれば、これらの問題を解決することが可能です。
SendGrid の機能をフルに利用するためには、少しだけ手を加えてあげる必要があります。

アカウントの開設

日本公式サイト から申込可能です。

SMTP の設定

3.0 以降のバージョン

SendGrid プラグイン が利用できます。

2.12.x 以降のバージョン

data/config/config.php を以下のように設定します。

define('MAIL_BACKEND', 'smtp');
define('SMTP_HOST', 'ssl://smtp.sendgrid.net');
define('SMTP_PORT', '465');
define('SMTP_USER', 'apikey');
define('SMTP_PASSWORD', '<sendgrid のAPI KEY>');

インストール前の状態でしたら、インストーラの オプション設定 にて設定可能です。

スクリーンショット 2014-10-06 22.47.07.png

2.11.x 以前のバージョン

  1. 管理画面→システム設定→パラメータ管理を以下のように設定します
    • MAIL_BACKEND - 'smtp'
    • SMTP_PORT - 465
    • SMTP_HOST - 'ssl://smtp.sendgrid.net'
  2. data/class_extends/SC_SendMail_Ex.php に以下を追記します。(40行目付近)
    function getBackendParams($backend) {
        $arrParams = parent::getBackendParams($backend);
        switch ($backend) {
            case "mail":
            case "sendmail":
                break;
            case "smtp":
            default:
                $arrParams['auth']      = true;
                $arrParams['username']  = 'apikey';
                $arrParams['password']  = '<sendgrid のAPI KEY>';
                break;
        }
        return $arrParams;
    }

参考サイト

開封確認の設定

開封確認など、 SendGrid の機能をフルに利用するには、data/class/SC_SendMail.php を修正する必要があります。
この設定は 2.13.x 系のものとなりますが、旧バージョンでも行数が異なる程度で、おおむね同様です。

260行目付近、269行目付近の ISO-2022-JPUTF-8 に置換します。

例)
$arrHeader['Content-Type'] = 'text/html; charset="ISO-2022-JP"';
↓
$arrHeader['Content-Type'] = 'text/html; charset="UTF-8"';

120行目付近、128行目付近、172行目付近の JISUTF-8 に置換します

例)
$this->subject = mb_encode_mimeheader($subject, 'JIS', 'B', "\n");
↓
$this->subject = mb_encode_mimeheader($subject, 'UTF-8', 'B', "\n");

129行目付近を以下のように変更します。

$this->body = str_replace(array("\r\n", "\r"), "\n", $this->body);
↓
$this->body = str_replace(array("\n", "\r"), "\r\n", $this->body);

2.13.x 向けのパッチ(参考)

--- SC_SendMail.php.orig	2013-08-24 23:33:52.000000000 +0900
+++ SC_SendMail.php	2014-10-05 20:36:56.312059682 +0900
@@ -117,7 +117,7 @@
     // 件名の設定
     public function setSubject($subject)
     {
-        $this->subject = mb_encode_mimeheader($subject, 'JIS', 'B', "\n");
+        $this->subject = mb_encode_mimeheader($subject, 'UTF-8', 'B', "\n");
         $this->subject = str_replace(array("\r\n", "\r"), "\n", $this->subject);
     }
 
@@ -125,8 +125,8 @@
     public function setBody($body)
     {
         // iso-2022-jpだと特殊文字が?で送信されるのでJISを使用する
-        $this->body = mb_convert_encoding($body, 'JIS', CHAR_CODE);
-        $this->body = str_replace(array("\r\n", "\r"), "\n", $this->body);
+        $this->body = mb_convert_encoding($body, 'UTF-8', CHAR_CODE);
+        $this->body = str_replace(array("\n", "\r"), "\r\n", $this->body);
     }
 
     /**
@@ -169,7 +169,7 @@
             if ($name != '') {
                 // 制御文字を変換する。
                 $_name = $name;
-                $_name = mb_encode_mimeheader($_name, 'JIS', 'B', "\n");
+                $_name = mb_encode_mimeheader($_name, 'UTF-8', 'B', "\n");
                 $_name = str_replace('"', '\"', $_name);
                 $name_address = sprintf('"%s" <%s>', $_name, $mail_address);
             } else {
@@ -257,7 +257,7 @@
     public function getTEXTHeader()
     {
         $arrHeader = $this->getBaseHeader();
-        $arrHeader['Content-Type'] = 'text/plain; charset="ISO-2022-JP"';
+        $arrHeader['Content-Type'] = 'text/plain; charset="UTF-8"';
 
         return $arrHeader;
     }
@@ -266,7 +266,7 @@
     public function getHTMLHeader()
     {
         $arrHeader = $this->getBaseHeader();
-        $arrHeader['Content-Type'] = 'text/html; charset="ISO-2022-JP"';
+        $arrHeader['Content-Type'] = 'text/html; charset="UTF-8"';
 
         return $arrHeader;
     }

謝辞

設定について @nakansuke さんにサポートいただきました。

その他

  • 2.4系など、旧バージョンでの設定方法がわからない、うまくいかない場合など、コメント覧にてお知らせください
  • PHP5.6以降のバージョンを使用する場合、PHP 5.6.x における OpenSSL 関連の変更 に該当し、メール送信できない場合があります。 こちら を参考に、ピア検証を無効化するか、最新の CA バンドルファイルを使用するよう設定してください(推奨)。
22
22
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?