>백엔드 개발 >PHP 튜토리얼 >SMTP 오류 해결 방법: phpmailer가 이메일을 보낼 때 SMTP 호스트에 연결할 수 없습니다

SMTP 오류 해결 방법: phpmailer가 이메일을 보낼 때 SMTP 호스트에 연결할 수 없습니다

一个新手
一个新手원래의
2017-09-13 09:30:454678검색

예전에 프로젝트를 진행하면서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.