@ohrvgusl

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPMailer Ver.6.3.0にてメール送信時「Mailer Error: SMTP connect() failed.」エラーとなり、送信できない。

解決したいこと

ここに解決したい内容を記載してください。

PHPMailerを用いて、php上からメールを送信するシステムを作成しています。
メール送信時にSMTPエラーが発生しました。
解決方法を教えて頂きたいです・

発生している問題・エラー

●出ているエラーメッセージ
Message was not sent
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

該当するソースコード

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<?php
  // Phpmailerの読み込み
  require_once ( './PHPMailer/src/PHPMailer.php' );
  require_once ( './PHPMailer/src/SMTP.php' );
  require_once ( './PHPMailer/src/POP3.php' );
  require_once ( './PHPMailer/src/Exception.php' );
  require_once ( './PHPMailer/src/OAuth.php' );

  $to = $_POST['to'];
  $subject = $_POST['subject'];
  $body = $_POST['body'];
  $headers = 'From:from@example.com'; //差出人

  // 外部SMTPサーバーのホスト名
  $smtp_host = "ssl://smtp.gmail.com";

  // 外部SMTPのポート番号
  $smtp_port = "587";

  // 外部SMTPに接続するユーザー名
  $smtp_user = "hogehoge@hogehoge.com";

  // 外部SMTPに接続するパスワード
  $smtp_password = "*********";

// Phpmailerを使ってメールを送信する関数の呼び出し
$res = phpmailersend ( $to, $subject, $body, $fromname, $fromaddress, $ccadress, $bccadress );

  echo $res;

// SMTPを使ってメール送信関数
function phpmailersend ( $to, $subject, $body, $fromname, $fromaddress, $ccadress="", $bccadress="" ){

global $smtp_host, $smtp_port, $smtp_user, $smtp_password;

  $to_array  = explode ( ',', preg_replace ( '/\s/', '', $to  ) );
  $cc_array  = explode ( ',', preg_replace ( '/\s/', '', $ccadress  ) );
  $bcc_array = explode ( ',', preg_replace ( '/\s/', '', $bccadress ) );

  $mailer = new PHPMailer\PHPMailer\PHPMailer();

  $mailer -> CharSet = "iso-2022-jp";
  $mailer -> Encoding = "7bit";

  $mailer -> IsSMTP();
  $mailer -> Host = $smtp_host . ":" . $smtp_port;
  $mailer -> SMTPAuth = TRUE;
  $mailer -> Username = $smtp_user;        // Gmailのアカウント名
  $mailer -> Password = $smtp_password;    // Gmailのパスワード
  $mailer -> From     = $fromaddress;      // Fromのメールアドレス
  $mailer -> FromName = mb_encode_mimeheader ( mb_convert_encoding ( $fromname, "JIS", "UTF-8" ) );
  $mailer -> Subject  = mb_encode_mimeheader ( mb_convert_encoding ( $subject, "JIS", "UTF-8" ) );
  $mailer -> Body     = mb_convert_encoding ( $body, "JIS", "UTF-8" );
  foreach ( $to_array as $to ) {
    $mailer -> AddAddress ( $to );         // TO
  }
  foreach ( $cc_array as $cc ) {
    $mailer -> AddCC  ( $cc );             // CC
  }
  foreach ( $bcc_array as $bcc ) {
    $mailer -> AddBCC ( $bcc );            // BCC
  }

  if( !$mailer -> Send() ){
    $message  = "Message was not sent<br/ >";
    $message .= "Mailer Error: " . $mailer->ErrorInfo;
  } else {
    $message  = "Message has been sent";
  }
  return $message;

}

  mb_language("Japanese");
  mb_internal_encoding("UTF-8");

?>
</body>
</html>

自分で試したこと

Googleアカウントページ上で「安全性の低いアプリの許可: 有効」をONにした。
https://www.google.com/settings/security/lesssecureapps

PHPMailerはバージョンが古いと正常に動作しないという説明を見たので最新版に変更した。
(2021年3月9日現在Ver.6.3.0)

0 likes

2Answer

まずはエラーメッセージのURLがトラブルシューティングなので、それを確認してください。

"SMTP Error: Could not connect to SMTP host."
「SMTPエラー:SMTPホストに接続できませんでした。」

こちらの項目が該当すると思います。

SMTP connect() failed というエラーメッセージからも、
接続情報に問題があるか、ネットワークの問題等でSMTPサーバに接続できていないのだと思います。

トラブルシューティングに原因を診断するためのいくつかの手法が記載されています。

0Like

Comments

  1. @ohrvgusl

    Questioner

    ご回答ありがとうございます。

    下記のトラブルシューティングページ確認しました。
    https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

    「GoDaddy」
    →未使用の為スルー

    「DNS failures」
    →dig +short smtp.gmail.comというコマンドをターミナルに入力しその後gmail-smtp-msa.l.google.com.というコマンドを入力すると、command not foundとなりました。

    「Check it's there at all」
    →実行結果がずっと出てきたので、DNSに問題はないと思われます。

@blue32a

別の記事を参考にして一からコードを書き直した所、無事に送信できました。
ご回答頂きありがとうございました。

0Like

Your answer might help someone💌