56

私はいくつかのプロジェクトで PHPMailer を使用しましたが、今は行き詰まっています。それは私にエラーを与えます:
SMTP エラー: SMTP ホストに接続できませんでした。
Thunderbird からメールを送信してみましたが、うまくいきました。ただし、PHPMailer 経由ではありません... Thunderbird の設定は次のとおりです。

サーバー名: mail.exampleserver.com
ポート: 587
ユーザー名: user@exampleserver.com
安全な認証: いいえ
接続セキュリティ: STARTTLS

PHPMailer を使用した最後のプロジェクトでこれらをサーバーと比較したところ、次のようになりました。

サーバー名: mail.exampleserver2.com
ポート: 465
ユーザー名: user@exampleserver2.com
安全な認証: いいえ
接続セキュリティ: SSL/TLS

私のphpコードは次のとおりです。

 $mail = new PHPMailer();
 $mail->IsSMTP(); // send via SMTP
 $mail->Host = SMTP_HOST; // SMTP servers
 $mail->Port = SMTP_PORT; // SMTP servers
 $mail->SMTPAuth = true; // turn on SMTP authentication
 $mail->Username = SMTP_USER; // SMTP username
 $mail->Password = SMTP_PASSWORD; // SMTP password
 $mail->From = MAIL_SYSTEM;
 $mail->FromName = MAIL_SYSTEM_NAME;
 $mail->AddAddress($aSecuredGetRequest['email']);
 $mail->IsHTML(true); // send as HTML

どこが間違っていますか?

4

12 に答える 12

123

この質問は Google で頻繁に表示されるため、PHP をバージョン 5.6 (より厳格な SSL 動作) にアップグレードした場合の解決策をここで共有したいと思います。

PHPMailer wiki には、これに関するセクションがあります。

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

推奨される回避策は、次のコードを含めることです。

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

これは、PHPMailer 5.2.10 (およびそれ以降) で機能するはずです。

注:明らかに、またその wiki で提案されているように、これは一時的な解決策である必要があります。

これに対する正しい修正は、無効な証明書、不適切な構成の証明書、または自己署名証明書を適切な証明書に置き換えることです。

于 2016-04-04T14:32:56.127 に答える
49

私の場合、このエラーが発生したのは PHP での SSL サポートの欠如でした。

だから私はextension=php_openssl.dllを有効にしました

$mail->SMTPDebug = 1;もこの解決策をほのめかしました。

2017年更新

$mail->SMTPDebug = 2;、参照: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output

于 2011-04-18T22:57:45.087 に答える
12

あなたの問題はおそらくこれです

接続セキュリティ: STARTTLS 接続セキュリティ: SSL/TLS

これらは 2 つの異なるプロトコルです。正しいプロトコルを使用していますか? Thunderbird で使用しているプロトコルを使用する必要があります。

変数を設定してみてください:

// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';
于 2010-08-13T15:41:13.957 に答える
6

同様の問題があり、安全なピアの検証を許可するように設定する必要があるのはopenssl.cafile構成ディレクティブであることがわかりました。http://curl.haxx.se/docs/caextract.htmlphp.iniで取得できるような認証局ファイルの場所に設定するだけです。

このディレクティブは PHP 5.6 の時点で新しく追加されたため、PHP 5.5 からアップグレードするときに不意を突かれました。

于 2015-06-16T15:55:26.440 に答える
5

次のコードは私のために働いた:

$mail = new PHPMailer(true);

$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted

$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
$mail->isHTML(true);// Set email format to HTML

$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password

$mail->setFrom('example@mail.com', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email


$mail->send();
于 2018-06-27T13:54:28.843 に答える
4

mail.exampleserver.com は存在しますか ??? 、次のコードを試してみない場合 (gmail アカウントが必要です)

$mail->SMTPSecure = "ssl";  
$mail->Host='smtp.gmail.com';  
$mail->Port='465';   
$mail->Username   = 'you@gmail.com'; // SMTP account username
$mail->Password   = 'your gmail password';  
$mail->SMTPKeepAlive = true;  
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP  
$mail->SMTPAuth   = true;                  // enable SMTP authentication  
$mail->CharSet = 'utf-8';  
$mail->SMTPDebug  = 0;   
于 2010-12-27T16:19:49.870 に答える
4
$mail->SMTPDebug = 2; // to see exactly what's the issue

私の場合、これは役に立ちました:

$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
于 2019-01-28T06:09:53.160 に答える
0

同様の問題がありました。SSL接続を管理する準備ができていないPHPMailerバージョン1.72をインストールしました。最新バージョンにアップグレードすると問題が解決しました。

于 2012-05-22T12:49:31.833 に答える