GOODTABLE鎌倉オープン
GOODTABLE鎌倉オープン
2013.10.10

[CakePHP開発]メールが受信できない時はReturn-Pathを設定してみよう

勝利

そろそろ 各々が思う、冬が訪れます。勝利です。

今回はCakePHPの2系で「特定のメールサーバーでメールが受信できない」という事象に出会ったので、その対処法をご紹介します。

環境

事象の確認済みVersionは以下です。

cakephp-2.3.10

※2013.10.7 現在において安定版の最新Version。

おそらくこのバージョン以下で2系であれば発生しうる問題だと思います。

事象

特定のメールサーバーでメールが受信できない。

試した限りでは、フリードメイン(gmail/yahoo等)で受信できたものが、LIGメールサーバーでは受信できなかったです。

対処方法

CakePHPのEmailComponentのtransport設定を「Mail」に設定した場合、単純にsend_mailが実行されます。その際に、メールサーバーによってはセキュリティに引っかかり、受信できない場合があるので、今回の場合は明示的に正しいReruen-Pathの指定を行うことでその対処ができました。

そもそもReturn-Pathってなに?

メールヘッダー情報の種類のひとつで、正常にメール受信が行えなかった場合などの返送先を示す。
RFC2822(詳細はRFC2821)に定義されている。

このヘッダーは、メールを一番最後に受け取ったSMTPサーバーがつけるが、任意のヘッダーであるため、Return-Pathの有無はサーバーに依存する。

PIPED BITS

上記の通り、メールを一番最後に受け取ったSMTPサーバーが付与する情報です。CakePHPのEmailComponentを使用する場合には、Return-Pathの設定がサーバーのデフォルト設定として反映されてしまいます。

そのサーバーのデフォルト設定が特定のメールサーバではスパム扱いされる等により、はじかれてしまうのですね。

実際に記述したコード

コンフィグの設定でなんとか出来ます。

app/Config/email.php

public $default = array(
'transport' => 'Mail',
'from' => 'shori_muraoka@liginc.co.jp',
// 以下additionalParamerwesにReturn-Pathの設定を記述
'additionalParameters'=> '-fshori_muraoka@liginc.co.jp',
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
);

上記の「additionalParameters」の値を設定することによってReturn-Pathの値が書き換わります。

実際にメールを送信してみてヘッダー情報を確認してみてください。

ほら、書き換わってるでしょ。

※実は・・・

CakePHPにはReruen-Pathを設定する明示的なプロパティ(returnPath)があるのですが、こちらの値を設定してもどうにもこうにも行きません。

詳しく見たい方は、coreファイルを参照してみてください。

まとめ

メールをただ単に送信しようとするとCakePHPの場合、transport値をMailにするパターンが多いと思います。その際に設定すべき一つのパラメータとして覚えておければよいかなと思います。