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
Antworten:
$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
(oderTLS
) keine Verbindungen.quelle
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:
Jetzt funktioniert alles. Ich weiß nicht warum, aber es funktioniert. Der Rest meines Codes wird aus der PHPMailer-Beispieldatei kopiert und eingefügt.
quelle
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->Password
Ihr anwendungsspezifisches Passwort ein.quelle
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!
quelle
Ö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
quelle
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.
quelle
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'; }
quelle
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );
quelle
Wenn Sie cPanel verwenden, klicken Sie einfach auf das kleine Feld, mit dem Sie per SMTP an externe Server senden können.
Wie hier beantwortet:
"Passwort vom Server nicht akzeptiert: 535 Falsche Authentifizierungsdaten" beim Senden mit GMail und phpMailer
quelle
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):
Zeigen Sie die letzten Versuche an, das Konto zu verwenden, und akzeptieren Sie verdächtigen Zugriff.
Link zum Deaktivieren der Funktion zum Blockieren verdächtiger Apps / Technologien:
https://www.google.com/settings/u/1/security/lesssecureapps
Hinweis: Weitere Informationen finden Sie unter dem folgenden Link zum Beantworten von Stapelüberläufen.
https://stackoverflow.com/a/25175234
quelle
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; }
quelle
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; }
quelle