LoginSignup
1
1

More than 3 years have passed since last update.

【CakePHP2】EmailComponent.phpでのメールヘッダ設定メモ

Posted at

はじめに

cakePHP2でメール送信処理にて、メールヘッダを付与する際にハマりかけた部分の注意点になります。

環境

cakePHP:2.4

ことのはじまり

メールのヘッダにパラメータを設定するときに、追加したパラメータが正しく設定できなかった事例がありました。
ざっくり説明すると、メールヘッダに以下のユーザ定義パラメータを用意して、trueを指定すると設定が有効化されるという内容になります。
(パラメータの詳細は割愛します)

X-USE-HOGEHOGE = true;

そしてコントローラ側で、以下のようにパラメータ設定しました。

コントローラの設定部分(修正前)
   class myEmailSendClass extends EmailComponent {
       // ・・・(省略)・・・
       // ヘッダを有効化する
       $this->headers['X-USE-HOGEHOGE'] = 'true';
   }

このときに、実際に送信されたパラメータをチェックすると、X-が余分についてる状態でした。

X-X-USE-HOGEHOGE = true;

原因など

もとの処理を見てみると、EmailComponent.phpでは、
X-をヘッダに付加してから、CakeEmail.phpを利用する仕様でした。
そのため、ヘッダに余分がX-がついてしまいました。

そこで、以下のようにコントローラの設定部分を見直して正しくヘッダ設定できるようにしました。

コントローラの設定部分(修正後)
   class myEmailSendClass extends EmailComponent {
       // ・・・(省略)・・・
       // ヘッダを有効化する
       $this->headers['USE-HOGEHOGE'] = 'true';
   }
scripts/lib/Cake/Controller/Component/EmailComponent.php

/**
 * Associative array of a user defined headers
 * Keys will be prefixed 'X-' as per RFC2822 Section 4.7.5
 *
 * @var array
 */
   public $headers = array();

   // ・・・(省略)・・・

/**
 * Send an email using the specified content, template and layout
 *
 * @param string|array $content Either an array of text lines, or a string with contents
 *  If you are rendering a template this variable will be sent to the templates as `$content`
 * @param string $template Template to use when sending email
 * @param string $layout Layout to use to enclose email body
 * @return boolean Success
 */
    public function send($content = null, $template = null, $layout = null) {

        $lib = new CakeEmail();

        // ・・・(省略)・・・

        // ここで、接頭語として "X-"を付与しています。
        foreach ($this->headers as $key => $value) {
           $headers['X-' . $key] = $value;
        }

        $lib->setHeaders($headers);

        // ・・・(省略)・・・

        $sent = $lib->send($content);

    }

所感

使用しているクラス(Component)によって、メールヘッダのユーザ定義(X-)を補完する場合があるみたいなので、
気をつけねばなと思いました。

元々、Cake自体のメール送信処理では、標準のメール送信処理が入ってるので、特別な理由がない場合は、
こちらを使用した方が良いのかもと思いました。

ちなみに、2021年時点でCake4の標準Mailer仕様を見ると、自分で設定する必要があるみたいです。

ヘッダーの設定
Mailer の中に、自由にヘッダーをセットできます。Email を使用する際、 独自のヘッダーにプレフィックスの X- をつけることを忘れないでください。

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