408 Stimmen

Versenden von E-Mails über den GMail SMTP-Server von einer PHP-Seite aus

Ich versuche, eine E-Mail über den SMTP-Server von GMail von einer PHP-Seite aus zu senden, aber ich erhalte diesen Fehler:

Authentifizierungsfehler [SMTP: SMTP-Server unterstützt keine Authentifizierung (Code: 250, Antwort: mx.google.com bei Ihrem Dienst, [98.117.99.235] SIZE 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES PIPELINING)]

Kann jemand helfen? Hier ist mein Code:

<?php
require_once "Mail.php";

$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <ramona@microsoft.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "smtp.gmail.com";
$port = "587";
$username = "testtest@gmail.com";
$password = "testtest";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'port' => $port,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }
?>

22voto

Hawklike Punkte 615

Ab dem 30. Mai 2022 , Google wird nicht mehr unterstützt die Nutzung von Anwendungen und Geräten von Drittanbietern, die es Ihnen ermöglichen, sich mit Ihren Daten in Ihrem Google-Konto anzumelden Benutzernamen und Passwort .

Es gibt jedoch eine einfache Lösung, die von Google angeboten wird.

Geben Sie anstelle eines Passworts eine App-Passwort von Google generiert. Gehen Sie zunächst zu den Einstellungen und aktivieren Sie 2-Step Verification .

enter image description here

Klicken Sie dann auf das Symbol App passwords .

enter image description here

Sie sollten den Bildschirm App-Passwörter sehen. Mit App-Passwörtern können Sie sich über Apps auf Geräten, die die 2-Stufen-Überprüfung nicht unterstützen, bei Ihrem Google-Konto anmelden. . Wählen Sie Mail als App und wählen Sie dann ein Gerät aus. In meinem Fall habe ich gewählt Other weil ich meine Anwendung in der Cloud bereitstellen möchte.

enter image description here

Klicken Sie anschließend auf die Schaltfläche GENERATE Schaltfläche. Sie sehen dann Ihr generiertes App-Passwort.

enter image description here

Kopieren Sie einfach das Passwort und ersetzen Sie das bisherige Passwort in Ihrem E-Mail-Versanddienst durch das generierte. Sie werden das Passwort allerdings nicht mehr sehen können.

Das war's!

20voto

Pekka Punkte 429407

SwiftMailer können E-Mails über externe Server versenden.

Hier ist ein Beispiel, das zeigt, wie man einen Gmail-Server verwendet:

require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";

//Connect to localhost on port 25
$swift =& new Swift(new Swift_Connection_SMTP("localhost"));

//Connect to an IP address on a non-standard port
$swift =& new Swift(new Swift_Connection_SMTP("217.147.94.117", 419));

//Connect to Gmail (PHP5)
$swift = new Swift(new Swift_Connection_SMTP(
    "smtp.gmail.com", Swift_Connection_SMTP::PORT_SECURE, Swift_Connection_SMTP::ENC_TLS));

14voto

s01ipsist Punkte 2952

Der Code, wie er in der Frage aufgeführt ist, bedarf zweier Änderungen

$host = "ssl://smtp.gmail.com";
$port = "465";

Port 465 ist für eine SSL-Verbindung erforderlich.

8voto

Bhavin Solanki Punkte 1346

Mails mit der phpMailer-Bibliothek über Gmail versenden Bitte laden Sie die Bibliotheksdateien von Github

<?php
/**
 * This example shows settings to use when sending via Google's Gmail servers.
 */
//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');
require '../PHPMailerAutoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "username@gmail.com";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom('from@example.com', 'First Last');
//Set an alternative reply-to address
$mail->addReplyTo('replyto@example.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('whoto@example.com', 'John Doe');
//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
$mail->addAttachment('images/phpmailer_mini.png');
//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

7voto

Strategist Punkte 591

Ich hatte dieses Problem auch. Ich habe die richtigen Einstellungen vorgenommen und weniger sichere Anwendungen aktiviert, aber es hat trotzdem nicht funktioniert. Schließlich habe ich dies aktiviert https://accounts.google.com/UnlockCaptcha und es hat bei mir funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X