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>
コメント