web-dev-qa-db-ja.com

PHPMailer:SMTPエラー:SMTPホストに接続できませんでした

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

サーバー名:mail.exampleserver.com
ポート:587
ユーザー名:[email protected]
セキュア認証:いいえ
接続セキュリティ:STARTTLS

PHPMailerを使用した前回のプロジェクトで、これらをサーバーと比較しました。

サーバー名:mail.exampleserver2.com
ポート:465
ユーザー名:[email protected]
セキュア認証:いいえ
接続セキュリティ: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

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

44
Ilian Andreev

この質問はグーグルでよく出てくるので、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(以降)で機能するはずです。

注:明らかに、またそのウィキで示唆されているように、これは一時的な解決策です!

これに対する正しい修正は、無効な、誤って設定された、または自己署名証明書を適切な証明書に置き換えることです

86
Marten Koetsier

私の場合、PHPでSSLがサポートされていなかったため、このエラーが発生しました。

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

$mail->SMTPDebug = 1;もこの解決策を示唆しました。

2017年に更新

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

48
wessel

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

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

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

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

// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';
12
Viper_Sb

私は同じ問題を抱えていましたが、PHPMailerはサーバーがSTARTTLSをサポートしていることを認識したため、暗号化された接続に接続を自動的にアップグレードしようとしました。私のメールサーバーは、ドメインファイアウォールの背後にあるネットワーク内のWebサーバーと同じサブネット上にあるため、暗号化の使用についてはあまり心配していません(さらに、生成された電子メールには機密データが含まれていません)。

したがって、先に行ってやったことは、class.phpmailer.phpファイルでSMTPAutoTLSをfalseに変更することでした。

/**
 * Whether to enable TLS encryption automatically if a server supports it,
 * even if `SMTPSecure` is not set to 'tls'.
 * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
 * @var boolean
 */
public $SMTPAutoTLS = false;
6
Sina Motamedi

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

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

6
Jasper

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

$mail->SMTPSecure = "ssl";  
$mail->Host='smtp.gmail.com';  
$mail->Port='465';   
$mail->Username   = '[email protected]'; // 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;   
4
Ronan Dejhero

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

$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('[email protected]', '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();
2
Dumitru Boaghi
$mail->SMTPDebug = 2; // to see exactly what's the issue

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

$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
1
Martin Zvarík

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

0
David

CPANELの場合、「メールIDを登録する」オプションがあり、電子メールアドレスを追加し、30分後には単純なphpメール機能で正常に動作します。

0
Dinesh Gurjar

これはよくあるエラーなので、トラブルシューティングについて PHPMailer Wiki をチェックしてください。

また、これは私のために働いた

$mailer->Port = '587';
0
Francis Sunday