質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1151閲覧

お問い合わせ通知メールが届かない。Laravel6 mailable さくらサーバー。

tkm0604

総合スコア552

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2022/04/02 05:35

編集2022/04/02 05:44

Laravel6、docker、Macでアプリの開発を行なっています。
メールのサーバーは、さくらのレンタルサーバーを使用しております。

mailableを使って、お問い合わせフォームの内容が管理者へ送られる様にしたいのですが、お問い合わせフォームを送信したところ。

「Connection could not be established with host :メールサーバのホスト名 :stream_socket_client(): php_network_getaddresses: getaddrinfo failed: Name or service not known」

というエラーになり、お問い合わせフォームの内容が管理者へ送られません。
お問い合わせ内容のDBへの保存はできています。

.envファイルは以下の様に書いています。

MAIL_DRIVER=smtp MAIL_HOST=メールサーバのホスト名 MAIL_PORT=587 #smtpを使用する為、"587"を設定する。。 MAIL_USERNAME=送信先のメールアドレス MAIL_PASSWORD=送信先のメールアドレスに接続する為のパスワード MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=Fromアドレスの指定 MAIL_FROM_NAME="${APP_NAME}" MAIL_ADMIN=お問い合わせメールがあった時、管理者側に通知する時のメールアドレス

お問い合わせフォームのcreate / storeのメソッド コントローラー側は以下です。

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Contact; 7use Illuminate\Support\Facades\Mail; 8use App\Mail\ContactForm; 9 10class ContactController extends Controller 11{ 12 public function create(){ 13 return view('contact.create'); 14 } 15 16 public function store(Request $request) 17 { 18 $inputs=request()->validate([ 19 'title'=>'required|max:255', 20 'email'=>'required|max:255', 21 'body'=>'required', 22 ]); 23 24 Contact::create($inputs); 25 26 Mail::to(config('mail.admin'))->send(new ContactForm($inputs)); 27 Mail::to($inputs['email'])->send(new ContactForm($inputs)); 28 29 return back()->with('message','メールを送信しました。'); 30 } 31} 32

ルート設定 we.phpは以下です。

PHP

1Route::get('/contact/create','ContactController@create')->name('contact.create'); 2Route::post('/contact/store','ContactController@store')->name('contact.store'); 3

モデルファイルは以下です。

PHP

1<?php 2 3namespace App\Mail; 4 5use Illuminate\Bus\Queueable; 6use Illuminate\Contracts\Queue\ShouldQueue; 7use Illuminate\Mail\Mailable; 8use Illuminate\Queue\SerializesModels; 9 10class ContactForm extends Mailable 11{ 12 use Queueable, SerializesModels; 13 14 /** 15 * Create a new message instance. 16 * 17 * @return void 18 */ 19 public function __construct($inputs) 20 { 21 $this->inputs = $inputs; 22 } 23 24 /** 25 * Build the message. 26 * 27 * @return $this 28 */ 29 public function build() 30 { 31 // メールを送信する際にcontact/mail.blade.phpを使ってメール文面を作成する、このときにinputsを利用する 32 return $this->view('contact.mail')->with(['inputs' => $this->inputs]) 33 ->subject('お問い合わせを受け付けました'); 34 } 35} 36

なぜ問い合わせのメールが管理者に送られずにエラーになるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2022/04/02 06:12

エラー内容を見るに、メールサーバが見つけられないように見えるのですが、最初にその辺は調べましたでしょうか? コンテナの中に入って「nslookup メールサーバのホスト名」を叩いてみるとか。 参考) https://syachiku.net/docker-install-ping/
tkm0604

2022/04/02 07:40

コメントありがとうございます。 メールサーバー用のコンテナも必要だったんですね、、、 docker-compose.yml に以下を追記し、コンテナを作成 mail: image: mailhog/mailhog ports: - 8025:8025 .envファイルを以下に修正。 MAIL_HOST=mail MAIL_PORT=1025 MAIL_FROM_ADDRESS=info@example.com php artisan config:clear を実行。 再度、お問い合わせフォームから送信したのですが、エラーは変わらず Connection could not be established with host :ホスト名 :stream_socket_client(): php_network_getaddresses: getaddrinfo failed: Name or service not known です。 メールコンテナは立ち上がっています。 メールコンテナ内でnslookup ホスト名 を叩くと、以下のメッセージが返ってきました。 Server: 127.0.0.11 Address: 127.0.0.11:53 Non-authoritative answer: Non-authoritative answer: Name: mail Address: 172.28.0.2
CHERRY

2022/04/03 05:52 編集

Laravel のコンテナから、インターネット経由して、.env で指定した「メールサーバ」に接続できますか? Laravel のコンテナで、  「dig メールサーバー名」でメールサーバの IP アドレスは取得できますか? 次に「ping メールサーバー名」で、メールサーバから反応ありますか?
guest

回答1

0

自己解決

.envのMAIL_HOST= XXXX
の名前が間違えておりました。。。。

docker-compose.ymlで

services: mailhog: image: mailhog/mailhog ports: - 8025:8025

としていたので.envのMAIL_HOST= mailhog 
としていました。

しかし、dockerのコンテナ名を確認するとmembers_app_mailhog_1 となっており、members_app_mailhog_1を.envのMAIL_HOST=members_app_mailhog_1 とするとmailhog動作しました。

投稿2022/04/05 08:28

tkm0604

総合スコア552

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問