409 votes

Envoyer des e-mails en utilisant le serveur SMTP GMail à partir d'une page PHP

J'essaie d'envoyer un courriel via le serveur SMTP de GMail à partir d'une page PHP, mais j'obtiens cette erreur :

échec de l'authentification [SMTP : le serveur SMTP ne prend pas en charge l'authentification (code : 250, réponse : mx.google.com à votre service, [98.117.99.235] SIZE 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES PIPELINING)]

Quelqu'un peut-il m'aider ? Voici mon 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>");
 }
?>

364voto

pavan kumar Points 2018
// 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>');
}

148 votes

Ce qui est Mail.php Où puis-je obtenir ce fichier ?

19 votes

Quelqu'un pourrait-il me donner un lien où je peux obtenir le fichier Mail.php. Parce que je l'ai essayé et il ne fonctionne pas Merci

1 votes

Quelqu'un pourrait-il poster un exemple de Mail.php ? C'est la seule pièce qui me manque, sinon je pense que cela fonctionnera. Merci d'avance.

111voto

shasi Points 1862

Utilisation de Courrier rapide il est très facile d'envoyer un message par le biais des informations d'identification de Gmail :

<?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 votes

Cela a fonctionné "au premier degré" en changeant simplement le GMAIL_USERNAME, le GMAIL_PASSWORD et les adresses "From" et "To". Aucune autre solution n'a fonctionné pour moi. Merci.

8 votes

Je suis d'accord, swift mailer est une solution de courrier électronique qui est beaucoup plus facile que de s'embêter avec pear. N'oubliez pas d'activer l'extension php_openssl de PHP.

1 votes

Belle solution utilisant SwiftMailer ! +1

55voto

crb Points 4631

Votre code ne semble pas utiliser TLS (SSL), qui est nécessaires à la distribution du courrier à Google (et utilisant les ports 465 ou 587) .

Vous pouvez le faire en définissant

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

Votre code ressemble étrangement à cet exemple qui fait référence à ssl:// dans le schéma du nom d'hôte.

34voto

Madan Sapkota Points 3464

Je ne recommande pas Pear Mail. Il n'a pas été mis à jour depuis 2010. Lisez également les fichiers sources ; le code source est presque obsolète, écrit dans le style PHP 4 et de nombreuses erreurs / bugs ont été signalés (Google). J'utilise Swift Mailer.

Courrier rapide s'intègre à n'importe quelle application web écrite en PHP 5, offrant une approche orientée objet flexible et élégante pour l'envoi d'e-mails avec une multitude de fonctionnalités.

Envoyez des courriels en utilisant SMTP, sendmail, postfix ou une implémentation personnalisée de Transport personnalisée de votre propre implémentation.

Prendre en charge les serveurs qui exigent un nom d'utilisateur et un mot de passe et/ou un cryptage.

Protection contre les attaques par injection d'en-tête sans suppression des données de la demande. contenu.

Envoyez des courriers électroniques HTML/multipart conformes à MIME.

Utilisez des plugins orientés événements pour personnaliser la bibliothèque.

Traitez les pièces jointes volumineuses et les images en ligne/incorporées avec une faible utilisation.

Il s'agit d'une source libre et ouverte que vous pouvez Télécharger Swift Mailer et le télécharger sur votre serveur. (La liste des fonctionnalités est copiée du site web du propriétaire).

L'exemple fonctionnel de Gmail SSL/SMTP et Swift Mailer est ici...

// 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. :(';
}

1 votes

Cela ne fonctionne plus, je reçois toujours le message de retour "535-5.7.8 Username and Password not accepted". Mes informations d'identification sont correctes et j'ai réglé l'option "allow less-secure apps" sur ON. Quelqu'un connaît-il une solution à ce problème ?

0 votes

Swift ne semble pas fonctionner en PHP 5.x - il ne comprend pas le ? ? coalesce - il explose.

28voto

Raghav Bhushan Points 800
<?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!";
}

?>

0 votes

Pourquoi définir deux fois l'hôte et lequel est le bon ?

1 votes

Où puis-je obtenir le fichier class.phpmailer.php ? Coller le code seulement n'est pas si utile, s'il vous plaît inclure plus de description sur le code aussi !

0 votes

Bien qu'une partie de la syntaxe soit dépassée, PHPMailer s'est avéré être la meilleure solution pour moi, +1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X