>백엔드 개발 >PHP 튜토리얼 >phpmailer를 사용하여 이메일을 보낼 때 SMTP 오류에 대한 해결 방법

phpmailer를 사용하여 이메일을 보낼 때 SMTP 오류에 대한 해결 방법

黄舟
黄舟원래의
2017-08-09 10:30:372635검색

예전에 프로젝트를 진행하면서 phpmailer를 이용해서 이메일을 보내는 기능을 만든 적이 있는데, "CI Framework와 PHPmailer를 결합하여 이메일 보내기"라는 기능을 어제 런칭한 적이 있습니다. (Sina Cloud를 막 사용하기 시작했는데 너무 비싸서..) 알리바바(Alibaba)로 전환했습니다. 그런데 예상치 못한 오류가 발생했습니다...

지웠더니 처음에는 잘 작동했습니다. SMTP 주소에 문제가 있는 줄 알고(163 이메일 주소를 사용했습니다.) 나중에 QQ 메일함으로 변경했지만 여전히 작동하지 않는 것을 발견하고 나중에 Du Niang에게 문의했습니다. Baidu의 답변을 살펴본 후 "smtp" 요청을 수신하는 Google의 SMTP 서버를 제외하고 다른 서버는 163을 사용할 때 QQ 또는 다른 서버가 대문자로 "smtp" 요청을 수신해야 한다는 것을 깨달았습니다. ... 으으으음....

그런 다음 class.phpmailer.php


public function IsSMTP() {
    $this->Mailer = 'smtp';
  }

//改成
public function IsSMTP() {
    $this->Mailer = 'SMTP';
  }

에 넣었습니다.


 switch($this->Mailer) {
        case 'sendmail':
          return $this->SendmailSend($header, $body);
        case 'smtp':
          return $this->SmtpSend($header, $body);
        default:
          return $this->MailSend($header, $body);
      }


//改成
switch($this->Mailer) {
        case 'sendmail':
          return $this->SendmailSend($header, $body);
        case 'SMTP':
          return $this->SmtpSend($header, $body);
        default:
          return $this->MailSend($header, $body);
      }

원래는 충분하다고 생각해서 Apache를 다시 시작하고 다시 테스트했습니다. 결과적으로 첫 번째 오류는 해결되었고 또 다른 오류가 나타났습니다:

메일 기능을 인스턴스화할 수 없습니다

? ? ? ? ?

여러분들이 나타났는지 모르겠습니다. 운이 좋지 않아서 Du Niang에게 도움을 요청했고 마침내 이유를 찾았습니다. 일부 가상 호스트나 서버가 보안상의 이유로 "fsockopen() 함수"를 차단했습니다. 으로 인해 이메일을 보낼 수 없게 되었습니다.

해결 방법은 다음과 같습니다.

먼저 php.ini에서 다음 두 개의 세미콜론을 제거합니다.

;extension=php_sockets.dll

;extension=php_openssl.dll

전에 사용했습니다. PHPmailer에서 제거되었습니다. 여기에 알림이 있습니다.

그런 다음 fsockopen 함수를 교체하세요.

class.smtp.php 파일의 fsockopen 함수를 pfsockopen 함수로 교체하세요.


$this->smtp_conn = @fsockopen($host,    // the host of the server
                                 $port,    // the port to use
                                 $errno,   // error number if any
                                 $errstr,  // error message if any
                                 $tval);   // give up after ? secs


//fsockopen改为:
$this->smtp_conn = @pfsockopen($host,    // the host of the server
                                 $port,    // the port to use
                                 $errno,   // error number if any
                                 $errstr,  // error message if any
                                 $tval);   // give up after ? secs

이렇게 설정한 후에는 이미 이메일을 성공적으로 보낼 수 있습니다. 또한 해당 사례에 대해 궁금하신 점이 있으시면 위 예시를 참고하여 시도해 보시기 바랍니다.

위 내용은 phpmailer를 사용하여 이메일을 보낼 때 SMTP 오류에 대한 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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