PHPMailer는 SMTP 서버에 연결할 수 없으며 SMTP 대소문자 수정과 관련이 없습니다.

6582 단어 phpmailer
PHPmailer에서 메일을 보낼 수 없음, 오류 알림 Error: Could not connect to SMTP host 블로그 이전에 두 개의 기사가 있었습니다.《 PHPMailer:: SMTP 서버에 연결할 수 없습니다. 》하나는 전재하고, 하나는 필기했는데, 결과는 남의 자식을 그르쳐서 모든 사람이 문제를 해결할 수 있는 것이 아니다.친구에게서 도움을 청하는 편지가 와서 나도 조급하다.나중에 해결됐지만 요령이 없어서 마음을 가라앉히고 PHPMailer가 SMTP 서버에 연결할 수 없는 걸 봤어요. 도대체 왜요?먼저 코드로 테스트합니다.<?
function Get_host($host){  //
$Get_host=gethostbyname($host);
echo "  $host ...<br>\r
 ";
if(!$Get_host){
$str= "  (1)<HR>";
}elseif($Get_host==$host){
$str= "  (2):  <HR>";
}else{
echo "  $Get_host ...<br>\r
";
Open_host($host);}
echo $str;
}

Function Open_host($host){  //

if(function_exists('fsockopen')){
$fp = fsockopen($host,25,&$errno,&$errstr,60);
  elseif(function_exists('pfsockopen')){
    echo " Fsockopen, pFsockopen  ...<br>\r
";
    $fp = pfsockopen($host,25,&$errno,&$errstr,60); }
  else
    exit(' Fsockopen ');

if(!$fp){
echo " :$errno,<br>
:$errstr<HR>";
}else{
echo "SMTP ok!<br>\r
";
fwrite($fp, "");
$out0= fgets($fp, 128);
#echo $out0;
if (strncmp($out0,"220",3)==0){ // 
echo '220 SMTP <HR>';
}else{
echo ' <HR>';}
}
}
//SMTP
$site = array("smtp.163.com","smtp.sina.cn","smtp.sina.com","smtp.qqq.com","smtp.126.com");

//
#$host="smtp.163.com";
#echo Get_host($host);


for ($i=0; $i<=4; $i++)
{  
$host= $site[$i];
 echo Get_host($host);
}

PHPmailer는 훌륭한 PHP 발송 메일 클래스로 오류 처리는 SMTP 서버와의 세션 과정에서의 문제, 예를 들어 신분 검증이 잘못되고 받는 사람이 비어있는 오류 알림에 중심을 두지만 smtp에 연결되는 과정에 대한 오류 알림은'Could not connect to SMTP host'로 일언지하여 많은 문제를 해결하지 못했다.더 가소로운 것은 유용하지만 이치를 말하지 못하는 방법들이 세상에 전해지게 된 것이다. 이를 통해 알 수 있듯이 저승에는 모든 것이 정해져 있다.됐어, 침은 그만하자.Could not connect to SMTP host의 원인을 규명하려면 서비스 연결 절차가 완전하고 효과적인 SMTP 발신 과정은 도메인 이름 해석, SMTP 서버 연결, 신분 검증, 수신자와 편지 내용 확인, 위의 PHP 코드 발송은 이 몇 가지 절차를 분리해서 원인을 찾아내고 방법을 찾는 것을 포함해야 한다는 것을 알아야 한다.반향된 결과는 대략 다음과 같다. 1. 해석 실패(2). 잘못된 호스트 이름일 수도 있고 도메인 이름이 해석할 수 없다는 것을 설명할 수도 있다.DNS 수준 문제일 수 있습니다.관리자에게 연락하거나 서비스 업체를 교체하는 2. 서버는 Fsockopen을 지원하지 않습니다. pFsockopen 함수를 시도해 보십시오. pfsockopen 함수로 서버를 연결하는 데 성공하면class를 수정합니다.smtp.php의 $this->smtpconn = fsockopen($this->smtp conn = pfsockopen(. PHPmailer를 정상적으로 사용하기 위해 3. 서버 측 오류와 원격 호스트 연결을 성공적으로 했지만 상대방이 SMTP 프로토콜을 설치하지 않고 220 응답 코드를 보낸 것은 SMTP 서버에 문제가 있을 수 있음을 의미한다. 4, 220 SMTP 서버 응답이 정상적일 수 있다. fsockopen 함수든 pfsockopen 함수든 원격 SMTP 서버와 정상적으로 연결되어 있다. 만약에 PHPmai를 사용할 수 없다면Warning: fsockopen(): unable to connect to smtp163.com:25 방화벽이 귀신이라고 믿을 이유가 있어!이 경우 관리자에게 연락하여 방화벽 규칙을 바꾸지 못하면 을 시험해 보세요.의 방법으로 function IsSMTP () {$this->Mailer ='smtp'를 검색합니다.변경: function IsSMTP () {$this->Mailer ='SMTP';"PHPMailer는 SMTP 서버에 연결할 수 없으며 SMTP 대소문자를 수정하는 것과 관련이 없습니다."물론 내가 너를 악취미로 놀릴 수는 없지만, 때로는 정말 효과적일 수도 있다. 치유 성공률이 얼마나 되는지는 너의 인품에 달려 있다. 원인을 분석해 보자.이 코드는 대략class에 있다.phpmailer.php286 줄 정도.이 함수는 PHPmailer 클래스를 사용할 때 먼저 호출되며, 메일을 보내는 방식으로this->Mailer를class로 추적합니다.smtp.php 400줄 정도switch($this->Mailer) {
      case 'sendmail':
        $result = $this->SendmailSend($header, $body);
        break;
      case 'smtp':
        $result = $this->SmtpSend($header, $body);
        break;
      case 'mail':
        $result = $this->MailSend($header, $body);
        break;
      default:
        $result = $this->MailSend($header, $body);
        break;

우선 smtp는 절대 SMTP가 아닙니다!이 기본 원칙을 나는 뜻밖에도 모두 잊어버릴 것이다.따라서 위의 조건이 모두 충족되지 않으면 PHPmailer는 $result = $this->MailSend($header, $body)를 실행합니다.이 문장은 MailSend () 함수가class에 있는 것을 추적합니다.phpmailer.php 460 줄 정도:  function MailSend($header, $body) {
    $to = '';
    for($i = 0; $i < count($this->to); $i++) {
      if($i != 0) { $to .= ', '; }
      $to .= $this->AddrFormat($this->to[$i]);
    }

    $toArr = split(',', $to);

    $params = sprintf("-oi -f %s", $this->Sender);
    if ($this->Sender != '' && strlen(ini_get('safe_mode')) < 1) {
      $old_from = ini_get('sendmail_from');
      ini_set('sendmail_from', $this->Sender);
      if ($this->SingleTo === true && count($toArr) > 1) {
        foreach ($toArr as $key => $val) {
          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
        }
      } else {
        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
      }
    } else {
      if ($this->SingleTo === true && count($toArr) > 1) {
        foreach ($toArr as $key => $val) {
          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
        }
      } else {
        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
      }
    }

    if (isset($old_from)) {
      ini_set('sendmail_from', $old_from);
    }

    if(!$rt) {
      $this->SetError($this->Lang('instantiate'));
      return false;
    }

    return true;
  }

$rt = @mail (이것은 PHP에 내장된 mail 함수로 보내는 것입니다! W3School에서 온 mail 보내는 실례입니다<?php
$to = "[email protected]"; //
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: [email protected]" . "\r
" .
mail($to,$subject,$txt,$headers);
?>

만약 서버에서 이 스크립트를 실행하면 메일을 받을 수 있다면, SMTP 대소문자를 수정하는 방법을 사용할 수 있습니다.그러나 어쨌든 그다지 쓸모가 없다.mail 함수 함수로 편지를 보내려면 설정을 수정해야 합니다 php.ini, 즉, 성사 여부는 당신의 서비스 제공 업체에 달려 있다.만약 서버에 메일()과 관련된 모든 것이 설정되어 있다면, PHPmailer는 메일()을 사용하는 방법으로 당연히 편지를 보낼 수 있습니다.fsockopen 함수에 의존하지 않는 것이 바로 방화벽이 금지된 상황에서 smtp 대소문자를 수정하면 오히려 PHPmailer로 편지를 보낼 수 있는 이유입니다. 왜냐하면 그 이메일은 근본적으로 현지의 smtp 서버로 대신 보내는 사랑하는 친구이기 때문입니다. 알겠습니까?

좋은 웹페이지 즐겨찾기