2017-12-05 7 views
0

SMTP 및 Gmail을 통해 메일을 보내려 할 때이 오류가 발생했습니다.Gmail (SMTP)에 연결할 수 없습니다. SMTP (PHPMailer) - 인증서 확인 실패

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 C:\xampp\htdocs\portal\libraries\php_mailer\class.smtp.php on line 343 
2017-12-05 09:48:03 SMTP Error: Could not connect to SMTP host. 
2017-12-05 09:48:03 CLIENT -> SERVER: QUIT 
2017-12-05 09:48:03 SMTP ERROR: QUIT command failed: 

서버 주소는 https://gg-portal.com이며, SSL 구성 (온라인 체커를 통해 확인) 올바른 것 같다. 같은 명시된 SSL 설정이 잘 보이지만 PHPMailer 코드가

...

$mail = new PHPMailer(); 
$mail->isSMTP(); 
$mail->Host = "smtp.gmail.com"; 
$mail->SMTPAuth = true; 
$mail->Username = $this->_config["EmailUser"]; 
$mail->Password = $this->_config["EmailPass"]; 
$mail->SMTPSecure = "tls"; 
$mail->SMTPDebug = 1; 
$mail->Port = 587; 
$mail->FromName = $this->_config["Brand"]; 
$mail->From  = $this->_config["EmailFrom"]; 
$mail->AddCC("...emailAddress..."); 
$mail->Subject = "...subject..."; 
$mail->Body  = "...content..."; 
$mail->IsHTML(true); 
$mail->WordWrap = 50; 
if(!$mail->Send()) { 
    echo ' Message was not sent.'; 
    echo 'Mailer error: ' . $mail->ErrorInfo; 
} 

는 인증서 문제를 제안 설명서를 봤어. 문제를 다른 곳에서 들여다 보았지만 가장 인기있는 제안은 SSL을 우회하는 것입니다 (작동 함). 그러나 이렇게하지 않는 것이 좋습니다. ME 에 대한

'context' => [ 
    'ssl' => [ 
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
    ] 
] 
+0

메일을 보낼 때 SSL 문제는 사용자 사이트의 인증서와 관련이 없습니다. 그것은 Gmails의 인증서와 OS가 어떻게 검증하는지에 관한 것입니다. 가장 중요한 것은 서버 응답을 볼 수 있도록'SMTPDebug = 2'를 설정하는 것입니다. 그렇지 않으면 당신은 장님으로 날아갑니다. PHPMailer의 최신 버전을 사용하십시오. – Synchro

+0

닉, 제이슨의 대답을 확인하고 문제가 해결되면 받아 들여야합니다. –

+0

Checked, Jason의 대답은 해결 된 문제를 표시하는 데 지연이 있었음을 사과했습니다. –

답변

3

문제가 해결 나는 업데이트 된 루트 인증서 파일을 다운로드하고 그것을 내 php.ini 파일을 지정하여 내 윈도우 PHP 환경에서이 문제를 해결했습니다. gmail의 인증서가 아니라 문제가 Windows 서버 2012가 자동으로이 파일을 자동으로 업데이트하지 않기 때문에 오래된 루트 인증서 파일이있는 것으로 보입니다. cacert.pem을 여기에서 다운로드하십시오 : https://curl.haxx.se/docs/caextract.html. 그런 다음 php.ini 파일에서 openssl.dll이 설치되어 있다고 가정하고 다음 줄을 사용하십시오.

openssl.cafile = {서버의 파일 경로} \ cacert.pem.

해결되었으므로 더 이상 SSL/TLS 확인을 건너 뛰지 않아도됩니다. 궁극적으로 GPO 또는 WSUS를 사용하여 루트 인증서를 자동으로 업데이트하는 창이 필요합니다. https://serverfault.com/questions/541922/where-to-get-root-ca-certificates-for-windows-server-now-that-microsoft-no-longe

+0

여기에서 본 모든 게시물에서 유일한 수정 사항입니다. Jason 고맙습니다. –