cakephpでお問い合わせフォーム

勉強がてら自作しようかなと思いつつ、もしかしたらもう誰か作ってるかな?
と検索してみたらそのものずばり、ありました。


toyosystem » CakePHP::メール送信プラグインを書いた


カスタマイズ性も高くて中身のソースを見るのもcakephpを理解するのに非常に勉強になります!!
稼動させるまでに少しだけハマったのでメモ。

なぜかメール送信できなかった。

プラグインだからインストールしたらすぐ動くかなあ?


と試したら、おお、さくさく動いてメールも送信完了したか?と思ったら肝心のメールが来ない・・。
調べてみたら、


xreaのサーバーでは(全部がそうかは知らないけど)、
mail関数の第五引数があると、

Warning: mail() [function.mail]: SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE.


となってメールの送信ができない、ということがわかりました。


ということで、
mail_contacts_controller.phpの100行目付近

<?php
//return @mail($to,$subject,$content,$ext,$param);
//hack
return @mail($to,$subject,$content,$ext);
?>


と修正することで無事メールが送信されるようになりました♪


第五引数が指定できないのでsenderの設定ができないため、送信先アドレスが間違ってた場合のエラーメール(バウンスメール)が自分のところに戻ってこないかもしれないけど
(たぶんxreaのルートかなんかに行っちゃう、もしくは最近はsenderが設定されてないメールは全部カットしちゃうメール受信サーバーも多いのでいずれにしろ来ない、とか)、
まあそれぐらいはいいかなあなんて。


もしこれがどうしても気に入らない人は、
xreaじゃないサーバーを使うか)
mail関数の代わりにsendmailを直接呼び出すスクリプト書くか、
phpmailerやpearのmailライブラリを使うといいのではないかと思います♪

cakephpのplugin(プラグイン)のRouting(ルーティング)方法

プラグインのアドレスは長ったらしくていやだなと思ったので、config/routes.phpでどうにか設定して短いURLにならんかなあ、とマニュアル見たけどプラグインのルーティング方法は載ってない・・と思ったけど、

<?php
$Route->connect('/contact.php', array('controller' => 'mail', 'action' => 'mail_contacts', 'index'));
?>


こんなふうに設定したら、http://cakephpのルート/contact.php/mail/mail_contacts/indexにアクセスできました♪


プラグインのルーティングは

<?php
$Route->connect('ルーティング先', array('controller' => 'プラグイン名', 'action' => 'コントローラー名', 'アクション名'));
?>


でできる、ということみたいだ(ちょっと気持ち悪いけど)。