Laravelにはメール送信機能が標準で搭載されています。Mailファサードを使えば、簡単にメールを送信することができます。
目次
Mail送信の基本
STEP
.env設定
まずは .env ファイルでメールドライバなどの設定をします。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=XXXXXXXXXXXXXXXXXXXX
MAIL_PASSWORD=XXXXXXXXXXXXXXXXXXXX
MAIL_ENCRYPTION=null
ここではメールドライバをSMTPで、サービスはMailtrapを使う設定にしています。
STEP
Gmailでの設定例
1. .envの設定
ポイントはGmailのアドレスとアプリパスワードを設定することです。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=あなたのGmailアドレス
MAIL_PASSWORD=あなたのGmailアプリパスワード
MAIL_ENCRYPTION=tls
2. Gmailで安全性の低いアプリの許可
次にGmail側の設定です。
- Gmailのセキュリティ設定を開く
- 「安全性の低いアプリの許可」をONにする
これでLaravelからGmail smtpへのアクセスを許可します。
3. メール送信テスト
これで準備完了です。実際にメール送信してみて、Gmail側で送信ログが記録されればOKです。
環境に合わせて認証の設定などをして、送信テストを行いましょう
STEP
Mailクラスの作成
artisanコマンドでメールクラスを作成します。
php artisan make:mail TestMail
生成されたファイルのbuldメソッド内で、タイトルや本文を設定できます。
app/Mail/TestMail.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
use App\Models\User;
class TestMail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*/
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Get the message envelope.
*/
public function envelope(): Envelope
{
return new Envelope(
subject: '登録完了',
);
}
/**
* Get the message content definition.
*/
public function content(): Content
{
return new Content(
view: 'emails.test',
with: [
'user' => $this->user,
],
);
}
/**
* Get the attachments for the message.
*
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
*/
public function attachments(): array
{
return [];
}
}
STEP
Viewファイルの作成
上記で指定したemails.testファイルを作成します。
resources/views/emails/test.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome メール</title>
<style>
.login-button {
display: inline-block;
background-color: #4CAF50;
color: white;
padding: 10px 20px;
text-align: center;
text-decoration: none;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
border-radius: 5px;
}
</style>
</head>
<body>
<h1>ご登録ありがとうございます</h1>
<p>
{{ $user->name }} 様<br><br>
この度はサービスへの会員登録ありがとうございました。<br><br>
当サービスをぜひご活用いただければ幸いです。<br>
以下のボタンからログインしてください。<br><br>
<a href="https://example.com/login" class="login-button">ログイン</a><br><br>
<span>サポートチーム</span>
</p>
</body>
</html>
STEP
Mail送信
コントローラや他の場所からこのMailクラスを使って送信します。
Mail::to($email)->send(new TestMail($user));
コメント