it-swarm.com.de

e-Mail über den Google Mail-SMTP-Server senden PHP Mailer

Ich möchte eine E-Mail mit dem Gmail 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 diesen 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

62
$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 wurde für mich getestet und funktioniert.

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

Stellen Sie außerdem sicher, dass für dieses Konto keine zweistufige Verifizierung aktiviert ist, da dies ebenfalls Probleme verursachen kann.

AKTUALISIERTE

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 keine SSL- (oder TLS) -Verbindungen.

118

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

Ich habe den EXACT-Code aus der PHPMailer-Beispieldatei gmail.phps verwendet. Es funktionierte einfach, während ich MAMP verwendete, und dann bekam ich den SMTP-Verbindungsfehler, sobald ich es auf meinen persönlichen Server übertragen habe.

Alle Antworten zum Stack Overflow, die ich gelesen habe, und die gesamte Dokumentation zur Fehlerbehebung in PHPMailer besagten, dass dies kein Problem mit PHPMailer war. Dass es sich um ein Einstellungsproblem auf der Serverseite handelte. Ich habe verschiedene Ports ausprobiert (587, 465, 25), ich habe die Verschlüsselung 'SSL' und 'TLS' ausprobiert. Ich habe überprüft, dass openssl in meiner php.ini-Datei aktiviert ist. Ich habe überprüft, dass es kein Firewall-Problem gibt. Alles geprüft und 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.

26
Evan Butler

Erwähnenswert ist auch, dass Sie bei aktivierter Zwei-Faktor-Authentifizierung ein anwendungsspezifisches Kennwort einrichten müssen, das anstelle des Kennworts Ihres E-Mail-Kontos verwendet wird.

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

Setzen Sie dann $mail->Password auf Ihr anwendungsspezifisches Passwort.

8
Tim Carr

Es scheint, dass Ihr Server keine Verbindung zu einem Google Mail-SMTP-Server herstellen kann. Hier sind einige Hinweise zur Behebung dieses Problems: 1) Überprüfen Sie, ob SSL auf Ihrem PHP richtig konfiguriert ist (das Modul, das es behandelt, isn ' Standardmäßig auf PHP installiert. Sie müssen Ihre Konfiguration in phph.ini) überprüfen. 2) Überprüfen Sie, ob Ihre Firewall ausgehende Anrufe an den erforderlichen Port zulässt (hier 465 oder 587). 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 können das schnell klären!

5
Pr Shadoko

Öffnen Sie diesen Link und wählen Sie die Anweisungen aus, die von Google-Servern ausgeführt werden, um Versuche von unbekannten Servern zu blockieren. Wenn Sie also auf Captcha klicken, wird alles gut 

3
Yasin Hassanien

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

Ich konnte SMTP nicht verwenden, bis ich die telefonische Bestätigung durchgeführt habe. Ich habe ein anderes Konto gemacht, um es zu überprüfen, und ich konnte es bestätigen.

1
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
brandenM

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';
    }
0
Zohaib Hussain

Anderscc hat es richtig verstanden. Vielen Dank. Es hat bei mir aber nicht 100% geklappt. 

Ich musste einstellen

$ mail-> SMTPDebug = 0; Die Einstellung 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, wenn E-Mails gesendet werden, wobei Json verwendet wird, um Daten durch Ajax zu übergeben.

Ich musste die Sicherheitseinstellungen für mein Google Mail-Konto verringern, um Fehler zu beseitigen: "SMTP connect () fehlgeschlagen" und "SMTP-Fehler: Kennwortbefehl fehlgeschlagen". 

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

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

Hinweis: Sie können den folgenden Link zur Stackoverflow-Antwort aufrufen, um detailliertere Informationen zu erhalten.

https://stackoverflow.com/a/25175234

0
Akshay P. Raul

Wenn Sie cPanel verwenden, klicken Sie einfach auf das kleine Kästchen, in dem Sie per SMTP an externe Server senden können.

Anmelden bei CPanel> Tweak-Einstellungen> Alle> "Ausgehende SMTP auf Root, Exim und Mailman beschränken (FKA SMTP Tweak)"

Wie hier beantwortet:

"Passwort vom Server nicht akzeptiert: 535 Falsche Authentifizierungsdaten" beim Senden mit GMail und phpMailer

0
Tristanisginger