[PluXml 5.8] Envoi de mel par smtp

cpalocpalo Member
décembre 2019 modifié dans Version en cours de développement

Bonjour,

Dans configuration avancée il y a l'option envoi de mel par smtp.

Si on la sélectionne c'est pour permettre l'utilisation de certains plugins, ou bien il y a une option native de pluxml pour l'envoi de mail?

Mots clés:

Réponses

  • HarukaHaruka PluXml Project Manager
    décembre 2019 modifié

    Bonjour,

    PluXml 5.8, permettra nativement d'envoyer des mails via un serveur SMTP, grâce à la librairie PHPMailer et une nouvelle fonction $plxUtils->sendMailPhpMailer(). Cette nouveauté a été intégrée avec la réinitialisation de mot de passe, qui est désormais possible au travers de l'envoi d'un e-mail à l'utilisateur.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Et cette version 5.8 va gérer oauth2 pour les comptes en @gmail.com ?

  • HarukaHaruka PluXml Project Manager
    décembre 2019 modifié

    C'est possible de l'intégrer à PluXml, puisque PHPMailer permet de gérer oauth2, mais il y a tellement de dépendances à intégrer avec composer, que je ne souhaite pas ça pour PluXml, du moins pour l'instant. En revanche, ça pourrait faire l'objet d'un plugin.

  • Cela veut dire que si je fais un formulaire de contact (au lieu d'utiliser un des plugins existant) je pourrai utiliser phpMailer sans installer la librairie nécessaire mais en faisant appel dans mon formulaire à cette nouvelle fonction?

  • HarukaHaruka PluXml Project Manager

    Oui c'est possible. Tu peux prendre l'exemple de la fonction : $plxAdmin->sendLostPasswordEmail() qui fait appel à $plxUtils->sendMailPhpMailer(). Cependant, la class plxUtils n’accédant pas à la configuration du site, il faut d'abord récupérer les éléments nécessaires de configuration avant des les envoyer à $plxUtils->sendMailPhpMailer().

    Exemple :

    if($this->aConf['smtp_activation']){
      $mailer='smtp';
      $smtpHost=$this->aConf['smtp_server'];
      $smtpUsername=$this->aConf['smtp_username'];
      $smtpPassword=$this->aConf['smtp_password'];
      $smtpPort=$this->aConf['smtp_port'];
      $smtpSecure=$this->aConf['smtp_security'];
    }
    if(plxUtils::sendMailPhpMailer($mail['name'],$mail['from'],$user['email'],$mail['subject'],$mail['body'],false,$mailer,$smtpHost,$smtpUsername,$smtpPassword,$smtpPort,$smtpSecure)){
      $this->aUsers[$user_id]['password_token']=$lostPasswordToken;
      $this->aUsers[$user_id]['password_token_expiry']=$lostPasswordTokenExpiry;
      $this->editUsers($user_id,true);
    }
    

    En réalité c'était déjà possible avant la version 5.8, puisque la fonction $plxUtils->sendMail() permet déjà d'envoyer des e-mails, c'est d'ailleurs elle qui est utilisé par plusieurs plugins, et c'est pour cela qu'elle est conservée.

    Cependant, $plxUtils->sendMail() ne permet d'envoyer des e-mails qu'au travers du mailer installé localement sur la machine qui héberge le site (par exemple : exim4). La nouvelle fonction $plxUtils->sendMailPhpMailer(), permet également cela, mais apporte en plus l'envoi d'e-mails au travers d'un serveur SMTP.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator


    Bon, j'ai écrit le plugin et il fonctionne avec OAuth2 pour un compte GMail.

    Mais avant d'utiliser le plugin, il faut aller sur le site de Google pour obtenir des clés secrête et publique. Puis lancer en local une page PHP pour obtenir un jeton d'accès provisoire au compte GMail. C'est loin d'être évident au premier abord. Et pour finir de décourager les plus timides, c'est en anglais.

    Une méthode plus simple est d'activer l'authentification en 2 étapes sur le compte Google. Si vous ne l'avez pas encore fait, c'est mal car le couple login/mot de passe n'offre plus une sécurité suffisante aujourd'hui.

    Ensuite, il suffit de récupérer une chaîne de caractères à cette page et de l'utiliser comme mot de passe. le serveur stmp.gmail.com s'utilise simplement sur le port 587 et avec starttls comme sécurité pour les échanges avec le serveur.

    Concernant les dépendances, elles se gèrent toutes seules avec l'outil composer. Le fichier composer.json pour mon plugin ressemble à ceci :

    {

       "name": "kazimentou/kz-phpmailer",

       "description": "Addon for PluXml which integrates PHPMailer library",

       "require": {

           "phpmailer/phpmailer": "^6.1",

           "league/oauth2-google": "^3.0"

       },

       "authors": [

           {

               "name": "bazooka07",

               "email": "kazimentou@gmail.com"

           }

       ]

    }

    Ce n'est pas compliqué !

    Je trouve que la façon d'intégrer PHPMailer dans PluXml 5.8 très maladroite. Il faut créer un dossier séparé et utiliser composer. Et il n'y a aucune aide pour le débogage quand cela part en vrille et aucun moyen de tester la connexion.

  • HarukaHaruka PluXml Project Manager
    décembre 2019 modifié

    Je n'ai jamais dit que c'était compliqué... Mais je ne suis pas encore convaincu par le fait d'intégrer composer et toutes les dépendances de PhpMailer à PluXml, qui dans sa philosophie se veut être le plus simple et léger possible.

    Ce n'est plus un fusil de chasse, c'est un char d’assaut ;-)

    Néanmoins, utiliser composer (et oauth2) dans PluXml, ça peut apporter d'autres perspectives d'évolutions, alors pourquoi pas...

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Il faut considérer le poids des dossiers dans vendor :

    jpierre@smartteck:/home/www/test/PluXml-2017/plugins/kzPHPMailer$ du -sh vendor/*

    4,0K   vendor/autoload.php

    68K   vendor/composer

    812K   vendor/guzzlehttp

    308K   vendor/league

    56K   vendor/paragonie

    516K   vendor/phpmailer

    92K   vendor/psr

    28K   vendor/ralouphie

    phpmailer pèse 516K. L'utilisation de composer ajoute les dossiers autoload.php et composer soit 4+68k

    Tout le reste est amené par OAuth2. Qui n'est pas spécifique à Google. Voir les services utilisant OAuth2.

  • HarukaHaruka PluXml Project Manager

    J'ai revu l'intégration de PHPMailer en utilisant Composer, ce qui m'a permis d'ajouter à PluXml 5.8, la possibilité d'envoyer des e-mails à partir d'un compte SMTP OAUTH2. Pour le moment seul Google Cloud (Gmail) est géré et tout se paramètre via l'administration (Configuration avancée). Je prévoi de créer une page sur le wiki, pour expliquer comment créer et ajouter à PluXml un compte OAUTH2.

    Comme d'habitude, c'est disponible sur la branche develop : https://github.com/pluxml/PluXml/tree/develop

Connectez-vous ou Inscrivez-vous pour répondre.