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