アゴ乗せ日記

適当なポジティブ日記

スポンサーリンク

【Laravel】PHPMailerでSMTPの接続確認

若手PHPMailerって送信サンプル結構見つかるんですけど、テスト接続の仕方がわからないです

ワイあったで


exampleはこちら

まずはLavelにインストール

 sudo composer require phpmailer/phpmailer

んでソースをちょっとLaravelちっくに

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

use Response;

class TestController extends Controller
{
    /**
     * ==================================================
     * テスト接続
     * ==================================================
     */
    public function test(Request $request) {
        $smtp = new SMTP;

        // 接続レベルのデバッグ出力を有効にする
        $smtp->do_debug = SMTP::DEBUG_CONNECTION;
        
        try {
            // SMTPサーバーに接続する
            if (!$smtp->connect($request->smtp_host, $request->smtp_port)) {
                return response()->json(['error' => '通信失敗'], 400);
            }
            // EHLOコマンド送信
            if (!$smtp->hello(gethostname())) {
                return response()->json(['error' => 'EHLOが失敗しました: ' . $smtp->getError()['error']], 400);
            }
            // サーバーが提供するESMTPサービスのリストを取得します
            $e = $smtp->getServerExtList();
            // サーバーがTLS暗号化を実行できる場合は、それを使用します
            if (is_array($e) && array_key_exists('STARTTLS', $e)) {
                $tlsok = $smtp->startTLS();
                if (!$tlsok) {
                    return response()->json(['error' => '暗号化を開始できませんでした: ' . $smtp->getError()['error']], 400);
                }
                // STARTTLSの後にEHLOを繰り返します
                if (!$smtp->hello(gethostname())) {
                    return response()->json(['error' => 'EHLO(2)が失敗しました: ' . $smtp->getError()['error']], 400);
                }
                // 新しい機能リストを取得します。以前はなかった場合、通常はAUTHが含まれます。
                $e = $smtp->getServerExtList();
            }
            // サーバーが認証をサポートしている場合は、それを行います(暗号化がない場合でも)
            if (is_array($e) && array_key_exists('AUTH', $e)) {
                if ($smtp->authenticate($request->smtp_user, $request->smtp_password)) {
                    return response()->json(['message' => '接続済み!'], 200);
                } else {
                    return response()->json(['error' => '認証に失敗しました: ' . $smtp->getError()['error']], 400);
                }
            }
        } catch (Exception $e) {
            return response()->json(['error' => '$e->getMessage()'], 400);
        }

        $smtp->quit();
    }

}

結果

成功時

f:id:agonosetaro:20200306012205p:plain

失敗時

f:id:agonosetaro:20200306012210p:plain

おわり

以上!!

スポンサーリンク