Microsoft Azure에서 PHP 웹 앱으로 PHPMailer를 사용하고 있는데 얼마 전부터 메일 전송이 안 되고 있어서 확인해봤다.
메일 서버는 smtp.gmail.com을 사용하고 SMTP로 TLS를 이용해서 보안 전송하고 있다. 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
검색을 해보니 PHPMailer Troubleshooting 페이지에서 원인은 서버 인증서에 문제가 있거나(gmail이라서 이건 아님) ISP에서 서버를 리디렉트하거나 PHP 서버 설정의 CA 인증서에 문제가 있는 경우라고 알려 준다. CA 인증서에 문제가 있는 경우 다음 방법으로 해결이 가능하다고 한다.
- 최신 CA 인증서를 다운로드하고 php.ini 파일에서 다운로드한 CA 인증서 위치를 지정한다.
- 안전하지 않고 권장하지 않는 방법이지만 인증서 체크를 해제할 수 있다.
문제는 Azure에서 php.ini 파일을 수정하기 어렵고 .user.ini 파일을 사용할 수 있다고 하지만 CA 인증서의 절대 경로가 유지 되는지 확신할 수가 없다. 그래서 PHPMailer의 SSL 옵션에 cafile 경로를 추가해서 해결했다.
$mail->SMTPOptions = array(
'ssl' => array(
'cafile' => dirname(__FILE__).DIRECTORY_SEPARATOR.'cert/cacert.pem'
)
);
'개발' 카테고리의 다른 글
[MySQL] 추출 결과 합치기(UNION) (0) | 2018.08.01 |
---|---|
[MySQL] 논리 연산자 우선 순위 (0) | 2018.08.01 |
FlashDevelop에서 디버깅 오류 Error #1065: Variable ? is not defined. 해결 (0) | 2017.11.29 |
VS 2008 프로젝트 : error PRJ0003 : 'rc.exe'을(를) 생성하는 동안 오류가 발생했습니다. (0) | 2015.07.09 |
WTL Wizard 스크립트 오류 해결 (0) | 2015.07.07 |
댓글