Senden Sie E-Mails mit dem GMail-SMTP-Server von einer PHP-Seite


389

Ich versuche, eine E-Mail über den SMTP-Server von GMail von einer PHP-Seite aus zu senden, erhalte jedoch folgende Fehlermeldung:

Authentifizierungsfehler [SMTP: SMTP-Server unterstützt keine Authentifizierung (Code: 250, Antwort: mx.google.com bei Ihrem Dienst, [98.117.99.235] GRÖSSE 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>");
 }
?>

Antworten:


357
// Pear Mail Library
require_once "Mail.php";

$from = '<fromaddress@gmail.com>';
$to = '<toaddress@yahoo.com>';
$subject = 'Hi!';
$body = "Hi,\n\nHow are you?";

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => 'johndoe@gmail.com',
        'password' => 'passwordxxx'
    ));

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

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

141
was ist Mail.php?? Woher bekomme ich diese Datei?
Zain Shaikh

18
Kann mir bitte jemand einen Link geben, über den ich die Mail.php-Datei erhalten kann? Weil ich es versucht habe und es nicht funktionieren würde Danke
Yoosuf

11
Wo sind die @ -Symbole in diesem Beispiel oben? Ich sehe dort keinen einzigen!
darkAsPitch

6
Ich glaube, dass myaccount.gmail.com in den E-Mail-Standards mit myaccount@gmail.com identisch ist.
Sherwin Flug

3
Sie müssen @gmail nicht einschließen, wenn Sie den Server angegeben haben. myaccountGeben Sie einfach den Benutzernamen ein.
Jack

106

Mit Swift Mailer ist es ganz einfach, eine E-Mail über Google Mail-Anmeldeinformationen zu senden:

<?php
require_once 'swift/lib/swift_required.php';

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl")
  ->setUsername('GMAIL_USERNAME')
  ->setPassword('GMAIL_PASSWORD');

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('Test Subject')
  ->setFrom(array('abc@example.com' => 'ABC'))
  ->setTo(array('xyz@test.com'))
  ->setBody('This is a test mail.');

$result = $mailer->send($message);
?>

2
Dies funktionierte "bis zum ersten", indem nur die Adressen GMAIL_USERNAME, GMAIL_PASSWORD und From und To geändert wurden. Bei mir hat keine andere Lösung funktioniert. Vielen Dank.
Marco Muciño

7
Ich bin damit einverstanden, dass Swift Mailer eine Drop-in-Mail-Lösung ist, die viel einfacher ist als das Herumspielen mit Birnen. Vergessen Sie nicht, die PHP-Erweiterung php_openssl zu aktivieren.
Soth

1
Schöne Lösung mit SwiftMailer! +1
Amal Murali

1
arrrgh. Ich kann Swiftmailer nicht zum Arbeiten bringen. Ich weiß nicht, wie man diesen "Komponisten" benutzt, also habe ich gerade die Swiftmailer-Zip von Github heruntergeladen, dann habe ich open_ssl aktiviert und dann meine Google Mail-E-Mail und mein Passwort angegeben, aber es hat immer noch nicht funktioniert.
Boi_echos

3
Ach, entschuldige meine Dummheit. Sie müssen Ihr Google Mail-Konto eröffnen, da Sie in einer E-Mail aufgefordert werden, die "weniger sichere App" zu aktivieren. dann funktioniert es jetzt heheh
boi_echos


33

Ich empfehle Pear Mail nicht. Es wurde seit 2010 nicht aktualisiert. Lesen Sie auch die Quelldateien. Der Quellcode ist fast veraltet, im PHP 4-Stil geschrieben und es wurden viele Fehler / Bugs gepostet (Google it). Ich benutze Swift Mailer.

Swift Mailer lässt sich in jede in PHP 5 geschriebene Webanwendung integrieren und bietet einen flexiblen und eleganten objektorientierten Ansatz für das Versenden von E-Mails mit einer Vielzahl von Funktionen.

Senden Sie E-Mails mit SMTP, sendmail, postfix oder einer eigenen Transport-Implementierung.

Unterstützungsserver, die Benutzername und Passwort und / oder Verschlüsselung erfordern.

Schützen Sie sich vor Header-Injection-Angriffen, ohne den Inhalt der Anforderungsdaten zu entfernen.

Senden Sie MIME-kompatible HTML / mehrteilige E-Mails.

Verwenden Sie ereignisgesteuerte Plugins, um die Bibliothek anzupassen.

Behandeln Sie große Anhänge und Inline- / eingebettete Bilder mit geringem Speicherbedarf.

Es ist eine kostenlose und Open Source- Version, die Sie herunterladen und auf Ihren Server hochladen können. (Die Funktionsliste wird von der Eigentümer-Website kopiert.)

Das Arbeitsbeispiel für Google Mail SSL / SMTP und Swift Mailer finden Sie hier ...

// Swift Mailer Library
require_once '../path/to/lib/swift_required.php';

// Mail Transport
$transport = Swift_SmtpTransport::newInstance('ssl://smtp.gmail.com', 465)
    ->setUsername('username@gmail.com') // Your Gmail Username
    ->setPassword('my_secure_gmail_password'); // Your Gmail Password

// Mailer
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance('Wonderful Subject Here')
    ->setFrom(array('sender@example.com' => 'Sender Name')) // can be $_POST['email'] etc...
    ->setTo(array('receiver@example.com' => 'Receiver Name')) // your email / multiple supported.
    ->setBody('Here is the <strong>message</strong> itself. It can be text or <h1>HTML</h1>.', 'text/html');

// Send the message
if ($mailer->send($message)) {
    echo 'Mail sent successfully.';
} else {
    echo 'I am sure, your configuration are not correct. :(';
}

Ich hoffe das hilft. Viel Spaß beim Codieren ... :)


1
Dies funktioniert nicht mehr, ich erhalte immer die Rückmeldung "535-5.7.8 Benutzername und Passwort nicht akzeptiert". Meine Anmeldeinformationen sind in Ordnung und ich habe "Weniger sichere Apps zulassen" auf "EIN" gesetzt. Kennt jemand eine Lösung dafür?
AndrewB

Swift scheint in PHP 5.x nicht zu funktionieren - versteht das nicht ?? verschmelzen - explodiert einfach.
HerrimanCoder

28
<?php
date_default_timezone_set('America/Toronto');

require_once('class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();

$body             = "gdssdh";
//$body             = eregi_replace("[\]",'',$body);

$mail->IsSMTP(); // telling the class to use SMTP
//$mail->Host       = "ssl://smtp.gmail.com"; // SMTP server
$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server
$mail->Username   = "user@gmail.com";  // GMAIL username
$mail->Password   = "password";            // GMAIL password

$mail->SetFrom('contact@prsps.in', 'PRSPS');

//$mail->AddReplyTo("user2@gmail.com', 'First Last");

$mail->Subject    = "PRSPS password";

//$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$address = "user2@yahoo.co.in";
$mail->AddAddress($address, "user2");

//$mail->AddAttachment("images/phpmailer.gif");      // attachment
//$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

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

?>

Warum stellen Sie den Host zweimal ein und welcher ist der richtige?
Emile Bergeron

Woher bekomme ich die Datei class.phpmailer.php? Nur Code einzufügen ist nicht so hilfreich. Bitte fügen Sie auch eine weitere Beschreibung des Codes hinzu!
GeneCode

Während ein Teil der Syntax veraltet ist, war PHPMailer die beste Lösung für mich, +1
zoltar

20

SwiftMailer kann E-Mails über externe Server senden.

Hier ist ein Beispiel, das zeigt, wie ein Google Mail-Server verwendet wird:

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));

14

Der in der Frage aufgeführte Code muss zwei Mal geändert werden

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

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


6

Senden Sie E-Mails mit der phpMailer-Bibliothek über Google Mail. Laden Sie die Bibliotheksdateien nicht von Github herunter

<?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!";
}

5

Ich hatte auch dieses Problem. Ich habe die richtigen Einstellungen vorgenommen und weniger sichere Apps aktiviert, aber es hat immer noch nicht funktioniert. Schließlich habe ich diese https://accounts.google.com/UnlockCaptcha aktiviert und es hat bei mir funktioniert. Ich hoffe das hilft jemandem.



4

Führen Sie die folgenden Befehle aus, um die Mail.php von PEAR in Ubuntu zu installieren:

    sudo apt-get install php-pear
    sudo pear install mail
    sudo pear install Net_SMTP
    sudo pear install Auth_SASL
    sudo pear install mail_mime

0

Ich habe eine Lösung für GSuite-Konten, die nicht das Sufix "@ gmail.com" haben. Ich denke auch, dass es für GSuite-Konten mit @ gmail.com funktionieren wird, aber ich habe es nicht versucht. Zunächst sollten Sie die Berechtigung haben, die Option "Allos weniger sichere App" für Ihr GSuite-Konto zu ändern. Wenn Sie über die Berechtigungen verfügen (Sie können Kontoeinstellungen-> Sicherheit überprüfen), müssen Sie die "Zwei-Schritt-Faktor-Authentifizierung" deaktivieren. Gehen Sie zum Ende der Seite und setzen Sie "Ja", um weniger sichere Anwendungen zuzulassen. Das ist alles. Wenn Sie keine Berechtigungen zum Ändern dieser Optionen haben, funktioniert die Lösung für diesen Thread nicht. Aktivieren Sie https://support.google.com/a/answer/6260879?hl=de , um Änderungen an der Option "Weniger zulassen ..." vorzunehmen.


0

Ich habe den Vorschlag von @shasi kanth ausprobiert, aber es hat nicht geklappt. Ich habe die Dokumentation gelesen und es wurden nur wenige Änderungen vorgenommen. Also habe ich es geschafft, E-Mails über Google Mail mit diesem Code zu senden, wobei vendor / autoload.php vom Komponisten mit Composer "swiftmailer / swiftmailer: ^ 6.0" benötigt wird:

<?php
     require_once 'vendor/autoload.php';
     $transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))->setUsername ('SendingMail')->setPassword ('Password');

     $mailer = new Swift_Mailer($transport);

     $message = (new Swift_Message('test'))
      ->setFrom(['Sending mail'])
      ->setTo(['Recipient mail'])
      ->setBody('Message')
  ;

     $result = $mailer->send($message);
    ?>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.