メモ > 技術 > フレームワーク: Laravel > GmailのSMTPでメール送信
GmailのSMTPでメール送信
GmailのSMTPでメールを送信したときのメモ。
専用のアプリパスワードを発行し、それを使ってメールを送信できる。
設定手順は Google.txt も参照。
[Laravel5]gmailが送信できない? : ラブサファリ
http://lovesafari.blog.jp/archives/21272100.html
以下はアプリパスワードについては触れられていないが、プログラムは参考になる。
Laravelでメール送信機能を実装する方法【Gmailを利用】
https://manablog.org/laravel-send-email/
■.envの設定
.env で以下のように設定する。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=Gmailアドレス
MAIL_PASSWORD=アプリパスワード
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=送信元アドレス
MAIL_FROM_NAME=送信者名
■ファイルの作成
/resources/views/emails/test.blade.php でメールの本文を定義する。
<p>$Test={{ $test }}</p>
/app/Http/Controllers/Admin/HomeController.php など適当なコントローラーに送信処理を書く。ファイル冒頭でMailクラスをuseし、コントローラー内に実際の送信処理も書く。
use Illuminate\Support\Facades\Mail;
$data = [ 'test' => 'テスト' ];
Mail::send('emails.test', $data, function($message){
$message->to('refirio.work@gmail.com')
->subject('ここがタイトルです');
});
exit('OK');
■送信確認
認証エラーが出る場合、Googleで2段階認証とアプリパスワードを設定しているか確認する。
(通常のログインパスワードとは別にアプリパスワードが必要。アプリパスワードの設定には2段階認証の設定が必要。)
これでメールが送信されたが、メールのFromが意図したアドレスにならない。
メールヘッダを確認すると、以下のように X-Google-Original-From に反映されていた。
Sender: "山野寛和" <refirio.work@gmail.com>
From: refirio@example.com
X-Google-Original-From: example@example.com
これはGmailを使う場合の仕様かも。
php - Laravel Sender or From not working as expected - Stack Overflow
https://stackoverflow.com/questions/39362131/laravel-sender-or-from-not-working-as-expected
■メール送信時に「SSL operation failed」のエラーになる
SwiftMailerでメールを送信しようとするとSSL operation failed with code 1. エラーが出る - ぃぐわ!まにあっくす
http://wigwamania.hatenablog.com/entry/2016/04/09/150000
上記の解説から少しコードが変わったようだが、
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php
このファイルを以下のように修正すると、Gmailでメール送信できるようになった。
258: $options = [];
+ $options['ssl']['verify_peer'] = false;
+ $options['ssl']['verify_peer_name'] = false;
259: if (!empty($this->params['sourceIp'])) {
260: $options['socket']['bindto'] = $this->params['sourceIp'].':0';
260: }