web-dev-qa-db-fra.com

envoyer un email en utilisant le serveur SMTP Gmail via PHP Mailer

Je souhaite envoyer un courrier électronique à l'aide du serveur Gmail SMTP via PHP Mailer.

c'est mon code

<?php
require_once('class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = '[email protected]';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = '[email protected]';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', 'Information');

$mail->IsHTML(true);
$mail->Subject    = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
$mail->Body    = "Hello";

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

mais je reçois cette erreur suivante

Mailer Error: SMTP Error: The following recipients failed: [email protected]

SMTP server error: SMTP AUTH is required for message submission on port 587

mon domaine est vatandesign.ir

62
Mohammad Masoudian
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("[email protected]");

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

Ce code ci-dessus a été testé et fonctionne pour moi.

Il se peut que vous ayez besoin de $mail->SMTPSecure = 'ssl';

Assurez-vous également que la vérification en deux étapes n'est pas activée pour ce compte, car cela peut également causer des problèmes.

MIS À JOUR

Vous pouvez essayer de changer $ mail-> SMTP en:

$mail->SMTPSecure = 'tls';

Il est à noter que certains serveurs SMTP bloquent les connexions ..__ Certains serveurs SMTP ne prennent pas en charge les connexions SSL (ou TLS).

118
andrew-caulfield

Je viens donc de résoudre ma propre erreur "Échec de la connexion SMTP" et je voulais publier la solution au cas où cela aiderait quelqu'un d'autre.

J'ai utilisé le code EXACT donné dans l'exemple de fichier gmail.phps de PHPMailer. Cela fonctionnait simplement lorsque j'utilisais MAMP, puis une erreur de connexion SMTP apparaissait une fois que je l'avais transférée sur mon serveur personnel.

J'ai lu toutes les réponses au débordement de pile que j'ai lues et toute la documentation de dépannage de PHPMailer indique que ce n'est pas un problème avec PHPMailer. Qu'il s'agissait d'un problème de paramètres côté serveur. J'ai essayé différents ports (587, 465, 25), le cryptage "SSL" et "TLS". J'ai vérifié que openssl était activé dans mon fichier php.ini. J'ai vérifié qu'il n'y avait pas de problème de pare-feu. Tout a été vérifié et toujours rien.

La solution était que je devais supprimer cette ligne:

$mail->isSMTP();

Maintenant tout fonctionne. Je ne sais pas pourquoi, mais ça marche. Le reste de mon code est copié et collé à partir du fichier d'exemple PHPMailer.

26
Evan Butler

Il est également intéressant de noter que si l'authentification à deux facteurs est activée, vous devez configurer un mot de passe spécifique à l'application à utiliser à la place du mot de passe de votre compte de messagerie.

Vous pouvez générer un mot de passe spécifique à l'application en suivant les instructions suivantes: https://support.google.com/accounts/answer/185833

Puis définissez $mail->Password sur le mot de passe spécifique à votre application.

8
Tim Carr

Il semble que votre serveur n’a pas réussi à établir une connexion avec le serveur SMTP de Gmail. Voici quelques astuces pour résoudre ce problème: 1) vérifiez si SSL est correctement configuré sur votre PHP t installé par défaut sur PHP, vous devez vérifier votre configuration dans phph.ini) . 2) vérifier si votre pare-feu laisse passer les appels sortants sur le port requis (ici 465 ou 587). Utilisez telnet pour le faire. Si le port n'est pas ouvert, sysdmin aura alors besoin de l'assistance pour configurer la configuration . J'espère que vous allez régler cela rapidement!

5
Pr Shadoko

Ouvrez ce Link et sélectionnez suivez les instructions de Google. Les serveurs de Google bloquent toute tentative de serveurs inconnus. Une fois que vous aurez cliqué sur Captcha, vérifiez que tout va bien 

3
Yasin Hassanien

Google traite les comptes Gmail différemment en fonction des informations utilisateur disponibles, probablement pour limiter les spammeurs.

Je ne pouvais pas utiliser SMTP tant que je n'avais pas vérifié le téléphone. A fait un autre compte à vérifier et j'ai été en mesure de le confirmer.

1
Forgot My Login 12
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
brandenM

ce code fonctionne bien pour moi 

    $mail = new PHPMailer;
    //Enable SMTP debugging. 
    $mail->SMTPDebug = 0;
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP Host name                          
    $mail->Host = $hostname;
    //Set this to true if SMTP Host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password     
    $mail->Username = $sender;
    $mail->Password = $mail_password;
    //If SMTP requires TLS encryption then set it
    $mail->SMTPSecure = "ssl";
    //Set TCP port to connect to 
    $mail->Port = 465;
    $mail->From = $sender;  
    $mail->FromName = $sender_name;
    $mail->addAddress($to);
    $mail->isHTML(true);
    $mail->Subject = $Subject;
    $mail->Body = $Body;
    $mail->AltBody = "This is the plain text version of the email content";
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    }
    else {
           echo 'Mail Sent Successfully';
    }
0
Zohaib Hussain

Anderscc a le correct. Merci. Cela a fonctionné pour moi mais pas à 100%. 

Je devais mettre

$ mail-> SMTPDebug = 0; La définition sur 1 peut provoquer des erreurs, en particulier si vous transmettez des données au format JSON à la page suivante. Exemple - Vérification si un courrier est envoyé, en utilisant json pour transmettre des données via ajax.

J'ai dû abaisser les paramètres de sécurité de mon compte Gmail pour supprimer les erreurs: "Echec de la connexion SMTP ()" et "ERREUR SMTP: La commande du mot de passe a échoué" 

Solution: Ce problème peut être causé par les applications "moins sécurisées" qui essaient d'utiliser le compte de messagerie (ceci est conforme à l'aide de Google, ne sachant pas comment elles jugent ce qui est sécurisé ou non) OR vous essayez de vous connecter plusieurs fois de suite OR si vous changez de pays (par exemple, utilisez un VPN, déplacez le code sur un serveur différent ou essayez en réalité de vous connecter depuis une autre partie du monde).

Liens qui résolvent le problème (vous devez être connecté à un compte Google):

Remarque: Vous pouvez accéder au lien de réponse stackoverflow suivant pour une référence plus détaillée.

https://stackoverflow.com/a/25175234

0
Akshay P. Raul

Si vous utilisez cPanel, vous devez simplement cliquer sur la petite case qui vous permet d’envoyer des serveurs externes par SMTP.

Connexion à CPanel> Paramètres Tweak> Tous> "Limiter le SMTP sortant à root, à exim et à mailman (FKA SMTP Tweak)"

Comme répondu ici:

"Mot de passe non accepté du serveur: 535 données d'authentification incorrectes" lors de l'envoi avec GMail et phpMailer

0
Tristanisginger