WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
メールの基本的な使い方

メールの基本的な使い方

このエントリーをはてなブックマークに追加

メールを送信するためには、基本的にMail::sendメソッドを使用します。

Mail::send(‘ビューファイル’,添付データ,無名関数)

Mail::sendメソッドは、第1引数に、ビューファイルを指定します。第2引数には、ビューファイルに渡すデータを指定します。第3引数は、無名関数(クロージャー)で、メッセージのオプションを指定します。

メッセージのオプション

  • to(‘送信先メールアドレス’,’送信先名’)
    toメソッドの第1引数は、送信先のメールアドレスを指定します。第2引数は、送信先名を指定します。
  • subject(’件名’)
    subjectメソッドは、メールの件名を指定します。
  • from(送信元メールアドレス、送信者名)
    fromメソッドの第1引数は、送信元のメールアドレスを指定します。第2引数は送信者名を指定します。fromメソッドは指定しなければ、app/config/mail.phpの設定ファイルで指定したfromの内容が使用されます。
  • attach(添付ファイルのパス)
    attachメソッドは、メールに添付ファイルつけることができます。第1引数に添付ファイルのパスを指定します。第2引数には、配列で、MIMEタイプと表示名のどちらか、もしくは両方を指定することができます。

HTMLメールを送信する

それでは、HTMLメールを送信してみます。今回、実際に、GmailController.phpを作成して、簡単なメール送信プログラムを作成してみましたので、ご紹介します。

app/controllers/GmailController.php

<?php
 class GmailController extends BaseController{
 public function getCreate($id){
 $data['user']=User::find($id);
 return View::make('gmail/create',$data);
 }
 public function postCreate(){
 $inputs=Input::all();
 $rules=[
 'subject'=>'required',
 'aisatu'=>'required',
 'body'=>'required',
 ];
 $val=Validator::make($inputs,$rules);
 if($val->fails()){
 return Redirect::back()
 ->withInput()
 ->withErrors($val);
 }
 //ビューに渡すデータの整理
 $data['aisatu']=Input::get('aisatu');
 $data['body']=Input::get('body');
 Mail::send('gmail.send',$data,function($msj){
 $user=User::find(Input::get('id'));
 $msj->to($user->email,$user->name)
 ->subject(Input::get('subject'))
 ->from(Auth::user()->email,Auth::user()->name);
 });
return View::make('gmail/success');
}
  • 3-6行目:HTTPメソッドがGET時の処理を記述しています。今回説明は省きますが、User一覧のリストから、メールを送信したい人のリンクをクリックしたときに、その人のidを取得して、そのidを元にUserモデルを生成します。そして、メール送信用のフォームを開きます(生成します)。
  • 7-30行目:HTTPメソッドがPOST時の処理を記述しています。
  • 8-19行目:バリデーション処理です。今回説明は省略します。
  • 20-28行目:メールを送信するためのロジックです。
  • 21-22行目でビューに渡すデータを整理しています。下記のように21-23行目を変更することもできます。お好きな方を使用してください。
    $aisatu=Input::get(‘aisatu’);
    $body=Input::get(‘body’);
    Mail::send(‘gmail.send’,compact(‘aisatu’,’body’),function($msj){
  • 23-28行目:実際のメールを送信するためのロジックです。
  • 24行目:POST送信された(フォームから送られてきた)idを元に送信先のUserモデルをインスタンス化しています。
  • 25行目:toメソッドに、送信先emailと送信先名を指定します。
  • 26行目:subjectメソッドに、フォームから送信されてきたsubjectを指定します。
  • 27行目:会員専用ページからメールを送信していますので、送信元のemailはAuth::user()->emailで取得できますし、送信者名は、Auth::user()->nameで取得することができます。

app/views/gmail/create.blade.php

@extends('jqm.layout')
 @section('content')
 To:{{$user->name}}
 {{Form::open()}}
 {{Form::label('subject','件名')}}
 {{Form::text('subject','',['placeholder'=>'件名を入力して下さい'])}}
 {{Form::label('body','本文')}}
 {{Form::textarea('body','',['placeholder'=>'ここに本文を入力してください'])}}
 {{Form::hidden('id',$user->id)}}
 {{Form::hidden('aisatu','いつもお世話になっております。')}}
 {{Form::submit('メール送信',['data-theme'=>'b'])}}
 {{Form::close()}}
 @stop
  • 8行目:hidden属性で送信先ユーザーのidを送信します。
  • 9行目:ここでは、挨拶文もhidden属性で作成していますが、実際には、いくつかのパターンを作成して、ラジオボタンで選択するように作成しています。
  • 件名と本文を入力して送信ボタンをクリックすると、メールの内容が、postCreateアクションへ渡されます。

app/views/gmail/send.blade.php

<!DOCTYPE html>
 <html lang="ja">
 <head>
 <meta charset="utf-8">
 </head>
 <body>
 <h4>{{$aisatu}}</h4>
 <div>
 <p>{{preg_replace("/\n/","<br>",$body)}}</p>
 <br>
 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆<br>
 <h4> {{Auth::user()->name}}<br>
 TEL:{{Auth::user()->tel}}<br>
 Email:{{Auth::user()->email}}</h4>
 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆<br>
</div>
 </body>
 </html>
  • このビューファイルが実際にメール送信される内容になります。
  • 9行目:preg_replace関数で、第1引数の改行コードを第2引数の<br>に変換します。これがなければ、送信フォームで改行しても、送られたメールは改行されません。なお、上記の表示は”<br>”がエスケープ処理されて、””としか表示されていないみたいです。
  • 9行目は、実際には、下記が、正しいです。
    {{preg_replace(“/\n/”,”<br>”,$body)}}
  • 11-15行目:ここも、<br>がエスケープ処理されて表示されていません。実際には、下記が正しいです。
    ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆<br>
    <h4> {{Auth::user()->name}}<br>
    TEL:{{Auth::user()->tel}}<br>
    Email:{{Auth::user()->email}}</h4>
    ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 プレーンメールの送信

次にプレーンメール(テキストメール)の送信方法をご紹介します。下記にテキストメールを作成します。

app/views/gmail/sendtext.blade.php

{{$aisatu.”\n\n”}}
{{$body.”\n\n”}}
{{“☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n”}}
{{Auth::user()->name.”\n”}}
{{“TEL:”.Auth::user()->tel.”\n”}}
{{“Email:”.Auth::user()->email.”\n”}}
{{“☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆”}}

  •  改行コードは、必ず、{{}}の中に記述してください。これで、挨拶文と本文の間が2回分改行されます。\nは改行コードです。

これで、Mail::sendメソッドに、’gmail.sendtext’を指定すれば、プレーンメールが送信されるのかと思っていたら、実際には、HTMLメールとして送信されていました。

プレーンメールを送信するには、これがプレーンメールだということを教えてあげる必要があります。

上記のGmailController.phpの23行目を下記のように修正します。

Mail::send([‘text’=>’gmail.sendtext’],$data,function($msj){

この、[‘text’=>’gmail.sendtext’]でないと、プレーンメールとしては、送信できませんので、ご注意ください。私も結構躓きました。

いまだに、プレーンメールでないと受信できない携帯がありますので、プレーンメールの送信方法は大事だと思います。

« »

コメントを残す

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