[Laravel]メール送信機能を使う時のConnection could not be established with host smtp.mailtrap.io :stream_socket_client(): というエラー
解決したいこと
[Laravel]メール送信機能を使う時のConnection could not be established with host smtp.mailtrap.io :stream_socket_client(): : unable to connect to tcp://smtp.mailtrap.io:2525 (Operation timed out)
例)
LaravelでECサイトをつくっています。
メール送信機能を作るためににこのサイト(https://note.com/mukae9/n/n103587d08ef2)
を参考にしました。
購入画面から購入ボタンを押すとメールが送られるはずなのですが、エラーが出ます。
発生している問題・エラー
Connection could not be established with host smtp.mailtrap.io :stream_socket_client(): unable to connect to tcp://smtp.mailtrap.io:2525 (Operation timed out)
というエラーが出ています。
Mailtrapを使いメールがLaravelから送信されているかどうかを確認していますが、メールは送信されずコネクションがつながっていないようです。
Mailtrapのアカウントを作り、Laravel7+でのenv情報をvi.envで編集して更新したのに関わらずうまく接続されていません。
ファイル一覧はこちらです。
該当するソースコード
メールの送信機能を司るファイル
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class Thanks extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($mail_data) //編集
{
$this->mail_data = $mail_data; //追記
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->markdown('mails.thanks',$this->mail_data) //編集
->subject('Larashopでのご購入ありがとうございます'); //追記
}
}
メールの本文が記載されるファイルです
@component('mail::message')
この度はLarashopでのご購入ありがとうございます。<br>
お客様が購入した商品は<br>
@foreach ($checkout_items as $item)
・{{ $item->product->name }}|{{ $item->product->price }}円
<br>
@endforeach
となります。<br>
下記の決済画面より決済を完了させてください。<br>
@component('mail::button', ['url' => ''])
決済画面へ
@endcomponent
<br>
{{ config('app.name') }}
@endcomponent
自分で試したこと
envファイルを確認したところ、元からmail関連の設定が書いてあったので消して上書きしておきました。
もう一個質問があり、
public function checkout(Request $request,Cart $cart)
{
$user = Auth::user();
$mail_data['user']=$user->name; //追記
$mail_data['checkout_items']=$cart->checkoutCart(); //編集
Mail::to($user->email)->send(new Thanks($mail_data));//編集
return view('checkout');
}
Cart model
public function checkoutCart()
{
$user_id = Auth::id();
$checkout_items=$this->where('user_id', $user_id)->get();
$this->where('user_id', $user_id)->delete();
return $checkout_items;
}
Cartモデルには商品のidとuserid等が入っており、商品情報はないのでthnaks.blade.phpではitem->product->nameと書いてproductメソッドを使わないとproductの中の情報を引き継げません。(ただ、checkout_itemsにproductメソッドを使えばproductの情報を引き出せるのか?)
CartのcheckoutCart関数内で$checkout_items=$this->where('user_id', $user_id)->get();ではなく
$checkout_items=$this->where('user_id', $user_id)->product->get();
をしないといけませんか?