cakephpでメール送信(smtpの準備まで)

  • cakephpでメール送信
  • テンプレートで作成した本文で送信したい
  • 簡素なもので、あんまり設定条件がいっぱいあるのは後回し。まず送信したい。
  • …というわけで鼻の黒い人も使っているQdmailを使うことに。レッツトライ!
    Qdmailをもってくる
    Qdmailのサイトから本体をダウンロードいたします。本家サイトの言われるとおりに
    app/controllers/components/ にダウンロードしたファイルを設置。
    そのあとコントローラーに下記を記載。私は共通で使う可能性があるのでapp_controller.phpに。他のものも使ってるので追記。

    var $components = array('Auth','DebugKit.Toolbar','Qdmail');
    

    次にコントローラーに以下のようにかいてね、とある。

    $this->Qdmail->to( 'mail@XXX.com' , '日本語名' );
    $this->Qdmail->subject('Qdmail on CakePHP メールのテスト');
    $this->Qdmail->from('from@example.com' , '配信元日本語名' );
    $this->Qdmail -> text( '本文をここにかきます' );
    $this->Qdmail -> send();
    

    これで動くの!ってやってみた。パパ、動かないよ…いやいや、まてまて。まてよ…SMTPサーバを使うわけでその設定がないじゃん…。というわけで、上記サイトからQdsmtpというものがあることをしる。お、これでいいですね。これにしましょう。
    というわけでQdsmtpのサイトからさらにダウンロード。
    /app/controllers/conponents/ にいつものとおり設置。先ほどのサイト、よくよむと、どうやらコンポーネントとして使用する場合は

    $conponentes = array( 'Qdsmtp' );
    

    これはかかなくてもよいみたい。Qdmailが勝手にこみこんでくれるらしい。なので上記の$conponentesへの追記はしない。
    次にapp_controller.phpに下記のようにパラメータを設定(SMTPAuthです)

    	var $mail_param = array(
            'host'=>'smtp.hogehoge.jp',
            'port'=> 587 , //これはSMTPAuthの例。認証が必要ないなら 25 でOK。
            'from'=>'hogeo@hogehoge.jp',// Return-path: になります。
            'protocol'=>'SMTP_AUTH',// 認証が必要ないなら、'SMTP'
            'user'=>'hoge', //SMTPサーバーのユーザーID
            'pass' => 'password', //SMTPサーバーの認証パスワード
        );
    

    次にメール送信を行うコントローラーに

      	//あて先・本文等のチェックを行ってから送信を行う
    	$this->Qdmail->smtp(true);
    	$this->Qdmail->smtpServer($this->mail_param);
      	$this->Qdmail->to( 'hoge@hoge.com' , '登録者様' );
    	$this->Qdmail->subject('Qdmail on CakePHP メールのテスト');
    	$this->Qdmail->from('yashio@hoge.jp' , 'よしおさん' );
    	$this->Qdmail -> text( ’本文でござる。');
    	$this->Qdmail -> send();
    

    こんな感じ。パラメータをいちいちセットするんだけどこれなんでなんだろう…。実はQdsmtpの方も$mail_paramみたいなフィールドがあってそっちにも指定したんだけど、どうもそこだとnew()しないと動かないという…。まあ自分であとであて先だの送信先だのパスワードだの設定するような関数つくればいいんかねえ。設定値をいろいろ書くとあとでわかんなくなるからきをつけねば。

    で。これだけでもいいんだけど、やっぱりメールっていろいろテンプレート読み込ませたいよねって事で、上記のソースからテンプレートを作成するように変更。cakephperさんの記事がまさにこれでした。というわけでそのまま…。
    app/view/layouts/email.ctp を作成
    app/view/モデル名/infomail.ctp を作成。

    	$this->Qdmail->smtp(true);
    	$this->Qdmail->smtpServer($this->mail_param);
      	$this->Qdmail->to( 'hoge@hoge.com' , '登録者様' );
    	$this->Qdmail->subject('Qdmail on CakePHP メールのテスト');
    	$this->Qdmail->from('yashio@hoge.jp' , 'よしおさん' );
        //本文にセットする値を構築。本当はformからかな。
    	$mail_data = array(
    	'User'=>
    		array(
    		'mail'=>'mail@ppp.co.jp',
    		'company'=>'会社名'
    		)
    	);
    	//入力内容を変数にセットする
    	$this->set("inputdata",$mail_data);
    	//表示用のテンプレートにセットする
    	$content = $this->render(null,'email', 'infomail');
    	$this->output = '';
    	$this->Qdmail -> text( $content );
    	$this->Qdmail -> send();
    

    で、実際に動いてよし、へー簡単なんだーってことでこのプログラムをそのままCentOSに乗せたらUGOITA!
    ただし、これ $this->output = ”;  とかいてあるだけあって、実行すると白紙になる。 実際は白紙じゃなくてどっかviewになげるべきなんだろうなあ、と。たとえばこのメソッドの同一名のviewかなと思って対応する名前のctpファイル作ってみたんだけど表示されんかった!凹○ そんな安易なわけないか・・。今回ユーザ登録があったタイミングでメール送信を行うので、メール送信をしたら、どっかのページに遷移して「完了」ってでると良いなと。ま、これはまたおいおい。今日はメール送信ができたのでわりと満足。今日はもう睡魔にやられておりますゆえ、寝る。とりあえずメール送信は結構楽です。Qdmailいいよ。

    ※だいぶ前にQdmailを使用してメール送信を構築したい際に、「文字化けする」という事態が発生しておりますので、
    $this->Qdmail->lineFeed(‘\n’); を設定しております。特定の環境からのみ、文字化けが発生するのでその回避策でした。
    そちらについてはこちらを参考にさせていただきました。

    広告

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中