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

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

ただいまの
回答率

87.92%

お問い合わせフォームを送信し、送信完了画面へ移る事はできるが Gmailから送信ができない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 601

score 28

前提・実現したいこと

お問い合わせフォーム作成中で、最後の送信完了しました。という言葉をブラウザに表示する所までいけたのですが、
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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ryuii

    2019/10/21 01:23

    Googleアカウントの設定で「安全性の低いアプリからのアカウントへのアクセスを許可する」を有効になっておりますでしょうか?

    キャンセル

  • jiro-

    2019/10/21 22:28

    Googleアカウントの設定で「安全性の低いアプリからのアカウントへのアクセスを許可する」を有効にし、アプリのパスワードを再取得するとメール送信する事ができました。
    ありがとうございました!

    キャンセル

回答 1

checkベストアンサー

0

送信に Gmail を使用するのであれば、OAuth 2.0 を使用した接続が適切かと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/21 22:10

    ご返信遅くなり申し訳ありませんm(__)m
    OAuth2.0というのがどういったものか、わからないので調べて試してみます。
    ありがとうございます。

    キャンセル

  • 2019/10/21 22:29

    OAuthを使うとセキュリティ面が上がりそうなので、調べて使えるようにしてみます。
    ご助言ありがとうございました!

    キャンセル

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

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • お問い合わせフォームを送信し、送信完了画面へ移る事はできるが Gmailから送信ができない