131007-cakePHP-Mail

 先日、PHPのフレームワークCakePHPでメールの送信機能を実装したら

An Internal Error Has Occurred.
(内部エラーが発生しました。)

といったようなエラーメッセージが表示されて苦戦しました。その解決策を下記に明記しておきます。

 まず環境ですが、CentOS 6でPHP 5.4.18、CakePHPは2.3.10のバージョンです。

 プログラムですがEmailの設定ファイル/app/Config/email.phpファイルのEmailConfigクラスに下記を追加します。

class EmailConfig {
    public $sample = array(
        'transport' => 'Mail',
        'from' => 'to@fuge.net',
        'sendAs' => 'text',
    );
   (以下省略)
}

 次にコントローラーに/app/Controller/MailsController.phpを追加して、下記プログラムを明記します。

<?php
App::uses('CakeEmail', 'Network/Email');
class MailsController extends AppController {

    public function send() {
        $email = new CakeEmail();
        $email->config('sample');
        $email->subject("テストメール");
        $email->to("to@hoge.com");
        $email->send( 'メール本文');
        exit("Fin!");
    }
}

 CakePHPでメールを送信したことがある方なら、特に難しいことは書いていないことはわかると思います。

 さて、ブラウザでhttp://fuge.net/mails/send/にアクセスすると「Fin!」と表示されメールが送られるはずなのですが、結果は下記のような画面が表示されます。

「Could not send email.」と書かれた内部エラー

「Could not send email.」と書かれた内部エラー

 また、設定ファイルの/app/Config/email.phpで「transport」を「Smtp」に変更すると

「Permission denied」と書かれた内部エラー

「Permission denied」と書かれた内部エラー

といったようなエラーが表示されます。

 さて、どうしたものかといろいろ調べたところ、今回の原因はSELinuxが有効になっているためにメールが送信できなかったようです。そこで「/etc/selinux/config」ファイルの

SELINUX=enforcing

SELINUX=disabled

に変更し、サーバーを再起動(reboot)することで、無事送信できました。確かSELinuxはOFFにしたと思っていたのですが、なっていなかったようですね。SELinuxはもっと勉強しておかないとな・・・。

詳解CakePHP辞典2.0/2.1/2.2/2.3対応

著者/訳者:滝下 真玄

出版社:秀和システム( 2013-03-14 )

定価:

Amazon価格:¥ 8,624

単行本 ( 728 ページ )

ISBN-10 : 479803746X

ISBN-13 : 9784798037462