PHPMailerでメールを送信しようとしたところ「SMTP Error: Could not connect to SMTP host.」のエラーが出ました。
今回はこの解消方法をお伝えいたします。


■環境

サーバーはAWSのEC2で構築した仮想サーバー。PHPMailerのバージョンは6.0.7、PHPは7.3.5です。

確認コマンド
# cat /etc/system-release
Amazon Linux AMI release 2018.03

# composer show -i
phpmailer/phpmailer v6.0.7 PHPMailer is a full-featured email creation and transfer class for PHP

# php -v
PHP 7.3.5 (cli) (built: May 24 2019 21:19:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.5, Copyright (c) 1998-2018 Zend Technologies


■PHPプログラムを実行すると下記の通りエラーで送信不可

6行目で「SMTP Error: Could not connect to SMTP host.」エラーが発生しています。
SERVER -> CLIENT: 220 example.com ESMTP Postfix
CLIENT -> SERVER: EHLO XXXX.XXXX.XXXX.XXXX
SERVER -> CLIENT: 250-example.com250-PIPELINING250-SIZE ...
CLIENT -> SERVER: STARTTLS
SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
SMTP Error: Could not connect to SMTP host.
CLIENT -> SERVER: QUIT

SMTP Error: Could not connect to SMTP host.
Message could not be sent. Mailer Error: SMTP Error: Could not connect to SMTP host.

■解決方法

下記をソース追加しただけで解決しました。
$mail->SMTPOptions = array(
    'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
    )
);


■完成したPHPのソースの全体

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//Load Composer's autoloader
require './vendor/autoload.php';
?>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-type">
<title>PHPMailer TEST</title>
</head>
<body>
<?php
mb_internal_encoding("UTF-8");

$mail = new PHPMailer(true);
try {
    $mail->SMTPDebug = 2;
    $mail->isSMTP();
    $mail->Host = 'example.com'; //SMTPサーバー
    $mail->SMTPAuth = true; //SMTP AuthをON
    $mail->Username = 'xxx@example.com'; //SMTP認証で使用するユーザー名
    $mail->Password = 'abc123'; //パスワード
    $mail->SMTPSecure = 'tls'; //TLS
    $mail->SMTPOptions = array(
        'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
        )
    );
    $mail->Port = 587; //ポート番号

    $mail->setFrom('aaa@example.com'); //メールの送信元
    $mail->addAddress('bbb@example.com'); //メールの送信先
    $mail->addReplyTo('ccc@example.com'); //メールの返信先

    //ISO-2022-JP
    $mail->Encoding = "7bit";
    $mail->CharSet = 'ISO-2022-JP';

    $mail->isHTML(true); //HTML形式
    //件名(日本語は文字化けするためMIMEでエンコード)
    $mail->Subject =  mb_encode_mimeheader('メール送信テスト');
    //メール本文
    $mailbody = 'HTMLメール<b>太字</b><p style="\'color:red;\'">赤色の文字</p>';
    //UTF-8にエンコード
    $mail->Body = mb_convert_encoding($mailbody, "JIS", "UTF-8");

    $mail->send(); //メール送信

    echo 'Success';
} catch (Exception $e) {
    echo 'Error: ', $mail->ErrorInfo;
}
?>
</body>
</html>