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 <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "smtp.gmail.com";
$port = "587";
$username = "[email protected]";
$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>");
 }
?>
skb
quelle

Antworten:

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

$from = '<[email protected]>';
$to = '<[email protected]>';
$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' => '[email protected]',
        'password' => 'passwordxxx'
    ));

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

if (PEAR::isError($mail)) {
    echo('<p>' . $mail->getMessage() . '</p>');
} else {
    echo('<p>Message successfully sent!</p>');
}
Pavan Kumar
quelle
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 [email protected] 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('[email protected]' => 'ABC'))
  ->setTo(array('[email protected]'))
  ->setBody('This is a test mail.');

$result = $mailer->send($message);
?>
Shasi Kanth
quelle
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('[email protected]') // 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('[email protected]' => 'Sender Name')) // can be $_POST['email'] etc...
    ->setTo(array('[email protected]' => '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 ... :)

Madan Sapkota
quelle
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   = "[email protected]";  // GMAIL username
$mail->Password   = "password";            // GMAIL password

$mail->SetFrom('[email protected]', 'PRSPS');

//$mail->AddReplyTo("[email protected]', '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 = "[email protected]";
$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!";
}

?>
Deept Raghav
quelle
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));
Pekka
quelle
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.

s01ipsist
quelle
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 = "[email protected]";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom('[email protected]', 'First Last');
//Set an alternative reply-to address
$mail->addReplyTo('[email protected]', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('[email protected]', '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!";
}
Bhavin Solanki
quelle
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.

Stratege
quelle
4

Google Mail benötigt Port 465 und es ist auch der Code von phpmailer :)

Peter Mortensen
quelle
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
Nahid
quelle
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.

Diego Andrés Díaz Espinoza
quelle
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);
    ?>
sjuesju
quelle