前提・実現したいこと
お問い合わせフォーム作成中で、最後の送信完了しました。という言葉をブラウザに表示する所までいけたのですが、
Gmailからの送信がうまくできません。
Gmailはsmtpサーバーを使用
2段階認証プロセスはONにし
アプリパスワードも取得し.envにそのパスワードを使用しています
ご教示よろしくお願い致します。
該当のソースコード
.env
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=自分のユーザーネーム@gmail.com MAIL_PASSWORD=取得したアプリパスワード MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=自分のユーザーネーム@gmail.com MAIL_FROM_NAME=サイト名
config/mail.php
<?php return [ 'driver' => env('MAIL_DRIVER', 'smtp'), 'host' => env('MAIL_HOST', 'smtp.gmail.com'), 'port' => env('MAIL_PORT', 587), 'from' => [ 'address' => env('MAIL_FROM_ADDRESS'), 'name' => env('MAIL_FROM_NAME'), ], 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'sendmail' => '/usr/sbin/sendmail -bs', 'markdown' => [ 'theme' => 'default', 'paths' => [ resource_path('views/vendor/mail'), ], ], 'log_channel' => env('MAIL_LOG_CHANNEL'), ];
app/Http/controllers/ContactController
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Mail\ContactSendmail; use App\Contact_us; use App\Contact; use Illuminate\Support\Facades\Mail; class ContactController extends Controller { public function index() { \Debugbar::info("index"); return view('contacts.contact'); } public function create(Requrst $request) { $this->validate($request, Contact::$rules); $contact_us = new Contact_us(); $inputs3 = $request->all(); $contact_us->name = $request->name; $contact_us->email = $request->email; $contact_us->body = $request->body; $contact_us->fill($inputs3); $contact_us->save(); } public function confirm(Request $request) { \Debugbar::info("test"); $this->validate($request, [ "email" => "required", "name" => "required", "body" => "required" ]); $inputs3 = $request->all(); return view('contacts.confirm', ['inputs3' => $inputs3]); } public function complete(Request $request) { \Debugbar::info("re_test"); $this->validate($request, [ "email" => "required", "name" => "required", "body" => "required" ]); $action = $request->get('action', 'back'); $inputs3 = $request->except('action'); \Debugbar::info($inputs3); if($action === 'post') { \Mail::to($inputs3["email"])->send(new ContactSendmail($inputs3)); $request->session()->regenerateToken(); return view('contacts.complete'); } else { return redirect() ->route('contact') ->withInput($inputs3); } }
app/Mail/ContactSendmail.php
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; class ContactSendmail extends Mailable { use Queueable, SerializesModels; private $name; private $email; private $body; public function __construct($inputs3) { $this->name = $inputs3['name']; $this->email = $inputs3['email']; $this->body = $inputs3['body']; } public function build() { return $this ->from('自分のユーザーネーム@gmail.com') ->subject('自動送信メール') ->view('contacts.mail') ->with([ 'name' => $this->name, 'email' => $this->email, 'body' => $this->body ]); } }
resources/views/contacts/mail.blade.php
お問い合わせ内容を受け付けました<br> <br> ■お名前<br> {{!! $name !!}}<br> <br> ■メールアドレス<br> {{!! $email !!}}<br> <br> ■お問い合わせ内容<br> {{!! nl2br($body) !!}}<br>
resources/views/contacts/confirm.blade.php
@extends('layouts.layout') @section('title', 'お問い合わせ確認') @section('content') <form class="con-form" method="POST" action="{{ route('contact_complete') }}"> @csrf <label>お名前</label> {{ $inputs3['name'] }} <input name="name" type="hidden" value="{{ $inputs3['name']}}"> <label>メール</label> {{ $inputs3['email'] }} <input name="email" type="hidden" value="{{ $inputs3['email']}}"> <label>お問い合わせ内容</label> {{ $inputs3['body'] }} <input name="body" type="hidden" value="{{ $inputs3['body']}}"> <button type="submit" name="action" value="back" class="btn btn-primary">入力内容修正</button> <button type="submit" name="action" value="post" class="btn btn-default">この内容で問い合わせる</button> </form> @endsection
resources/views/contacts/complete.blade.php
@extends('layouts.layout') @section('title', 'お問い合わせ完了') @section('content') <h1>{{ __('送信完了しました') }}</h1> @endsection
web.php
Route::get('contact', 'ContactController@index')->name('contact'); Route::post('contact/confirm', 'ContactController@confirm')->name('contact_confirm'); Route::post('contact/complete', 'ContactController@complete')->name('contact_complete');
試したこと
gmailの2段階認証をオン、アプリパスワード取得しましたがメール送信する事ができませんでした。
teratailやgoogle検索で同様にGmailからの送信ができないサイトを参考にしましたが、できませんでした。
ryuujiさんのアドバイス検索で出てきたのに試せてなかったですm(__)m
ryuujiさんのGoogleアカウントの設定で「安全性の低いアプリからのアカウントへのアクセスを許可する」を有効にするの設定も行ってみたのですが、新たな長文エラーで
Failed to authenticate on SMTP server with username
が出ました。
それと他のユーザから「やってほしいことだけを記載した丸投げの質問」というご指摘を受けましたのでもう少し調べて試してみますm(__)m
回答1件
あなたの回答
tips
プレビュー