Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann PHPMailer keine E-Mails versenden?
PHPMailer ist eine nützliche PHP-Klasse zum Versenden von E-Mails. Es unterstützt das Senden von E-Mails über einen SMTP-Server sowie Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier und andere Mailserver. Der SMTP-Server unterstützt auch die Verifizierung und den Mehrfach-SMTP-Versand (ich bin mir jedoch nicht sicher, wofür er verwendet wird). Der E-Mail-Versand kann mehrere TO-, CC-, BCC- und REPLY-TO-Funktionen umfassen, unterstützt sowohl Text- als auch HTML-E-Mail-Formate und kann Zeilen automatisch umbrechen und unterstützt Anhänge und Bilder in verschiedenen Formaten, benutzerdefinierte E-Mail-Header und andere grundlegende E-Mail-Funktionen.
Da PHP nur eine Mail-Funktion enthält, ist PHPMailer eine großartige Erweiterung und ich glaube, dass es die Bedürfnisse vieler Leute erfüllen kann, haha. Es enthält hauptsächlich zwei Klassendateien: class.phpmailer.php zur Implementierung der E-Mail-Versandfunktion und class.smtp.php zur SMTP-Implementierung. Dann gibt es Dateien, die verschiedene Fehlerausgaben erzielen können, sowie eine sehr detaillierte Dokumentation.
PHPMailer kann keine Verbindung zum SMTP-Server herstellen und hat nichts mit der Änderung der SMTP-Groß-/Kleinschreibung zu tun.
(22.10.2011 12:17:35)
Nachdruck▼
|
Kategorie: Standardkategorie |
PHPmailer kann keine E-Mails senden, was zu einem Fehler führt: Fehler: Verbindung zum SMTP-Host konnte nicht hergestellt werden
Es gibt zwei frühere Artikel im Blog: „PHPMailer::Kann keine Verbindung zum SMTP-Server herstellen“ „Zwei häufige Gründe, warum PHPMailer keine Verbindung zum SMTP-Server herstellen kann“
Die eine dient zum Nachdrucken, die andere zum Notieren, aber letztendlich führt sie dazu, dass nicht jeder das Problem lösen kann.
Freunde haben mir geschrieben und um Hilfe gebeten, und ich war auch besorgt. Obwohl es später gelöst wurde, konnte ich es immer noch nicht herausfinden, also beruhigte ich mich und schaute es mir noch einmal an
PHPMailer kann keine Verbindung zum SMTP-Server herstellen. Überprüfen Sie es zuerst mit dem Code:
Funktion Get_host($host){ //Domänennamen auflösen
$Get_host=gethostbyname($host);
echo „Es wird versucht, eine Verbindung zu $host herzustellen ...
rn“;
if(!$Get_host){
$str= „Analyse fehlgeschlagen (1)
PHPmailer ist eine großartige PHP-Klasse zum Versenden von E-Mails. Die Fehlerbehandlung konzentriert sich auf Probleme während der Sitzung mit dem SMTP-Server, wie z. B. Fehlermeldungen für eine falsche Authentifizierung und leere Empfänger Mit einem SMTP-Host verbinden" Kurz gesagt, es hat zu vielen Problemen geführt, die nicht gelöst wurden. Was noch lächerlicher ist, ist, dass es zur Verbreitung einiger nützlicher, aber unvernünftiger Methoden auf der Welt geführt hat. Man kann sehen, dass alles hat ein bestimmtes Schicksal.
Okay, kein Unsinn mehr reden.
Wenn Sie den Grund dafür verstehen möchten, dass keine Verbindung zum SMTP-Host hergestellt werden konnte, müssen Sie die Schritte zum Herstellen einer Verbindung mit dem Dienst verstehen
Ein vollständiger und effektiver SMTP-Briefversandprozess sollte Folgendes umfassen: Auflösen des Domänennamens, Herstellen einer Verbindung zum SMTP-Server, Überprüfen der Identität, Bestimmen des Empfängers und des Briefinhalts sowie Senden von
Der obige PHP-Code besteht darin, diese Schritte zu trennen, den Grund herauszufinden und dann eine Methode zu finden. Die zurückgegebenen Ergebnisse können wie folgt lauten:
1. Parsing fehlgeschlagen (2): Möglicherweise handelt es sich um einen ungültigen Hostnamen
Der Domänenname kann nicht aufgelöst werden. Möglicherweise handelt es sich um ein Problem auf DNS-Ebene. Kontaktieren Sie den Administrator oder wechseln Sie den Dienstanbieter
2. Der Server unterstützt Fsockopen nicht. Versuchen Sie es mit der pFsockopen-Funktion
Wenn die Verbindung zum Server mithilfe der pfsockopen-Funktion erfolgreich ist, ändern Sie $this->smtp_conn = fsockopen( in class.smtp.php in $this->smtp_conn = pfsockopen(. Bringen Sie PHPmailer zur normalen Verwendung zurück
3. Serverseitiger Fehler
Es wurde erfolgreich eine Verbindung mit dem Remote-Host hergestellt, aber die andere Partei hat das SMTP-Protokoll nicht installiert und einen 220-Antwortcode gesendet, was darauf hinweist, dass möglicherweise ein Problem mit dem SMTP-Server
vorliegt
4. 220 Die Antwort des SMTP-Servers ist normal
Unabhängig davon, ob es sich um die Funktion fsockopen oder die Funktion pfsockopen handelt, wurde die Verbindung zum Remote-SMTP-Server normal hergestellt. Wenn Sie mit PHPmailer keine E-Mails versenden können, empfehle ich Ihnen dringend, Ihr Konto zu ändern und es erneut zu versuchen
5. Andere Fehlermeldungen, wie zum Beispiel dieser
Warnung: fsockopen(): Verbindung zu smtp163.com:25
konnte nicht hergestellt werden
Sie haben absoluten Grund zu der Annahme, dass die Firewall dafür verantwortlich ist! Wenn Sie sich in diesem Fall nicht an den Administrator wenden können, um die Firewall-Regeln zu ändern, können Sie die Methode unter „PHPMailer::Verbindung zum SMTP-Server konnte nicht hergestellt werden“ ausprobieren,
Suchen Sie
Funktion IsSMTP() {
$this->Mailer = 'smtp';
}
Ändern Sie zu:
Funktion IsSMTP() {
$this->Mailer = 'SMTP';
}
Wie mein Titel sagt: „PHPMailer kann keine Verbindung zum SMTP-Server herstellen und es hat nichts mit der Änderung der SMTP-Groß-/Kleinschreibung zu tun.“ Natürlich kann ich dir keinen bösen Streich spielen, aber manchmal funktioniert es wirklich. Die Erfolgsquote der Heilung hängt von deinem Charakter ab
Lassen Sie uns die Gründe analysieren.
Dieser Code befindet sich wahrscheinlich in Zeile 286 von class.phpmailer.php. Diese Funktion muss zuerst aufgerufen werden, wenn die PHPmailer-Klasse verwendet wird, um die Methode zum Senden von E-Mails
zu deklarieren
Verfolgen Sie this->Mailer bis etwa Zeile 400 von class.smtp.php
switch($this->Mailer) {
Fall 'sendmail':
$result = $this->SendmailSend($header, $body);
Pause;
case 'smtp':
$result = $this->SmtpSend($header, $body);
Pause;
case 'mail':
$result = $this->MailSend($header, $body);
Pause;
Standard:
$result = $this->MailSend($header, $body);
brechen;
Zunächst einmal ist SMTP definitiv nicht gleich SMTP! Dieses Grundprinzip habe ich vergessen.
Wenn die oben genannten Bedingungen nicht erfüllt sind, führt PHPmailer daher $result = $this->MailSend($header, $body);diesen Satz
aus
Verfolgen wir die Funktion MailSend() etwa in Zeile 460 von class.phpmailer.php:
Funktion 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函数发信啊!
Klicken Sie auf „W3Schoolmail“.
$to = "somebody@example.com"; //这里改成你的邮箱地址
$subject = "Mein Betreff";
$txt = "Hallo Welt!";
$headers = "Von: dongfangtianyu@qq.com" . "rn" .
mail($to,$subject,$txt,$headers);
?>
如果在你的服务器上运行这脚本能够收到邮件,那么你完全可以用修改SMTP大小写的方法.不过,毕竟不大好用
Sie können PHPMailer herunterladen und PHPMailer herunterladen朋友有所帮助.