예전에 프로젝트를 진행하면서 phpmailer를 이용해서 이메일을 보내는 기능을 만든 적이 있는데, "CI Framework와 PHPmailer를 결합하여 이메일 보내기"라는 기능을 어제 런칭한 적이 있습니다. (Sina Cloud를 막 사용하기 시작했는데 너무 비싸서..) 알리바바(Alibaba)로 전환했습니다. 그런데 예상치 못한 오류가 발생했습니다...
지웠더니 처음에는 잘 작동했습니다. SMTP 주소에 문제가 있는 줄 알고(163 이메일 주소를 사용했습니다.) 나중에 QQ 메일함으로 변경했지만 여전히 작동하지 않는 것을 발견하고 나중에 Du Niang에게 문의했습니다. Baidu의 답변을 살펴본 후 "smtp" 요청을 수신하는 Google의 SMTP 서버를 제외하고 다른 서버는 163을 사용할 때 QQ 또는 다른 서버가 대문자로 "smtp" 요청을 수신해야 한다는 것을 깨달았습니다. ... 으으으음....
그런 다음 class.phpmailer.php
1 public function IsSMTP() { 2 $this->Mailer = 'smtp'; 3 } 4 5 //改成 6 public function IsSMTP() { 7 $this->Mailer = 'SMTP'; 8 }
에 넣었습니다.
1 switch($this->Mailer) { 2 case 'sendmail': 3 return $this->SendmailSend($header, $body); 4 case 'smtp': 5 return $this->SmtpSend($header, $body); 6 default: 7 return $this->MailSend($header, $body); 8 } 9 10 11 //改成 12 switch($this->Mailer) { 13 case 'sendmail': 14 return $this->SendmailSend($header, $body); 15 case 'SMTP': 16 return $this->SmtpSend($header, $body); 17 default: 18 return $this->MailSend($header, $body); 19 }
원래는 충분하다고 생각해서 Apache를 다시 시작하고 다시 테스트했습니다. 결과적으로 첫 번째 오류는 해결되었고 또 다른 오류가 나타났습니다:
? ? ? ? ?
여러분들이 나타났는지 모르겠습니다. 운이 좋지 않아서 Du Niang에게 도움을 요청했고 마침내 이유를 찾았습니다. 일부 가상 호스트나 서버가 보안상의 이유로 "fsockopen() 함수"를 차단했습니다. 으로 인해 이메일을 보낼 수 없게 되었습니다.
해결 방법은 다음과 같습니다.
먼저 php.ini에서 다음 두 개의 세미콜론을 제거합니다.
;extension=php_sockets.dll
;extension=php_openssl.dll
전에 사용했습니다. PHPmailer에서 제거되었습니다. 여기에 알림이 있습니다.
그런 다음 fsockopen 기능을 교체하세요.
class.smtp.php 파일의 fsockopen 기능을 pfsockopen 기능으로 교체하세요.
1 $this->smtp_conn = @fsockopen($host, // the host of the server 2 $port, // the port to use 3 $errno, // error number if any 4 $errstr, // error message if any 5 $tval); // give up after ? secs 6 7 8 //fsockopen改为: 9 $this->smtp_conn = @pfsockopen($host, // the host of the server 10 $port, // the port to use 11 $errno, // error number if any 12 $errstr, // error message if any 13 $tval); // give up after ? secs
이렇게 설정한 후에는 이미 이메일을 성공적으로 보낼 수 있습니다. 또한 해당 사례에 대해 궁금하신 점이 있으시면 위 예시를 참고하여 시도해 보시기 바랍니다.
위 내용은 SMTP 오류 해결 방법: phpmailer가 이메일을 보낼 때 SMTP 호스트에 연결할 수 없습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!