web-dev-qa-db-fra.com

Envoyer un e-mail à l'aide du serveur SMTP GMail à partir d'un PHP page

J'essaie d'envoyer un courrier électronique via le serveur SMTP de GMail à partir d'une page PHP, mais le message d'erreur suivant s'affiche:

Échec d'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 aider? Voici mon 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>");
 }
?>
362
skb
// 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>');
}
341
pavan kumar

Avec Swift mailer , il est assez facile d’envoyer un courrier via les informations d’identification 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('[email protected]' => 'ABC'))
  ->setTo(array('[email protected]'))
  ->setBody('This is a test mail.');

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

Votre code ne semble pas utiliser TLS (SSL), qui est nécessaire pour remettre le courrier à Google (et utilise 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 de nom d’hôte.

53
crb

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

Swift Mailer s’intègre à n’importe quelle application Web écrite en PHP 5, offrant une approche souple et élégante orientée objet pour l’envoi de courriels comportant une multitude de fonctionnalités.

Envoyer des emails en utilisant SMTP, sendmail, postfix ou un transport personnalisé mise en œuvre de votre propre.

Supportez les serveurs qui nécessitent un nom d’utilisateur et un mot de passe et/ou un chiffrement.

Protéger des attaques par injection d'en-tête sans supprimer les données de la demande contenu.

Envoyez des emails HTML/en plusieurs parties compatibles MIME.

Utilisez des plugins événementiels pour personnaliser la bibliothèque.

Manipulez les pièces jointes volumineuses et les images en ligne/incorporées avec peu de mémoire utilisation.

C'est une source libre et ouverte que vous pouvez Télécharger Swift Mailer et télécharger sur votre serveur. (La liste des fonctionnalités est copiée à partir du site Web du propriétaire).

L'exemple de travail de Gmail SSL/SMTP et de 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('[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. :(';
}

J'espère que ça aide. Bonne codage ... :)

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

?>
28
Deept Raghav

SwiftMailer peut envoyer des courriers électroniques via des serveurs externes.

voici un exemple qui montre comment utiliser un serveur Gmail:

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));
20
Pekka 웃

Le code indiqué dans la question nécessite deux modifications

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

Le port 465 est requis pour une connexion SSL.

14
s01ipsist

Envoyez un courrier en utilisant la bibliothèque phpMailer via Gmail S'il vous plaît télécharger les fichiers de la bibliothèque depuis 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 = "[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!";
}
5
Bhavin Solanki

Gmail nécessite le port 465, et c'est aussi le code de phpmailer :)

4
sandeep

J'ai aussi eu ce problème. J'ai défini les paramètres corrects et activé des applications moins sécurisées, mais cela ne fonctionnait toujours pas. Enfin, j'ai activé cette https://accounts.google.com/UnlockCaptcha , et cela a fonctionné pour moi. J'espère que ça aidera quelqu'un.

3
Strategist

Pour installer le fichier Mail.php de PEAR dans Ubuntu, exécutez le jeu de commandes suivant:

    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
3
Nahid

J'ai une solution pour les comptes GSuite qui n'a pas le suffixe "@ gmail.com". De plus, je pense que cela fonctionnera pour les comptes GSuite avec @ gmail.com, mais je n’ai pas essayé. Tout d'abord, vous devriez avoir les privilèges pour changer l'option "allos¿w less secure app" pour votre compte GSuite. Si vous avez les privilèges (vous pouvez vérifier les paramètres du compte -> sécurité), vous devez désactiver "l'authentification en deux étapes", aller à la fin de la page et définir "oui" pour autoriser les applications moins sécurisées. C'est tout. Si vous ne disposez pas des privilèges nécessaires pour modifier ces options, la solution pour ce fil de discussion ne fonctionnera pas. Cochez https://support.google.com/a/answer/6260879?hl=fr pour modifier l’option "autoriser moins ...".