Laravelにはメールを送信するクラス(mailable)が最初から用意されています。
これを使って管理者宛にメールを送信してみます。
今回管理者宛にメール送信するプログラムなので名前を「Admin」とします。(命名は自由です好きに書き換えてください)
app/Mail/Admin.php というファイルを次のコマンドで生成します。
php artisan make:mail Admin
app/Mail/Admin.php が生成されました。 以下のように修正します。
public function build() の中を書き換えます
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Admin extends Mailable
{
use Queueable, SerializesModels;
private $message;
/**
* Create a new message instance.
* @return void
*/
public function __construct( $m )
{
$this->message = $m;
}
/**
* Build the message.
* @return $this
*/
public function build()
{
// ここを書き換えます ↓
return $this->from('FROM-ADDRESS@YOUR-DOMAIN.COM')
->subject( "エラーのお知らせ" )
->view('mails.admin')
->with([
'user_name' => 'テスト 太郎' ,
'my_text' => $this->message ,
]);
// ここを書き換えます ↑
}
}
まず、 resources/views へ移動し、ディレクトリ mails/ を作成します。 そしてその中にファイル admin.blade.php を以下の内容で作成します
こんにちは{{ $user_name }} !!!<br>
テストメールです<br>
{!! $my_text !!}
コントローラーの好きな所に記述します。
use Illuminate\Support\Facades\Mail;
use App\Mail\Admin;
// メール送信
$t = '任意のテキストをここに記述します';
Mail::to('TO-ADDRESS@YOUR-DOMAIN.COM')->send( new Admin($t) );
正しくメール送信が行える設定になっているか .env ファイルを確認します。
ローカルサーバではなくインターネット上にあるサーバの場合はとりあえずは以下の設定でメール送信が可能です。
MAIL_FROM_ADDRESS=<メールアドレス>
MAIL_FROM_NAME=<メールアドレスの横に表示させる名前>
MAIL_DRIVER=sendmail
MAIL_HOST=localhost
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=
メール送信を記述したコントローラにアクセスしてメールを送信してみます。
このようなメールが到着します
.env の MAIL_DRIVER には次の指定ができるようです。
MAIL_DRIVERの値 | 説明 | 補足 |
---|---|---|
sendmail | PHPのmail関数で送信する(一番簡単) | |
smtp | SMTPサーバーへログインして送信する(id,passが必要) | |
mailgun | MailgunというAPIベースのメール配信サービスから送信する | |
mandrill | MailgunというAPIベースのメール配信サービスから送信する | |
ses | Amazon AWSが提供するAmazon SESから送信する | |
sparkpost | SparkPostというAPIベースのメール配信サービスから送信する | |
log | 送信は行わず、ログファイルに内容を書き込む | storage/logs/laravel.log に内容が記述されます |
array | ロジックは通りますが、送信はされません |