LoginSignup
2
2

More than 5 years have passed since last update.

ECCUBE2系の開発環境メールサーバーとしてmailtrap.ioを使う

Posted at

mailtrapを使いたかったが、無理だったので直した。
ECCUBEバージョンは2.11.4。

ポイント

下記コンストラクタを見れば、どう修正すれば良いか必要な情報が全て書かれています。

SC_SendMail.phpのコンストラクタ
    // コンストラクタ
    function SC_SendMail() {
        $this->arrRecip = array();
        $this->to = "";
        $this->subject = "";
        $this->body = "";
        $this->cc = "";
        $this->bcc = "";
        $this->replay_to = "";
        $this->return_path = "";
        $this->backend = MAIL_BACKEND;
        $this->host = SMTP_HOST;
        $this->port = SMTP_PORT;
        mb_language( 'Japanese' );

        //-- PEAR::Mailを使ってメール送信オブジェクト作成
        $this->objMail =& Mail::factory($this->backend,
                                        $this->getBackendParams($this->backend));
    }

1.定数 MAIL_BACKEND について

定数 MAIL_BACKEND の値をsmtpに設定した場合、
ECCUBEのSC_SendMailクラスを経由して、PearのMail_smtp クラスが実際の送信処理を担当。(移譲)

この定数はPearのMailクラスのファクトリメソッドにそのまま渡されていて、どのクラスで送信処理を行うかが決まっている。
define('MAIL_BACKEND', 'smtp'); → pearの Mail_smtp クラスが送信処理を担当。
define('MAIL_BACKEND', 'mail'); → pearの Mail_mail クラスが送信処理を担当。

2.Mail::factory() のパラメータ

SC_SendMailクラスのコンストラクタで、Mail::factoryを呼び出している。
Mail::factory() の第一引数はバックエンドを示す文字列、第二引数は、各実装クラスのコンストラクタに渡されるパラメータ配列。この第二引数の配列を作っているのは、SC_SendMail::getBackendParams()

SC_SendMail::getBackendParams()が、hostとportしか返していないので、認証が必要なsmtpサーバーは使えません。
なんてこった。

修正箇所

下記2点修正した。
- SC_SendMail::getBackendParams() をオーバーライドして、認証情報を追加。
- config.php に認証情報を追記。

SC_SendMail_Ex.php(抜粋)

    /**
     * SC_SendMail::getBackendParams() をオーバーライド。
     * smtp認証情報の項目を追加
     * @param string $backend
     * @return array
     * @link http://pear.php.net/package/Mail/
     * @see Mail_smtp::Mail_smtp()
     */
    function getBackendParams($backend){
        $arrParams=parent::getBackendParams($backend);
        if($backend ==="smtp"){
            if(defined("SMTP_AUTHENTICATION")){
                if(SMTP_AUTHENTICATION===true){
                    $arrParams['auth']=true;
                    $arrParams['username']=SMTP_USERNAME;
                    $arrParams['password']=SMTP_PASSWORD;
                }
            }
        }
        return $arrParams;
    }
config.php
//mailtrap.io利用に必要な追加のパラメータ
define('SMTP_AUTHENTICATION',true);
define('SMTP_USERNAME','mailtrap.ioのusername');
define('SMTP_PASSWORD','mailtrap.ioのpassword');
2
2
0

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
2
2