envoyer un courriel en utilisant le serveur SMTP Gmail par L'intermédiaire de PHP Mailer

je voudrais envoyer un e-mail en utilisant Gmail SMTP serveur par 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 = 'MyUsername@gmail.com';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = 'MyUsername@gmail.com';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('anotherValidGmail@gmail.com');
$mail->AddReplyTo('phoenixd110@gmail.com', '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: anotherValidGmail@gmail.com

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

mon domaine est vatandesign.ir

60
demandé sur Mohammad Masoudian 2013-04-17 02:34:57

12 réponses

$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@gmail.com";
$mail->Password = "password";
$mail->SetFrom("example@gmail.com");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("email@gmail.com");

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

ce code ci-dessus a été testé et a fonctionné pour moi.

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

également assurez-vous que vous n'avez pas deux vérification étape allumée pour ce compte que cela peut causer des problèmes aussi.

UPDATED

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

$mail->SMTPSecure = 'tls';

il est intéressant de noter que certains serveurs SMTP bloquent les connexions. Quelque Les serveurs SMTP ne prennent pas en charge les connexions SSL (ou TLS ).

111
répondu andrew-caulfield 2015-11-23 17:09:51

donc j'ai résolu ma propre erreur" Échec de connexion SMTP " et je voulais poster la solution juste au cas où il aide quelqu'un d'autre.

j'ai utilisé le code EXACT donné dans le PHPMailer exemple gmail.phps fichier. Cela a fonctionné tout simplement pendant que J'utilisais MAMP et ensuite j'ai eu l'erreur de connexion SMTP une fois que je l'ai déplacée sur mon serveur personnel.

toutes les réponses de dépassement de pile que j'ai lues, et toute la documentation de dépannage de PHPMailer dit que ce n'était pas un problème avec PHPMailer. Que c'était un problème de réglages du côté du serveur. J'ai essayé différents ports (587, 465, 25), j'ai essayé le cryptage 'SSL' et 'TLS'. J'ai vérifié qu'openssl était activé dans mon php.fichier ini. J'ai vérifié qu'il n'y avait pas de problème de pare-feu. Tout vérifié, et toujours rien.

la solution était que je devais enlever cette ligne:

$mail->isSMTP();

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

24
répondu Evan Butler 2015-07-02 21:12:43

vaut également la peine de noter que si vous avez une authentification à deux facteurs activée, vous aurez besoin de 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 ces instructions: https://support.google.com/accounts/answer/185833

puis $mail->Password à votre mot de passe spécifique à votre application.

7
répondu Tim Carr 2014-01-22 12:05:25

il semble que votre serveur ne réussisse pas à établir une connexion avec Gmail SMTP server. Voici quelques conseils pour résoudre ce: 1) vérifiez si SSL correctement configuré sur votre PHP (module qui le gère n'est pas installé par défaut sur PHP. Vous devez vérifier votre configuration dans phph.ini). 2) vérifiez si votre pare-feu autorise les appels sortants au port requis (ici 465 ou 587). Utilisez telnet pour ce faire. Si le port n'est pas ouvert, vous aurez alors besoin de l'aide de sysdmin pour configurer la configuration. Je espère que vous allez trouver une solution rapidement!

5
répondu Pr Shadoko 2013-07-26 08:26:25

ouvrir ce lien et sélectionnez Suivre les instructions Google serveurs bloque toutes les tentatives de serveurs inconnus donc une fois que vous cliquez sur captcha vérifier chaque chose sera très bien

3
répondu Yasin Hassanien 2013-10-07 09:56:05

Google traitent comptes Gmail différemment selon les informations disponibles de l'utilisateur, probablement pour freiner les polluposteurs.

Je ne pouvais pas utiliser SMTP jusqu'à ce que je fasse la vérification du téléphone. J'ai fait un autre compte pour vérifier et j'ai pu le confirmer.

1
répondu Forgot My Login 12 2016-04-19 15:29:35

ne peut pas commenter mais oui, supprimer

$mail->isSMTP();

et tout ira bien!

1
répondu Simon Ilett 2016-09-25 09:53:00

ce code fonctionne très 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
répondu Zohaib Hussain 2016-10-27 05:47:39

Anderscc a raison. Grâce. Ça a marché pour moi, mais pas à 100%.

j'ai dû mettre

$ mail - > SMTPDebug = 0; Le paramétrer à 1, peut causer des erreurs surtout si vous passez quelques données comme json à la page suivante. Exemple - effectuer la vérification si le courrier est envoyé, en utilisant JSON pour passer des données par ajax.

j'ai dû baisser les paramètres de sécurité de mon compte gmail pour me débarrasser des erreurs: "SMTP connect() failed" et " SMTP Erreur: la commande Password a échoué "

Solution: Ce problème peut être causé soit par des applications "moins sécurisées" essayant d'utiliser le compte email (c'est selon l'aide de google, pas sûr comment ils jugent ce qui est sécurisé et ce qui ne l'est pas) ou si vous essayez de vous connecter plusieurs fois d'affilée ou si vous changez de pays (par exemple utiliser VPN, déplacer le code vers un autre serveur ou essayer de se connecter à partir de différentes parties du monde).

liens qui fixent le problème (vous devez être connecté au compte google):

Note: Vous pouvez aller au lien de réponse stackoverflow suivant pour plus de détails.

https://stackoverflow.com/a/25175234

0
répondu Akshay P. Raul 2017-07-09 20:32:45

si vous utilisez cPanel vous devez juste cliquer La Petite boîte qui vous permet d'envoyer aux serveurs externes par SMTP.

Connexion au CPanel > Ajuster les Paramètres de > > > "Restreindre SMTP sortant de la racine, exim, et mailman (autrefois connue sous la dénomination SMTP Tweak)"

Comme réponse ici:

"Mot de passe n'est pas acceptée à partir du serveur: 535 Incorrecte des données d'authentification" lors de l'envoi avec GMail et phpMailer

0
répondu Tristanisginger 2017-10-26 15:32:24
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
répondu brandenM 2018-03-29 04:17:48

je pense que c'est un problème de connexion vous pouvez obtenir le code ici http://skillrow.com/sending-mail-using-smtp-and-php /

include(“smtpfile.php“);
include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id

$smtp=new smtp_class;

$smtp->host_name=”www.abc.com“; // name of host
$smtp->host_port=25;//port of host

$smtp->timeout=10;
$smtp->data_timeout=0;
$smtp->debug=1;
$smtp->html_debug=1;
$smtp->pop3_auth_host=””;
$smtp->ssl=0;
$smtp->start_tls=0;
$smtp->localhost=”localhost“;
$smtp->direct_delivery=0;

$smtp->user=”smtp username”;
$smtp->realm=””;
$smtp->password=”smtp password“;

$smtp->workstation=””;
$smtp->authentication_mechanism=””;

$mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”);

if($mail){
   echo “Mail sent“;
}else{
   echo $smtp->error;
}
-1
répondu user3445130 2014-08-28 10:50:43