IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHPMailer avec GMAIL


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut PHPMailer avec GMAIL
    Bonjour,

    j'ai une page de contact qui envoie le message à une adresse GMAIL. J'utilise pour cela PHPMailer, mais lors de l'envoi, message d'erreur :
    2025-09-13 14:56:54 SERVER -> CLIENT:
    SMTP connect() failed. https://github.com/PHPMailer/PHPMail...roubleshooting
    SMTP connect() failed. https://github.com/PHPMailer/PHPMail...roubleshooting
    Mon code est le suivant :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static function send(string $msg, string $subject): void
        { 
                $mail = new PHPMailer(); 
                $mail->isHTML(true);
                $mail->CharSet = "UTF-8";
     
                //$mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
                $mail->isSMTP();                                            //Send using SMTP à enlever si en ligne
                $mail->Host       = 'smtp.gmail.com';                                    //Set the SMTP server to send through
                $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
                $mail->Username   = 'une_adresse@gmail.com';                     //SMTP username
                $mail->Password   = 'xxxxx';                               //SMTP password
                $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;                                //Enable implicit TLS encryption
                $mail->Port       = 465;
                ///debug
                $mail->SMTPDebug = 2; // 0 = off, 1 = commandes, 2 = détails connexion
                $mail->Debugoutput = 'html';
                etc


    chatGPT me parle de mot de passe application à générer dans mon compte GMAIL. C'est bon ? (Avant de me lancer, je demande confirmation)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 318
    Par défaut
    Tu peux regarder ceci :
    https://github.com/PHPMailer/PHPMail...il_xoauth.phps

    Sinon en créant un mot de passe d'application ça devrait fonctionner, mais tu vas devoir avoir le 2FA activé sur ton compte Google (si ce n'est pas le cas).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Merci Christophe de me faire une réponse.

    J'ai essayé ta proposition dans Github. Afin de la tester, j'ai créé un fichier test.php à la racine de mon projet.

    Voici le code testé (à noter que j'avais installé PHPMailer avec composer) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    <?php
     
    /**
     * This example shows how to send via Google's Gmail servers using XOAUTH2 authentication
     * using the league/oauth2-client to provide the OAuth2 token.
     * To use a different OAuth2 library create a wrapper class that implements OAuthTokenProvider and
     * pass that wrapper class to PHPMailer::setOAuth().
     */
     
    //Import PHPMailer classes into the global namespace
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\OAuth;
    //Alias the League Google OAuth2 provider class
    use League\OAuth2\Client\Provider\Google;
     
    //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');
     
    //Load dependencies from composer
    //If this causes an error, run 'composer install'
    require 'vendor/autoload.php';   //comme on est à la racine du projet, j'ai adapté le chemin
     
    //Create a new PHPMailer instance
    $mail = new PHPMailer();
     
    //Tell PHPMailer to use SMTP
    $mail->isSMTP();
     
    //Enable SMTP debugging
    //SMTP::DEBUG_OFF = off (for production use)
    //SMTP::DEBUG_CLIENT = client messages
    //SMTP::DEBUG_SERVER = client and server messages
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;
     
    //Set the hostname of the mail server
    $mail->Host = 'smtp.gmail.com';
     
    //Set the SMTP port number:
    // - 465 for SMTP with implicit TLS, a.k.a. RFC8314 SMTPS or
    // - 587 for SMTP+STARTTLS
    $mail->Port = 465;
     
    //Set the encryption mechanism to use:
    // - SMTPS (implicit TLS on port 465) or
    // - STARTTLS (explicit TLS on port 587)
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
     
    //Whether to use SMTP authentication
    $mail->SMTPAuth = true;
     
    //Set AuthType to use XOAUTH2
    $mail->AuthType = 'XOAUTH2';
     
    $email = 'une_adresse_que_j_accède@gmail.com';
     
    //Start Option 1: Use league/oauth2-client as OAuth2 token provider
    //Fill in authentication details here
    //Either the gmail account owner, or the user that gave consent
     
    $clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
    $clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
     
    //Obtained by configuring and running get_oauth_token.php
    //after setting up an app in Google Developer Console.
    $refreshToken = 'RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0';
     
    //Create a new OAuth2 provider instance
    $provider = new Google(
        [
            'clientId' => $clientId,
            'clientSecret' => $clientSecret,
        ]
    );
     
    //Pass the OAuth provider instance to PHPMailer
    $mail->setOAuth(
        new OAuth(
            [
                'provider' => $provider,
                'clientId' => $clientId,
                'clientSecret' => $clientSecret,
                'refreshToken' => $refreshToken,
                'userName' => $email,
            ]
        )
    );
    //End Option 1
     
    //Option 2: Another OAuth library as OAuth2 token provider
    //Set up the other oauth library as per its documentation
    //Then create the wrapper class that implements OAuthTokenProvider
    $oauthTokenProvider = new MyOAuthTokenProvider(/* Email, ClientId, ClientSecret, etc. */);
     
    //Pass the implementation of OAuthTokenProvider to PHPMailer
    $mail->setOAuth($oauthTokenProvider);
    //End Option 2
     
    //Set who the message is to be sent from
    //For gmail, this generally needs to be the same as the user you logged in as
    $mail->setFrom($email, 'Laurent Schmitt');
     
    //Set who the me0ssage is to be sent to
    $mail->addAddress('lune_adresse_que_j_accède@gmail.com', 'Laurent Schmitt');
     
    //Set the subject line
    $mail->Subject = 'PHPMailer GMail XOAUTH2 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->CharSet = PHPMailer::CHARSET_UTF8;
    $mail->msgHTML(file_get_contents('contentsutf8.html'), __DIR__);
     
    //Replace the plain text body with one created manually
    $mail->AltBody = 'This is a plain-text message body';
     
    //send the message, check for errors
    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'Message sent!';
    }

    Ca me met Cette page ne fonctionne pas
    Impossible de traiter cette demande via pasdpanique.fr à l'heure actuelle.
    HTTP ERROR 500

    Que faut-il faire STP ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 318
    Par défaut
    De ce qiue j'ai vu dans les commentaires du code, il faut créer une app dans la console développeur du compte Google, tu pars vers une galère. Voir plutôt coté mot de passe d'application.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    C'est peut-être moins galère avec le mot de passe d'applications mais un peu quand même :
    2025-09-14 20:16:37 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP 5b1f17b1804b1-45e016b5cbcsm151569455e9.11 - gsmtp
    2025-09-14 20:16:37 CLIENT -> SERVER: EHLO pasdpanique.fr
    2025-09-14 20:16:37 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [2001:bc8:1201:54:46a8:42ff:fe21:a0a]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
    2025-09-14 20:16:37 CLIENT -> SERVER: AUTH LOGIN
    2025-09-14 20:16:37 SERVER -> CLIENT: 334 VXNlcm5hbWU6
    2025-09-14 20:16:37 CLIENT -> SERVER: [credentials hidden]
    2025-09-14 20:16:37 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
    2025-09-14 20:16:37 CLIENT -> SERVER: [credentials hidden]
    2025-09-14 20:16:37 SERVER -> CLIENT: 535-5.7.8 Username and Password not accepted. For more information, go to535 5.7.8 https://support.google.com/mail/?p=BadCredentials 5b1f17b1804b1-45e016b5cbcsm151569455e9.11 - gsmtp
    2025-09-14 20:16:37 SMTP ERROR: Password command failed: 535-5.7.8 Username and Password not accepted. For more information, go to535 5.7.8 https://support.google.com/mail/?p=BadCredentials 5b1f17b1804b1-45e016b5cbcsm151569455e9.11 - gsmtp
    SMTP Error: Could not authenticate.
    2025-09-14 20:16:37 CLIENT -> SERVER: QUIT
    2025-09-14 20:16:37 SERVER -> CLIENT: 221 2.0.0 closing connection 5b1f17b1804b1-45e016b5cbcsm151569455e9.11 - gsmtp
    SMTP connect() failed. https://github.com/PHPMailer/PHPMail...roubleshooting
    SMTP connect() failed. https://github.com/PHPMailer/PHPMail...roubleshooting
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 441
    Par défaut
    Bonjour,

    Mon dernier test fonctionnel était à partir de cet exemple https://github.com/PHPMailer/PHPMail...les/gmail.phps
    en modifiant les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $mail->Username = 'username@gmail.com'; // ton adresse gmail
     
    $mail->Password = 'yourpassword'; // le mdp sur 16-digit que tu as créé sur myaccount.google.com/apppasswords
     
    $mail->addAddress('username@gmail.com', 'John Doe'); // ton adresse gmail pour vérifier la réception
     
    $mail->msgHTML("<b>It's work!</b>", __DIR__); // définir le contenu html du message
     
    //$mail->addAttachment('images/phpmailer_mini.png'); // désactiver l'ajout de pièce jointe
    Le mot de passe à renseigner dans ce code est celui créé dans https://myaccount.google.com/apppasswords

Discussions similaires

  1. [PHP 7] Difficulté avec PHPmailer et Gmail
    Par maub85 dans le forum Langage
    Réponses: 5
    Dernier message: 07/02/2019, 15h13
  2. SMS avec phpmailer et gmail -Utilisateur inconnu
    Par young_old_man dans le forum Général Conception Web
    Réponses: 10
    Dernier message: 02/08/2012, 01h21
  3. SMS avec gmail et phpmailer
    Par young_old_man dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/07/2012, 02h58
  4. [Mail] envoi d'un mail, problème avec gmail
    Par kitty2006 dans le forum Langage
    Réponses: 11
    Dernier message: 30/09/2006, 08h45
  5. Réponses: 6
    Dernier message: 09/03/2006, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo