います。 アドバイス通りに記述内容を変更してみました...
認識が誤っていましたら、ご遠慮なくご指摘いただけますと幸いです。
エラー問題が解決できない場合の切り分けや整理についても現場でやることがありますので、ご参考になれば幸いです。
まず、出来ていることと出来ていないことについては以下の通りと認識しています。
■出来ていること
GmailのSMTPサーバ設定をするとメール送信をすることができる。
■出来ていないこと
ローカルのメールサーバ(※今回Laravelを導入したメールサーバ)から直接、宛先メールアドレスへメールが送信ができない。
■確認したいこと
Lavavelを介さず、phpのプログラムのみでメール送信を行うことができるかどうか。
以下のURLのサンプルソースコードでメール送信が可能かご確認ください。
https://webukatu.com/wordpress/blog/67/
現状の認識があっており、かつ、PHPのプログラムのみでメール送信ができる場合、PHPのメール送信機能で
設定して送信可能なのかどうかご確認いただけますでしょうか。
つまり、メール送信の設定は不要で、[.env]ファイルに「MAIL_DRIVER=sendmail」のみ記述、[mail.php]のドライバー設定には「 'driver' => env('MAIL_DRIVER', 'sendmail'),」という意味です。
こちらでお試しいただき、結果をご連絡いただけますと幸いです。
ご指摘通りにsendmailの設定でメールを送ることができました。
ここでもう1つ質問があります。
受信したメールのFromが、From: Example<自分のGmailアドレス>
になっています。
Exampleはmail.phpに記述してあるnameのことだと思うのですが、それであれば<自分のGmailアドレス>の部分はmail.phpのaddressに記述してあるhello@example.comが表示されるはずだと認識しています。
なぜFromに自分のGmailアドレスが表示されるのかがわかりません。
宜しくお願い致します。
-----
Exampleはmail.phpに記述してあるnameのことだと思うのですが、それであれば<自分のGmailアドレス>の部分はmail.phpのaddressに記述してあるhello@example.comが表示されるはずだと認識しています。
なぜFromに自分のGmailアドレスが表示されるのかがわかりません。
-----
→
よろしければ、mail.phpの内容についてご提示いただくことは可能でしょうか。
特定可能な情報についてはマスクしていただけますと幸いです。
よろしくお願いいたします。
'driver' => env('MAIL_DRIVER', 'smtp')
'host' => env('MAIL_HOST', 'localhost')
'port' => env('MAIL_PorT', 25)
'from' => [ 'address' => env('MAIL_FROM_ADRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME' , 'Example'),]
'encryption' -=> env('MAIL_ENCRYPTION', 'tls')
'username' => env('MAIL_USERNAME')
'password' => env('MAIL_PASSWorD')
'sendmail' => '/usr/sbin/sendmail -bs'
'markdown' => [ 'theme' => 'default',
'paths' => [ resoruce_path('views/vendor/mail'),],
]
'log_channel' => env('MAIL_LOG_CHANNEL')
上記のような設定になっております。
ファイルmail.phpの設定内容を確認しました限り、発信元のメールアドレスと名前が
以下となっているため、FromのメールアドレスはExample<hello@example.com>となるという点は相違はないと考えます。
=======
'from' => [ 'address' => env('MAIL_FROM_ADRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME' , 'Example'),]
=======
過去の質問対応から判断しますと、提示いただいたファイル[mail.php]の内容はおそらく初期設定のままの状態
に見受けられます。
また、「.env」ファイルでもメール送信設定は可能ですので、.envファイルでご自身のGmailのアドレスが設定されて
いないかご確認いただけますでしょうか。
意図しない結果となった場合、過去に変更した内容や変更したファイルの名前などを思い返すと、何らかの
ヒントがあるかもしれませんので、思い返すことをお勧めします。
よろしくお願いいたします。
■参考URL■
Laravelのmailableクラスでメール送信を行う[導入/入門編]
https://www.ritolab.com/entry/38
入門者のためのLaravel .envファイルの基礎と理解
https://reffect.co.jp/laravel/env-file-basic-understanding
【Laravel】.envファイルとconfigヘルパを知る
https://bonoponz.hatenablog.com/entry/2021/01/22/%E3%80%90Laravel%E3%80%91.env%E3%83%95%[…]%81%A8config%E9%96%A2%E6%95%B0%E3%82%92%E7%9F%A5%E3%82%8B
【Laravel】.envファイルとconfigヘルパを知る
https://bonoponz.hatenablog.com/entry/2021/01/22/%E3%80%90Laravel%E3%80%91.env%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8config%E9%96%A2%E6%95%B0%E3%82%92%E7%9F%A5%E3%82%8B
.envファイルの設定ですが、
MAIL_DRIVER=sendmail
MAIL_HOST=localhost
MAIL_PORT=25
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=hello@example.com
MAIL_FROM_NAME=Example
上記の設定となっており、自分のGmailアドレスの記述は無い状態です。
envファイル変更後は、php artisan config:cacheを実行し、envファイルの変更を反映させています。
前の問い合わせ内容を確認した限り、Laravelで作成したWEBアプリで、ブラウザ画面からメールを送信すると考えています。もし間違えていましたら、ご指摘いただけますと幸いです。
ファイル「.env」でも「mail.php」にも記述がない場合、ご自身で作成されたメール送信関連のモジュールのどこかか、あるいはそれ以外の場所にあるかと思われます。
よろしれければ、以下のURLを例としてメール送信機能で使用しているモジュール等をご提示いただけますでしょうか。合わせてメール送信の簡単な流れについてもご教示いただけますと幸いです。
https://noumenon-th.net/programming/2020/05/16/mailable/">https://noumenon-th.net/progra...
今考えられる可能性はどこかのモジュールに記述されていると考えています。よろしくお願いいたします。
コーチのおっしゃる通り、Laravelで作成したWEBアプリでブラウザ画面からメールを送信するという内容で合っています。
具体的に話すと、Laravelの本番環境でパスワードリマインダーを実装したいため、メール送信機能が必要ということです。
これまでのやり取りから、本番環境の.envファイルにgmailでの設定を記述し、パスワードリマインダーの機能自体は実装することができました。
相変わらず受信メールのFrom部分には自分のgmailアドレスが表示されますが、gmailを使っての送信だとこれは仕方がなく、.envファイルのMAIL_FROM_NAMEをサービス名などに変更すれば自分のアドレスの前にサービス名が記載されるので、それで良いのではと考えました。
違うレッスンの質問で確認しましたが、パスワードリマインダーなどのメール送信を実装するには、
1.WEBサーバーにpostfixやsendmailをインストールする
2.外部のメール送信サービスを利用する
こちら2つが一般的であるとお答えされていました。
私が選択したgmailを使ってのパスワードリマインダーは2のやり方だと思いますが、パスワードリマインダーの機能自体が実装できていれば、外部のメール送信サービスは何を選択しても問題ないでしょうか?
ありがとうございます。
これまでのやり取りから、本番環境の.envファイルにgmailでの設定を記述し、パスワードリマインダーの機能自体は実装することができました。</p>
<p>相変わらず受信メールのFrom部分には自分のgmailアドレスが表示されますが、gmailを使っての送信だとこれは仕方がなく、.envファイルのMAIL_FROM_NAMEをサービス名などに変更すれば自分のアドレスの前にサービス名が記載されるので、それで良いのではと考えました。
→
受信メールのFromにご自身のGmailのアドレスが表示されていることを踏まえますと、ファイル「.env」にGoogleのSMTPサーバを設定されていることが原因で表示されていると思われます。いかがでしょうか。
参考URL
https://www.faith-gear.jp/archives/554">https://www.faith-gear.jp/arch...
違うレッスンの質問で確認しましたが、パスワードリマインダーなどのメール送信を実装するには、
1.WEBサーバーにpostfixやsendmailをインストールする
2.外部のメール送信サービスを利用する
こちら2つが一般的であるとお答えされていました。
私が選択したgmailを使ってのパスワードリマインダーは2のやり方だと思いますが、パスワードリマインダーの機能自体が実装できていれば、外部のメール送信サービスは何を選択しても問題ないでしょうか?
→
はい、問題はありません。ただし、外部のメール送信サービスを利用せず、TCP25でメール送信をする場合は上限緩和申請が必要です。
外部のメール送信サービスを利用するパターンは、具体的には以下のような構成です。また、おっしゃる内容はよく使われているパターンです。実際に私が関わっている案件でも使われています。
外部のメール送信サービスはどのサービスでもほぼ同じ機能を提供していますので、問題はありません。実用例ではSendGridやMailPublisherといったメール配信サービスです。また、AWSではAmazon SESを使ってSESをSMTPサーバとして利用する方法もあります。
部活の学習一覧
インフラ部 Lesson 01 | インフラ部の最終ゴール
インフラ部 Lesson 02 | ITインフラとは何か?
インフラ部 Lesson 03 | インフラ構築・運用管理において必要な知識
インフラ部 Lesson 04 | OS編 その1
インフラ部 Lesson 05 | OS編 その2
インフラ部 Lesson 06 | ネットワーク編 その1
インフラ部 Lesson 07 | ネットワーク編 その2
インフラ部 Lesson 08 | ネットワーク編 その3
インフラ部 Lesson 09 | ネットワーク編 その4
インフラ部 Lesson 10 | ネットワーク編 その5
インフラ部 Lesson 11 | ネットワーク編 その6
インフラ部 Lesson 12 | ネットワーク編 その7
インフラ部 Lesson 13 | ネットワーク編 その8
インフラ部 Lesson 14 | DNS その1
インフラ部 Lesson 15 | DNS その2
インフラ部 Lesson 16 | Web
インフラ部 Lesson 17 | DB
インフラ部 Lesson 18 | ストレージ
インフラ部 Lesson 19 | メール
インフラ部 Lesson 20 | SSLサーバ証明書
インフラ部 Lesson 21 | VPS
インフラ部 Lesson 22 | AWSとは
インフラ部 Lesson 23 | AWS基盤構築前の事前準備と設計の流れについて その1
インフラ部 Lesson 24 | AWS基盤構築前の事前準備と設計の流れについて その2
インフラ部 Lesson 25 | AWS基盤構築前の事前準備と設計の流れについて その3
インフラ部 Lesson 26 | AWS基盤構築前の事前準備と設計の流れについて その4
インフラ部 Lesson 27 | AWS基盤インフラ構築(設計と構成図作成)
インフラ部 Lesson 28 | AWS基盤インフラ構築(ネットワーク設計・作成) その1
インフラ部 Lesson 29 | AWS基盤インフラ構築(ネットワーク設計・作成) その2
インフラ部 Lesson 30 | AWS基盤インフラ構築(ネットワーク設計・作成) その3
インフラ部 Lesson 31 | AWS基盤インフラ構築(Bastionサーバ) その1
インフラ部 Lesson 32 | AWS基盤インフラ構築(Bastionサーバ) その2
インフラ部 Lesson 33 | AWS基盤インフラ構築(Bastionサーバ) その3
インフラ部 Lesson 34 | AWS基盤インフラ構築(Bastionサーバ) その4
インフラ部 Lesson 35 | AWS基盤インフラ構築(Bastionサーバ) その5
インフラ部 Lesson 36 | AWS基盤インフラ構築(Bastionサーバ) その6
インフラ部 Lesson 37 | AWS基盤インフラ構築(Bastionサーバ) その7
インフラ部 Lesson 38 | AWS基盤インフラ構築(Webサーバ構築・設定) その1
インフラ部 Lesson 39 | AWS基盤インフラ構築(Webサーバ構築・設定) その2
インフラ部 Lesson40 | AWS基盤インフラ構築(Webサーバ構築・設定) その3
インフラ部 Lesson41 | AWS基盤インフラ構築(データベース構築・設定)
インフラ部 Lesson42 | AWS基盤インフラ構築(Route53、証明書取得、ALB作成とEC2との接続設定・接続確認) その1
インフラ部 Lesson43 | AWS基盤インフラ構築(Route53、証明書取得、ALB作成とEC2との接続設定・接続確認) その2
インフラ部 Lesson44 | AWS基盤インフラ構築(メールサーバの構築と設定) その1
インフラ部 Lesson45 | AWS基盤インフラ構築(メールサーバの構築と設定) その2
インフラ部 Lesson46 | AWS基盤インフラ構築(メールサーバの構築と設定) その3
インフラ部 Lesson47 | AWS基盤インフラ構築(メールサーバの構築と設定) その4
インフラ部 Lesson48 | AWS基盤インフラ構築(メールサーバの構築と設定) その5
インフラ部 Lesson49 | AWS基盤インフラ構築(メールサーバの構築と設定) その6
インフラ部 Lesson50 | AWS基盤インフラ構築(Laravelの環境構築)
インフラ部 Lesson51 | AWS基盤インフラ構築(S3構築・設定)
インフラ部 Lesson52 | AWS基盤インフラ構築(CloudFront構築・設定) その1
インフラ部 Lesson53 | AWS基盤インフラ構築(CloudFront構築・設定) その2
インフラ部 Lesson54 | AWS基盤インフラ構築(監視構築・設定) その1
インフラ部 Lesson55 | AWS基盤インフラ構築(監視構築・設定) その2
インフラ部 Lesson56 | AWS基盤インフラ構築(まとめ)
ご意見箱
アドバイス通りに記述内容を変更してみましたが、以下のような前回同様のエラーが出ました。
Connection could not be established with host localhost :stream_socket_client(): unable to connect to tcp://localhost:25 (Connection refused)
.envとmail.phpの記述は以下の通りです。
.envの記述
MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PorT=25
MAIL_USERNAME=null
MAIL_PASSWorD=null
MAIL_ENCRYPTION=tls
mail.phpの記述
'driver' => env('MAIL_DRIVER', 'smtp')
'host'=> env('MAIL_HOST', 'localhost')
'port'=>env('MAIL_PorT', 25)
個人的な予測なのですが、今回はawsのメールサーバーを使ってメール送信をしようと思っているので、MAIL_HOSTの部分にはlocalではなく、awsのメールサーバーのElastic IPアドレスを記述するのが正しいのではと思うのですが、いかがでしょうか?