PHPMailer는 이메일을 보내는 데 유용한 PHP 클래스입니다. smtp 서버를 사용한 메일 전송을 지원하며 Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier 및 기타 메일 서버도 지원합니다. SMTP 서버는 확인 및 다중 SMTP 전송도 지원합니다(그러나 그것이 무엇에 사용되는지는 잘 모르겠습니다). 이메일 전송에는 여러 TO, CC, BCC 및 REPLY-TO가 포함될 수 있으며 텍스트 및 HTML 이메일 형식을 모두 지원하고 자동으로 줄바꿈할 수 있습니다. , 다양한 형식의 첨부 파일 및 사진, 사용자 정의 이메일 헤더 및 기타 기본 이메일 기능을 지원합니다.
PHP에는 하나의 메일 기능만 포함되어 있기 때문에 PHPMailer는 PHPMailer를 크게 향상시켰고 많은 사람들의 요구를 충족시킬 수 있다고 믿습니다. 하하. 여기에는 주로 메일 전송 기능을 구현하는 class.phpmailer.php와 smtp 구현을 위한 class.smtp.php의 두 가지 클래스 파일이 포함됩니다. 그런 다음 다양한 오류 출력을 얻을 수 있는 파일과 매우 자세한 문서가 있습니다.
PHPMailer는 SMTP 서버에 연결할 수 없으며 SMTP 대소문자 변경과 관련이 없습니다.
(2011-10-22 12:17:35)
재판▼
标签: php phpmailer 杂谈 |
分类: 默认分类 |
PHPmailer가 이메일을 보낼 수 없으며 오류 메시지가 표시됩니다. 오류: SMTP 호스트에 연결할 수 없습니다
블로그에는 "PHPMailer::SMTP 서버에 연결할 수 없음" "PHPMailer가 SMTP 서버에 연결할 수 없는 두 가지 일반적인 이유"라는 두 가지 이전 기사가 있습니다.
하나는 재인쇄용이고 다른 하나는 메모용이지만 결국 모든 사람이 문제를 해결할 수 있는 것은 아닙니다.
친구들이 나에게 도움을 요청하는 편지를 보냈고, 나도 불안했다. 나중에 해결됐지만 그래도 알 수 없어서 마음을 진정시키고 다시 살펴봤습니다
PHPMailer가 SMTP 서버에 연결할 수 없습니다. 이유는 무엇입니까? 먼저 코드로 확인하세요.
function Get_host($host){ //도메인 이름 확인
$Get_host=gethostbyname($host);
echo "$host 연결을 시도 중입니다 ...
rn ";
if(!$Get_host){
$str= "파싱 실패 (1)
PHPmailer는 메일 전송을 위한 훌륭한 PHP 클래스입니다. 오류 처리는 잘못된 인증 및 빈 수신자에 대한 오류 프롬프트와 같은 SMTP 서버 세션 중 문제에 중점을 둡니다. connect to SMTP 호스트" 한 마디로 해결되지 않은 많은 문제를 낳았습니다. 더욱 우스꽝스러운 것은 유용하지만 불합리한 방법이 세상에 퍼지게 되었다는 것입니다. 정해진 운명이 있어요.
알았어, 더 이상 말도 안되는 소리는 하지 마.
SMTP 호스트에 연결할 수 없는 이유를 이해하려면 서비스에 연결하는 단계를 이해해야 합니다
완전하고 효과적인 SMTP 편지 전송 프로세스에는 도메인 이름 확인, SMTP 서버 연결, 신원 확인, 수신자 및 편지 내용 확인 및 전송이 포함되어야 합니다.
위의 PHP 코드는 이러한 단계를 분리하여 이유를 찾아낸 후 방법을 찾는 것입니다. 에코된 결과는 다음과 같습니다.
1. 구문 분석 실패(2): 잘못된 호스트 이름일 수 있습니다
도메인 이름을 확인할 수 없습니다. DNS 수준 문제일 수 있습니다. 관리자에게 문의하거나 서비스 제공업체를 변경하세요
2. 서버가 Fsockopen을 지원하지 않습니다. pFsockopen 기능을 사용해 보세요
pfsockopen 함수를 사용하여 서버 연결에 성공하면 $this->smtp_conn = fsockopen( in class.smtp.php를 $this->smtp_conn = pfsockopen(으로 수정합니다. PHPmailer를 정상적으로 사용하도록 반환
3. 서버측 오류
원격 호스트와의 연결을 성공적으로 설정했지만 상대방이 SMTP 프로토콜을 설치하지 않았으며 220 응답 코드를 보냈습니다. 이는 SMTP 서버에 문제가 있을 수 있음을 나타냅니다.
4. 220 SMTP 서버 응답이 정상입니다
뭐, fsockopen 함수든 pfsockopen 함수든 원격 SMTP 서버에 정상적으로 접속된 것입니다. PHPmailer를 사용하여 이메일을 보낼 수 없는 경우 계정을 변경하고 다시 시도해 보시기 바랍니다.
5. 이와 같은 기타 오류 보고서
경고: fsockopen(): smtp163.com:25에 연결할 수 없습니다
방화벽이 책임이 있다고 믿을 만한 절대적 이유가 있습니다! 이 경우 관리자에게 연락하여 방화벽 규칙을 변경할 수 없는 경우 "PHPMailer::SMTP 서버에 연결할 수 없습니다",
에 있는 방법을 시도해 볼 수 있습니다.
검색
함수 IsSMTP() {
$this->메일러 = 'smtp';
}
다음으로 변경:
함수 IsSMTP() {
$this->메일러 = 'SMTP';
}
내 제목에서 알 수 있듯이 "PHPMailer는 SMTP 서버에 연결할 수 없으며 SMTP 대소문자 변경과는 아무런 관련이 없습니다." 물론 나쁜 방법으로 당신을 속일 수는 없지만 때로는 치료의 성공률이 당신의 성격에 달려 있습니다
이유를 분석해 보겠습니다.
이 코드는 아마도 class.phpmailer.php의 라인 286 부근에 있을 것입니다. PHPmailer 클래스를 사용하여 메일 전송 방법을 선언할 때 이 함수를 먼저 호출해야 합니다
this->Mailer를 class.smtp.php의 약 400번째 줄까지 추적하세요.
스위치($this->메일러) {
'sendmail'의 경우:
$result = $this->SendmailSend($header, $body);
휴식;
케이스 'smtp':
$result = $this->SmtpSend($header, $body);
휴식;
케이스 '메일':
$result = $this->MailSend($header, $body);
휴식;
기본값:
$result = $this->MailSend($header, $body);
부서지다;
우선, smtp는 확실히 SMTP와 같지 않습니다! 나는 이 기본 원칙을 잊어버렸다.
따라서 위의 조건이 충족되지 않으면 PHPmailer는 $result = $this->MailSend($header, $body);이 문장
을 실행합니다.
class.phpmailer.php의 라인 460 부근에서 MailSend() 함수를 추적해 보겠습니다.
함수 MailSend($header, $body) {
$to = '';
for($i = 0; $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은 $key로 =>$val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
}
} 그밖에 {
$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
}
} 그밖에 {
if ($this->SingleTo === true && count($toArr) > 1) {
foreach($toArr은 $key로 =>$val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
}
} 그밖에 {
$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('인스턴스화'));
false를 반환합니다.
}
true를 반환합니다.
}
주의$rt = @mail( 这是用 PHP内置的mail函数发信啊!
来自W3School의 메일发信实例
$to = "somebody@example.com"; //여기서 성장하는 邮箱地址
$subject = "내 주제";
$txt = "안녕하세요!";
$headers = "보낸사람: dongfangtianyu@qq.com" . "rn" .
메일($to,$subject,$txt,$headers);
?>
如果는 服务器上运行这脚本能够收到邮件,那么你完全可以用修改SMTP大小写的这这过,毕竟不大好用
PHPMailer는 더 이상 사용할 수 없습니다.助。