CakePHP2 でメール送信する時の謎動作

今時 CakePHP2.x 系を使っているシステムは少ないと思いますが、メール送信する時に謎動作に遭遇したのでメモしておきます。

CakePHP2 ではメール送信にmb_send_mail() ではなく、独自の CakeEmail クラスを使うことが多いと思います。CakeEmail インスタンス化時に実際どのトランスポートを使うか切り替えます。

トランスポートは app/Config/email.php に定義されており、例えば ‘default’ だったら、以下のように書いてあります。

class EmailConfig {
  public $default = array(
    'transport' => 'Mail',
    'from' => 'your@localhost',
  );
}

変数 transport には Mail, Debug, Smtp の3つの値があり、send() 定義でカスタム送信メソッドを作成することができるようになっています。

ここで Smtp は対象のメールサーバへのアクセスを直接定義し、Debug はローカルに出力します。

残りの Mail が何をやるかが問題。

当初は php.ini の設定に従って mb_send_mail() を呼び出すのかなと思ったのですが、どうも全く違う様子。以下のようなログが出てきてしまいます。

2023-02-09 23:32:29 Error: [SocketException] Could not send email: unknown
Request URL: /users/XXXXX/
Stack Trace:
#0 /var/www/html/YYYY/cake/lib/Cake/Network/Email/MailTransport.php(52): MailTransport->_mail('user@example....', '=?UTF-8?B?44CQ4...', '\e$B>>K\\\e(B \e$B<...', 'From: =?UTF-8?B...', NULL)
#1 /var/www/html/YYYY/cake/lib/Cake/Network/Email/CakeEmail.php(1179): MailTransport->send(Object(CakeEmail))
#2 /var/www/html/lYYYY/cake/app/Controller/UsersController.php(159): CakeEmail->send()

Xserver の php.ini の sendmail 設定かなと思っていますが、検証するには至らず。
ちょっと気味悪いままになっています。(実はローカルにsendmailはいないとか、postfix との相異点にハマっているか、色々考えられます。)

投稿者について
みのしす

小さいときは科学者になろうとしたのに、その時にたまたま身に着けたプログラミングで未だに飯を食っているしがないおじさんです。(年齢的にはもうすぐおじいさん)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です