LaravelでWebサービスを作っています。 仮登録で、メールに誘導してから本登録をする導線を作ろうとして大分てこずりました。
一連の流れは、Quitaでの投稿を参考にさせて頂いております。 ※ 幾つか修正をしつつ参考にさせて頂いております。 https://qiita.com/nitaking/items/588a645968efcac6d37a
今回紹介するのは、メール送信システムとしてYahooメールを使う方法です。 (記事通りに、 mailtrap を活用する方には不要な内容です。)
ざっくりとした流れは、下記です。
1:Yahooアドレスを用意 2:Yahooでの設定を有効にする。※Yahooダイレクトオファーへの登録も必要 3:Laravelで.env に情報を反映 4:Laravelで config/mail.phpの情報を変更 5:必要に応じて、キャッシュ情報のclear [追記]6:Yahooに制限をかけてブロックされました。
1:Yahooアドレスを用意
これは言わずもがなですね。準備してください。 重要なことは、 メール送信設定をする際に、パスワードの登録が必要なのでパスワードを発行してください。 最近は仕様が変更したのか、SMSでの番号認証で、パスワードでの登録を省いてる仕様でした。なので、アカウントを作成した後に、パスワードの作成をして下さい。(謎の二度手間ですね。)
パスワードの作成方法は、 登録情報 > ログインとセキュリティ > パスワードの変更
https://accounts.yahoo.co.jp/profile?.src=ym&.done=https://mail.yahoo.co.jp/¤t=security
2:Yahooでの設定を有効にする。※Yahooダイレクトオファーへの登録も必要
外部のシステム(今回は、Laravel)を利用してYahooメールシステムから、メール送信する場合には幾つかの設定を完了しておく必要があります。
「IMAP」「POP」「SMTP」をそれぞれ「有効にする」を選択します。
Yahoo公式サイトに掲載されている情報に従って、メール設定から 「IMAP」「POP」「SMTP」が有効になっているのかを確認してください。有効でない場合には、変更をして下さい。
https://knowledge.support.yahoo-net.jp/PccMail/s/article/H000007321
Yahoo!ダイレクトオファーの登録
これ必要性は若干謎だと思っているのですが、Yahoo!ダイレクトオファーの登録が必要なようです。
Yahoo!ダイレクトオファーは、Yahoo! JAPANまたは提携先企業から、新商品、各種セール、お買い得情報などをお知らせするサービスです。
https://support.yahoo-net.jp/PccDirect/s/article/H000011064
必要とのことなので、登録しておきましょう。 設定変更は、下記からいけます。
https://direct.yahoo.co.jp/config/deliver?.src=help
3:Laravelで.env に情報を反映
Laravelに移って、.envの設定をしていきましょう。 ここでの設定が、理解が足らずエラーに苦しみました。 .envで設定されるべき内容が何かを正しく理解して、今回使うYahooのシステムを利用するためには、何が必要なのかを判断しましょう。という話です。
Yahooが指定している情報を参考にしてください。
https://knowledge.support.yahoo-net.jp/PccMail/s/article/H000011473
送信の際に気を付けるべき項目は下記です。
送信メールの通信方式 SSL
送信メール(SMTP)サーバー smtp.mail.yahoo.co.jp
SMTPサーバのポート番号 465
このyahooのルールを参考に .envで設定されるべき項目は下記です。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mail.yahoo.co.jp
MAIL_PORT= 465
MAIL_USERNAME=<Yahooのユーザー名>
MAIL_PASSWORD=<Yahooのパスワード>
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=<Yahooのユーザー名>@yahoo.co.jp
MAIL_FROM_NAME=<好きなNameを設定>
4:Laravelで config/mail.phpの情報を変更
.env に情報を反映でOKかなと思っていましたが 下記、エラー分が発生しました。
Connection to tcp://smtp.mail.yahoo.com:465 Timed Out
色々と調べていくと、下記にたどり着きました。
https://stackoverflow.com/questions/38341424/connection-to-tcp-smtp-mail-yahoo-com465-timed-out/38361849
どうやら、config/mail.phpの設定を一部変更する必要があるとか。 (この設定をして、エラーが消えましたが、もしかすると .envでMAIL_ENCRYPTION=sslを設定するだけでOKかもしれないです。)
5:必要に応じて、キャッシュ情報のclear
.envの情報を変更するとすぐに情報が反映されずに、データがキャッシュに残ってしまう場合があります。その際には、キャッシュをクリアしてあげましょう。
ターミナル(コマンドプロンプト)にて、下記を実行してあげてください。
php artisan cache:clear
php artisan config:clear
[追記]6:Yahooに制限をかけてブロックされました。
上記のように、Yahooで登録して5件ほどメールの送信をしていたところ、下記エラーがでました。
Expected response code 250 but got code "521", with message "521 smtp.mail.yahoo.co.jp closing transmission channel. User is over the limit for messages allowed to be sent in a single day. "
色々と調べていくと、Yahoo側で制限をかけているようです。
これは、Yahooのアドレスを使って送信をするのは得策ではないかもしれないですね…