自己署名証明書を持つメールサーバーからメールを送信する必要があるという問題が発生しました。エラーは次のとおりです。
PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in class.smtp.php on line 327.
誰かが同様の何かに遭遇しましたか?
編集:
また、stream_context params(params: SSL context options )を設定しようとしました:
$options['ssl']['verify_peer'] = false;
$options['ssl']['verify_peer_name'] = false;
$options['ssl']['allow_self_signed'] = true;
運はありませんが、上記のエラーと同じエラーで失敗します。
ありがとう。
PHP 5.6ではSSL証明書の検証が導入されているため、設定が破損していると、このエラーで失敗します。 SSLを修正する必要がありますが、証明書を検証しないようにSMTPOptions
プロパティを設定することにより、以前の動作に戻すことができます。
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
ライブラリを編集すると、ライブラリのポイント全体が無効になります。Kafの答えが示すように変更すると、アップグレード時にコードが破損します。本当に、それをしないでください。
編集者注:SSL検証を無効にすると、セキュリティへの影響があります。SSL/HTTPS接続の信頼性を検証しないと、悪意のある攻撃者は信頼できるエンドポイント(GitHubや他のリモートGitホストなど)になりすますことができ、あなたは 中間者攻撃 。 これを解決策として使用する前に、セキュリティの問題を完全に理解してください。
私は同じ問題を抱えています。そこで、238行目のclass.smtp.phpファイルを変更しました。
public function connect($Host, $port = null, $timeout = 30, $options = array()) {
if (count($options) == 0) {
$options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
}
今では正常に動作します!
編集者注:SSL検証を無効にすると、セキュリティへの影響があります。SSL/HTTPS接続の信頼性を検証しないと、悪意のある攻撃者は信頼できるエンドポイント(GitHubや他のリモートGitホストなど)になりすますことができ、あなたは 中間者攻撃 。 これを解決策として使用する前に、セキュリティの問題を完全に理解してください。
同じ問題がありました。私のPostfix設定には中間体とルート証明書の設定が欠けていることがわかりました:
smtpd_tls_CAfile=/etc/ssl/certs/intermediate-root-bundle.crt
このPostfix構成はOutlookおよびThunderbirdで長年機能していましたが、PHPはより厳しく、SSLチェックに失敗しました。
したがって、PHPMailerをハッキングしたくなるかもしれませんが、しないでください。根本的な問題を修正してください。
私はKafのソリューションを試してそれが機能するまで何日も修正を探していたので、2セントを入れたかっただけです!ありがとう@Kaf
とにかく...私にとって、PHPMailerはPHPをPHP5.6にアップグレードすることを決定するまでは正常に動作していました。
PHP 5.6でSSLを開くために変更が行われました。公式ドキュメントは次のとおりです。
http://php.net/manual/en/migration56.openssl.php
ドキュメントから、verify_peerおよびverify_peer_nameをfalse
したがって、Kafの答えに従ってください。
編集者のメモ:また、この文書は推奨されていません! SSL検証を無効にすると、セキュリティに影響があります。SSL/HTTPS接続の信頼性を検証しないと、悪意のある攻撃者は信頼できるエンドポイント(GitHubや他のリモートGitホスト)、および Man-in-the-Middle攻撃 に対して脆弱になります。 これをソリューションとして使用する前に、セキュリティの問題を完全に理解してください。