E-Mail kann nicht über den Google Mail-SMTP-Server über PHPMailer gesendet werden. Fehlermeldung: SMTP-AUTH ist für die Nachrichtenübermittlung an Port 587 erforderlich. Wie wird das Problem behoben?

77

Ich möchte eine E-Mail über den Google Mail SMTP- Server über PHP Mailer senden .

Das ist mein Code

<?php
require_once('class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = '[email protected]';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = '[email protected]';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', 'Information');

$mail->IsHTML(true);
$mail->Subject    = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
$mail->Body    = "Hello";

if(!$mail->Send())
{
  echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
  echo "Message sent!";
}
?>

aber ich erhalte folgenden Fehler

Mailer Error: SMTP Error: The following recipients failed: [email protected]

SMTP server error: SMTP AUTH is required for message submission on port 587

Meine Domain ist vatandesign.ir

Mohammad Masoudian
quelle
Vielleicht möchten Sie einen Blick auf Jorjs Antwort in diesem Thread werfen
Human Wannabe

Antworten:

141
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("[email protected]");

 if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
 } else {
    echo "Message has been sent";
 }

Dieser Code oben wurde für mich getestet und funktioniert.

Es könnte sein, dass Sie gebraucht haben $mail->SMTPSecure = 'ssl';

Stellen Sie außerdem sicher, dass für dieses Konto keine Bestätigung in zwei Schritten aktiviert ist, da dies ebenfalls Probleme verursachen kann.

AKTUALISIERT

Sie können versuchen, $ mail-> SMTP in Folgendes zu ändern:

$mail->SMTPSecure = 'tls';

Es ist erwähnenswert, dass einige SMTP-Server Verbindungen blockieren. Einige SMTP-Server unterstützen SSL(oder TLS) keine Verbindungen.

Andrew-Caulfield
quelle
Ich erhalte diesen Fehler, wenn ich Ihren Code verwende. Mailer-Fehler: Die folgende Absenderadresse ist fehlgeschlagen: [email protected]: Mailed () ohne Verbindung
Mohammad Masoudian
3
Aktualisierte Antwort mit einem weiteren Vorschlag. Der Code ist definitiv in Ordnung. Sie könnten diese beiden Quellen überprüfen phpmailer.worxware.com/index.php?pg=exampleagmail und github.com/Synchro/PHPMailer/blob/master/examples/...
Andrew-Caulfield
Ich erhalte die Fehlermeldung als: CLIENT -> SMTP: EHLO localhost SMTP -> FEHLER: EHLO wird nicht vom Server akzeptiert: CLIENT -> SMTP: HELO localhost Hinweis: fwrite (): Senden von 16 Bytes fehlgeschlagen mit errno = 10054 Eine vorhandene Verbindung wurde vom Remote-Host zwangsweise geschlossen. in C: \ xampp \ htdocs \ program \ mailsending1 \ mailsending_v1 \ PHPMailer-master \ class.smtp.php in Zeile 1023 SMTP -> FEHLER: HELO vom Server nicht akzeptiert: SMTP -> HINWEIS: EOF wurde beim Überprüfen, ob verbundenSMTP Connect ( ) gescheitert. Mailer-Fehler: SMTP Connect () ist fehlgeschlagen.
Anurag Singh
2
Beachten Sie, dass bei der Angabe von "ssl" (was dringend empfohlen wird) für Ihre PHP-Installation die Erweiterung "openssl" unter Verwendung Ihres bevorzugten PHP-Erweiterungsmechanismus geladen (oder kompiliert) werden muss (ich verwende zufällig OS X Macports, für die) es ist sudo port install php5-openssl)
xgretsch
Es ist besser, sowohl den Rückgabewert als auch die Fehler zu überprüfen, wenn (! $ Mail-> Send () || $ mail-> ErrorInfo) {
ymakux
32

Also habe ich gerade meinen eigenen Fehler "SMTP-Verbindungsfehler" behoben und wollte die Lösung nur für den Fall veröffentlichen, dass sie jemand anderem hilft.

Ich habe den EXAKTEN Code verwendet, der in der PHPMailer-Beispieldatei gmail.phps angegeben ist. Es hat einfach funktioniert, während ich MAMP verwendet habe, und dann habe ich den SMTP-Verbindungsfehler erhalten, als ich es auf meinen persönlichen Server verschoben habe.

Alle von mir gelesenen Antworten zum Stapelüberlauf und die gesamte Dokumentation zur Fehlerbehebung von PHPMailer besagten, dass es sich nicht um ein Problem mit PHPMailer handelte. Dass es sich um ein Einstellungsproblem auf der Serverseite handelte. Ich habe verschiedene Ports (587, 465, 25) ausprobiert und die SSL- und TLS-Verschlüsselung ausprobiert. Ich habe überprüft, ob openssl in meiner Datei php.ini aktiviert ist. Ich habe überprüft, ob kein Firewall-Problem vorliegt. Alles ausgecheckt und immer noch nichts.

Die Lösung war, dass ich diese Zeile entfernen musste:

$mail->isSMTP();

Jetzt funktioniert alles. Ich weiß nicht warum, aber es funktioniert. Der Rest meines Codes wird aus der PHPMailer-Beispieldatei kopiert und eingefügt.

Evan Butler
quelle
7
Diese Lösung funktioniert, weil SMTP vollständig deaktiviert wird. Ich empfehle diese Methode NICHT. Ich habe dieses Problem nie gelöst. Stattdessen wechsle ich jetzt zur Mandrill-API.
Evan Butler
Verwenden Sie einfach Mandrill, es ist viel besser und hat tatsächlich einige Analysen.
Evan Butler
Mein Problem gelöst. Ich danke dir sehr.
Cristian Oana
Es hat auch bei mir funktioniert.
Seltsam
1
SCHLECHTE Lösung, Sie verwenden nicht SMTP wie diese, sondern nackte PHP Mail () -Funktion, die wahrscheinlich Ihre E-Mail als Junk für einige Empfänger senden wird
Nassim
8

Beachten Sie auch, dass Sie bei aktivierter Zwei-Faktor-Authentifizierung ein anwendungsspezifisches Kennwort einrichten müssen, das anstelle des Kennworts Ihres E-Mail-Kontos verwendet werden soll.

Sie können ein anwendungsspezifisches Kennwort generieren, indem Sie die folgenden Anweisungen befolgen : https://support.google.com/accounts/answer/185833

Stellen Sie dann $mail->PasswordIhr anwendungsspezifisches Passwort ein.

Tim Carr
quelle
5

Es scheint, dass Ihr Server keine Verbindung zum Google Mail-SMTP-Server herstellen kann. Hier sind einige Hinweise zur Fehlerbehebung: 1) Überprüfen Sie, ob SSL auf Ihrem PHP korrekt konfiguriert ist (das Modul, das es handhabt, ist auf PHP nicht standardmäßig installiert. Sie müssen Ihre Konfiguration in phph.ini überprüfen). 2) Überprüfen Sie, ob Ihre Firewall ausgehende Anrufe an den erforderlichen Port (hier 465 oder 587) zulässt. Verwenden Sie dazu Telnet. Wenn der Port nicht geöffnet ist, benötigen Sie Unterstützung von sysdmin, um die Konfiguration einzurichten. Ich hoffe, Sie klären das schnell!

Pr Shadoko
quelle
4

Öffnen Sie diesen Link und wählen Sie Befolgen Sie die Anweisungen. Google Server blockiert alle Versuche von unbekannten Servern. Sobald Sie auf Captcha klicken, überprüfen Sie, ob alles in Ordnung ist

Yasin Hassanien
quelle
1
Ich habe den gleichen Code wie in der akzeptierten Antwort verwendet, würde aber trotzdem SMTP_connect () -Fehler erhalten. Ich habe alles in diesem Link ausprobiert und es hat funktioniert, also +1.
Ivan
1
Ich hatte auch Probleme mit SMTP_connect () - Fehlern. Ich habe die obigen Schritte ausgeführt und immer noch den Fehler erhalten. Ich habe die Schritte zweimal an zwei verschiedenen Google Mail-Adressen ausgeführt, und beide Male musste ich anscheinend ~ 1 Stunde warten, bis die Änderungen wirksam wurden. Danach funktionierte alles wie erwartet.
Cwal
Wenn Sie google.com/accounts/DisplayUnlockCaptcha besuchen und dann meinen Code ausführen, funktioniert er für mich. +1
Bill Brower
Mein Problem wurde gelöst.
Nikhil Pawar
1

Google behandelt Google Mail-Konten je nach verfügbaren Benutzerinformationen unterschiedlich, wahrscheinlich um Spammer einzudämmen.

Ich konnte SMTP erst verwenden, nachdem ich die Telefonüberprüfung durchgeführt hatte. Ich habe ein anderes Konto erstellt, um es zu überprüfen, und ich konnte es bestätigen.

Mein Login vergessen 12
quelle
1

Dieser Code funktioniert gut für mich

    $mail = new PHPMailer;
    //Enable SMTP debugging. 
    $mail->SMTPDebug = 0;
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP host name                          
    $mail->Host = $hostname;
    //Set this to true if SMTP host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password     
    $mail->Username = $sender;
    $mail->Password = $mail_password;
    //If SMTP requires TLS encryption then set it
    $mail->SMTPSecure = "ssl";
    //Set TCP port to connect to 
    $mail->Port = 465;
    $mail->From = $sender;  
    $mail->FromName = $sender_name;
    $mail->addAddress($to);
    $mail->isHTML(true);
    $mail->Subject = $Subject;
    $mail->Body = $Body;
    $mail->AltBody = "This is the plain text version of the email content";
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    }
    else {
           echo 'Mail Sent Successfully';
    }
Zohaib Hussain
quelle
$ mail-> SMTPSecure = 'ssl'; $ mail-> Port = 465; Ich habe gerade TSL in ssl und 587 in 465 geändert, dann hat es für mich funktioniert, danke. GMAIL, um weniger sichere Apps zuzulassen
Rao
0
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
brandenM
quelle
1
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich dabei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
Athul
Das ist nur gefährlich. Tu es nicht.
Synchro
0

Anderscc hat es richtig verstanden. Vielen Dank. Es hat bei mir funktioniert, aber nicht zu 100%.

Ich musste setzen

$mail->SMTPDebug = 0;

Das Setzen auf 1 kann zu Fehlern führen, insbesondere wenn Sie einige Daten als json an die nächste Seite übergeben. Beispiel - Durchführen einer Überprüfung, ob E-Mails gesendet werden, Verwenden von json zum Übertragen von Daten durch Ajax.

Ich musste die Sicherheitseinstellungen meines Google Mail-Kontos verringern, um Fehler zu beseitigen: "SMTP-Verbindung () fehlgeschlagen" und "SMTP-FEHLER: Kennwortbefehl fehlgeschlagen"

Lösung: Dieses Problem kann entweder durch "weniger sichere" Anwendungen verursacht werden, die versuchen, das E-Mail-Konto zu verwenden (dies ist laut Google-Hilfe nicht sicher, wie sie beurteilen, was sicher ist und was nicht), oder wenn Sie versuchen, sich mehrmals anzumelden in einer Reihe ODER wenn Sie das Land wechseln (z. B. VPN verwenden, Code auf einen anderen Server verschieben oder tatsächlich versuchen, sich aus einem anderen Teil der Welt anzumelden).

Links, die das Problem beheben (Sie müssen in einem Google-Konto angemeldet sein):

Hinweis: Weitere Informationen finden Sie unter dem folgenden Link zum Beantworten von Stapelüberläufen.

https://stackoverflow.com/a/25175234

Akshay P. Raul
quelle
0

Hallo an alle, ich wollte nur meine Erfahrungen mit phpMailer teilen, das lokal (XAMPP) arbeitete, aber nicht an meinem Hosting-Anbieter arbeitete.

Ich habe die Fehlerberichterstattung von phpMailer aktiviert

 $mail->SMTPDebug=2

Ich habe 'Verbindung abgelehnt Fehler'

Ich sende meinem Host-Provider eine E-Mail für das Problem, und er sagte, dass er die SMTP-PORTS öffnen würde, und er öffnete die Ports 25.465.587.

Dann erhielt ich die folgende Fehlerantwort: "SMTP-FEHLER: Kennwortbefehl fehlgeschlagen:" .... "Bitte melden Sie sich über Ihren Webbrowser an und versuchen Sie es erneut." .... "SMTP-Fehler: Konnte nicht authentifiziert werden."

Google prüft also, ob Sie in Ihrem Konto angemeldet sind (ich habe das Skript lokal über meinen Browser ausgeführt) und ermöglicht Ihnen dann, E-Mails über das phpMailer-Skript zu senden.

So beheben Sie das Problem 1: Gehen Sie zu Ihrem Google-Konto -> Sicherheit 2: Scrollen Sie zum Schlüsselsymbol und wählen Sie "2-Wege-Überprüfung". Befolgen Sie die Anweisungen 3: Wenn Sie fertig sind, kehren Sie zum Schlüsselsymbol von Google-Konto -> Sicherheit zurück und wählen Sie die zweite Option "App-Passwörter erstellen" und folgen Sie den Anweisungen, um das Passwort zu erhalten.

Gehen Sie nun zu Ihrem phpMailer-Objekt und ändern Sie Ihr Google-Passwort mit dem Passwort, das Sie aus dem obigen Verfahren erhalten haben

du bist fertig .

Der Code

require_once('class.phpmailer.php');

$phpMailerObj= new PHPMailer();

                $phpMailerObj->isSMTP();                    
                $phpMailerObj->SMTPDebug = 0;
                $phpMailerObj->Debugoutput = 'html';                    
                $phpMailerObj->Host = 'smtp.gmail.com';                     
                $phpMailerObj->Port = 587;
                $phpMailerObj->SMTPSecure = 'tls';
                $phpMailerObj->SMTPAuth = true;                 
                $phpMailerObj->Username = "YOUR EMAIL";                 
                $phpMailerObj->Password = "THE NEW PASSWORD FROM GOOGLE ";
                $phpMailerObj->setFrom('YOUR EMAIL ADDRESS', 'THE NAME OF THE SENDER',0);
                $phpMailerObj->addAddress('RECEIVER EMAIL ADDRESS', 'RECEIVER NAME');

                $phpMailerObj->Subject = 'SUBJECT';
                $phpMailerObj->Body ='MESSAGE';

                if (!phpMailerObj->send()) {
                    echo "phpMailerObjer Error: " . $phpMailerObj->ErrorInfo;
                    return 0;
                } else {
                    echo "Message sent!";
                    return 1;
                } 
iwannabeu
quelle
-2

Ich denke, es ist ein Verbindungsproblem. Sie können Code hier erhalten. Http://skillrow.com/sending-mail-using-smtp-and-php/

include(“smtpfile.php“);
include(“saslfile.php“); // for SASL authentication $from=”[email protected]“; //from mail id

$smtp=new smtp_class;

$smtp->host_name=”www.abc.com“; // name of host
$smtp->host_port=25;//port of host

$smtp->timeout=10;
$smtp->data_timeout=0;
$smtp->debug=1;
$smtp->html_debug=1;
$smtp->pop3_auth_host=””;
$smtp->ssl=0;
$smtp->start_tls=0;
$smtp->localhost=”localhost“;
$smtp->direct_delivery=0;

$smtp->user=”smtp username”;
$smtp->realm=””;
$smtp->password=”smtp password“;

$smtp->workstation=””;
$smtp->authentication_mechanism=””;

$mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”);

if($mail){
   echo “Mail sent“;
}else{
   echo $smtp->error;
}
user3445130
quelle
Von Nur-Link-Antworten wird normalerweise abgeraten. Könnten Sie dies zu etwas Eigenständigem erweitern?
Werner