はじめに
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';
}
/**
* 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- をつけることを忘れないでください。