• 回答ありがとうござ
    います。 アドバイス通りに記述内容を変更してみました...
  • guest 
    回答ありがとうございます。
    アドバイス通りに記述内容を変更してみましたが、以下のような前回同様のエラーが出ました。

    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アドレスを記述するのが正しいのではと思うのですが、いかがでしょうか?
    回答 7

    chacha8888 
    講師からの回答
    色々と質疑応答のやり取りをしていたため、切り分けのため改めて整理と認識合わせをさせてください。
    認識が誤っていましたら、ご遠慮なくご指摘いただけますと幸いです。

    エラー問題が解決できない場合の切り分けや整理についても現場でやることがありますので、ご参考になれば幸いです。
    まず、出来ていることと出来ていないことについては以下の通りと認識しています。

    ■出来ていること
    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'),」という意味です。

    こちらでお試しいただき、結果をご連絡いただけますと幸いです。

    guest 
    アドバイスありがとうございます。

    ご指摘通りにsendmailの設定でメールを送ることができました。

    ここでもう1つ質問があります。

    受信したメールのFromが、From: Example<自分のGmailアドレス>
    になっています。

    Exampleはmail.phpに記述してあるnameのことだと思うのですが、それであれば<自分のGmailアドレス>の部分はmail.phpのaddressに記述してあるhello@example.comが表示されるはずだと認識しています。

    なぜFromに自分のGmailアドレスが表示されるのかがわかりません。

    宜しくお願い致します。

    chacha8888 
    講師からの回答
    ありがとうございます。

    -----
    Exampleはmail.phpに記述してあるnameのことだと思うのですが、それであれば<自分のGmailアドレス>の部分はmail.phpのaddressに記述してあるhello@example.comが表示されるはずだと認識しています。

    なぜFromに自分のGmailアドレスが表示されるのかがわかりません。
    -----

    よろしければ、mail.phpの内容についてご提示いただくことは可能でしょうか。
    特定可能な情報についてはマスクしていただけますと幸いです。

    よろしくお願いいたします。

    guest 
    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')

    上記のような設定になっております。

    chacha8888 
    講師からの回答
    設定内容についてご提示いただきましてありがとうございました。
    ファイル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

    chacha8888 
    講師からの回答
    以下のURLが途中で切れているため、追記します。

    【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

    guest 

    .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ファイルの変更を反映させています。





    chacha8888 
    講師からの回答

    前の問い合わせ内容を確認した限り、Laravelで作成したWEBアプリで、ブラウザ画面からメールを送信すると考えています。もし間違えていましたら、ご指摘いただけますと幸いです。


    ファイル「.env」でも「mail.php」にも記述がない場合、ご自身で作成されたメール送信関連のモジュールのどこかか、あるいはそれ以外の場所にあるかと思われます。


    よろしれければ、以下のURLを例としてメール送信機能で使用しているモジュール等をご提示いただけますでしょうか。合わせてメール送信の簡単な流れについてもご教示いただけますと幸いです。


    https://noumenon-th.net/programming/2020/05/16/mailable/">https://noumenon-th.net/progra...


    今考えられる可能性はどこかのモジュールに記述されていると考えています。よろしくお願いいたします。









    guest 

    コーチのおっしゃる通り、Laravelで作成したWEBアプリでブラウザ画面からメールを送信するという内容で合っています。


    具体的に話すと、Laravelの本番環境でパスワードリマインダーを実装したいため、メール送信機能が必要ということです。


    これまでのやり取りから、本番環境の.envファイルにgmailでの設定を記述し、パスワードリマインダーの機能自体は実装することができました。


    相変わらず受信メールのFrom部分には自分のgmailアドレスが表示されますが、gmailを使っての送信だとこれは仕方がなく、.envファイルのMAIL_FROM_NAMEをサービス名などに変更すれば自分のアドレスの前にサービス名が記載されるので、それで良いのではと考えました。


    違うレッスンの質問で確認しましたが、パスワードリマインダーなどのメール送信を実装するには、


    1.WEBサーバーにpostfixやsendmailをインストールする


    2.外部のメール送信サービスを利用する


    こちら2つが一般的であるとお答えされていました。


    私が選択したgmailを使ってのパスワードリマインダーは2のやり方だと思いますが、パスワードリマインダーの機能自体が実装できていれば、外部のメール送信サービスは何を選択しても問題ないでしょうか?

    chacha8888 
    講師からの回答

    ありがとうございます。


    これまでのやり取りから、本番環境の.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サーバとして利用する方法もあります。

    https://webukatu.com/assets/uploads/img/dc180b628459299cdef30f2569bc24f8.jpg" data-image="1">

    chacha8888 
    講師からの回答
    https://webukatu.com/assets/uploads/img/331812de3261fb0d2e2fa1c8ed2adda1.jpg" data-image="1">