Page 1 sur 1

Envoi d'un e-mail automatique à l'inscription

Posté : 20 nov. 2016, 13:53
par skynet
Bonjour,

Je suis débutant et je n'arrive pas à faire fonctionner le code ci dessous, je pense qu'il y a une/des fonction(s) qui ne sont pas bonne(s) mais mon manque de compétance me fais écrire sur ce forum pour obtenir de l'aide mais surtout comprendre ce qui ne va pas (pour ne pas refaire les même erreurs plus tard)

J'utilise Wordpress et le plugin buddypress, par défaut avec buddybpress, quand un utilisateur s'inscrit sur mon site il reçoit un e-mail permettant d'activé son compte, celui-ci fonctionne, pas de problème.

Moi j'aimerais qu'un 2eme mail soit envoyé dans la foulée, sauf qu'avec le code ci dessous il part pas, je voulais avoir votre avis la dessus :?:

J'ai remplacé les vrais adresses par des fausses pour garder la confidentialité.

add_action( 'user_register', 'myplugin_registration_save', 10, 1 );

function myplugin_registration_save( $user_id ) {

    if ( isset( $_POST['register_email'] ) )
    {
      
      $headers .= "From: Mon-site.com <[email protected]> \r\n";
      $headers .= "Reply-To: [email protected]\r\n";
      $headers .= 'Content-Type: text/html; charset=utf8\r\n';
      $to = $_POST['register_email'];
      $message .= "";
      $message .= "<table>";
      $message .= "<tr>";
      $message .= "<td>";
      $message .= "<div style='overflow:hidden; text-align:center; margin-bottom:50px;'>";
      $message .= "<img src='https://mon-site.com/wp-content/uploads/2016/07/Logo.png' alt='logo' style='margin:0 auto;'>";
      $message .= "</div>";
      $message .= "</td>";
      $message .= "</tr>";
      $message .= "<tr>";
      $message .= "<td style='background-color: rgb(247, 243, 240);'>";
        $message .= "<div style='margin:30px auto; border-top:solid 3px red; border-radius:3px; width:60%;'>";
        $message .= "<h1 style='text-align:center;'>mon-site.com</h1>";
        $message .= "<div style='background-color:#fff; padding:20px;'>";
        $message .= "<h3 style'color:#313131;'>Bonjour, </h3>";

      $message .= "<p style='font-size:16px;'>Ci vous êtes inscris en tant que <srong>artiste</strong> ou en tant que <strong>amateur d'art</strong>, il est nécessaire de consulter <strong>notre mode emploi</strong> afin de comprendre le fonctionnement globale de notre plateforme.</p>";
      $message .= "<p style='font-size:16px;'>Retrouvez notre mode emploi pour <strong>les artistes</strong> (vendeurs): <a href='https://mon-site.com/mode-emploi-de-artiste/' >Accéder au mode d'emploi</a></p>";
      $message .= "<p style='font-size:16px;'>Retrouvez notre mode emploi pour <strong>les amateurs d'art</strong> (acheteurs): <a href='https://mon-site.com/mode-emploi-de-acheteur/'>Accéder au mode d'emploi</a></p>";
      $message .= "<hr />";
      $message .= "<p style='font-size:16px;'>Si vous êtes artiste, il est obligatoire de joindre avec votre oeuvre, notre <a href='http://mon-site.com/certificat/' target='_blank'>certificat d'authenticité</a> avant toute expédition auprès de l'amateur d'art, vous pouvez le télécharger au format PDF et l'imprimer ci-dessous:</p>";
      $message .= "<p style='font-size:16px;'><a href='https://mon-site.com/wp-content/uploads/2016/09/certificat-authenticité.pdf'>Télécharger le certificat d'authenticité</a></p>";
      
      $message .= "<hr />";
      $message .= "<p style='font-size:16px;'>Cordialement,</p>";
      $message .= "<p style='font-size:16px;'><strong>L'équipe **** </strong></p>";
      $message .= "<p style='font-size:16px;'>Adresse e-mail: [email protected]</p>";
      $message .= "</div>";
      $message .= "</div>";
      $message .= "</td>";
      $message .= "</tr>";
      
      $message .= "</table>";
      wp_mail($to,"[le titre du message] IMPORTANT: MODE EMPLOI A LIRE",$message,$headers);
    }

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 10:58
par moogli
salut,

est ce que ce code est exécuté ? (point d'arrêt dans la fonction, ou echo / var_dump des variables intéressantes pour "voir" leurs états)


@+

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 11:25
par skynet
Salut,

Comment ça ? Comment savoir ci c'est exécuter, peux tu me dire le code ?
Tout ce que je veux savoir c'est qu'est-ce qui va pas dans le code ?
Je ne suis sur des fontions $_POST['register_email'] ) ) et wp_mail, je pense que le souci vient de là, mais je ne sais pas quoi mettre à la place.

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 12:18
par Naroth
Bonjour,

Ce que veux dire Moogli c'est qu'il faut éliminer les possibles erreurs (en vérifiant si ce sont des erreurs ou non)

En premier on va tester si "register_mail" a du sens :
dd_action( 'user_register', 'myplugin_registration_save', 10, 1 );

function myplugin_registration_save( $user_id ) {

    if ( isset( $_POST['register_email'] ) )
    {
      echo " POST de register mail est défini et il a pour valeur";
      var_dump($_POST['register_email']);

      $headers .= "From: Mon-site.com <[email protected]> \r\n";
      $headers .= "Reply-To: [email protected]\r\n";
      $headers .= 'Content-Type: text/html; charset=utf8\r\n';
      $to = $_POST['register_email'];
      $message .= "";
      $message .= "<table>";
      $message .= "<tr>";
      $message .= "<td>";
      $message .= "<div style='overflow:hidden; text-align:cen
      ...
}
Qu'est qui est affiché ?

Si rien n'est affiché $_POST['register_email'] n'est pas défini et le mail n'est jamais envoyé sinon le problème vient d'ailleur

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 12:32
par moogli
en fait il faut même mettre quelque chose en première ligne de la fonction pour être certain de l'utilisation de la fonction est avancer pas à pas.
<?php
function myplugin_registration_save( $user_id ) {
var_dump($user_id, $_POST);
    if ( isset( $_POST['register_email'] ) )
    {
      echo " POST de register mail est défini et il a pour valeur";
}
}

pour le reste c'est la doc de wp : https://developer.wordpress.org/referen ... s/wp_mail/

$_POST['register_email'] : c'est une variable qui est un tableau avec, peut être, un index 'register_email' et non une fonction :-)

dans ton cas, si le code est appelé après la validation du formulaire et sans redirection celà peux fonctionner.
Avec le var_dump que j'ai indiqué ci dessus tu auras une idée clair et concrete de ce que tu as de dispo dans $_POST (cela peux aussi fonctionner pour GET, SESSION, COOKIE etc.).


@+

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 13:03
par skynet
Donc il faut retirer:
add_action( 'user_register', 'myplugin_registration_save', 10, 1 );


:?:

Code complet avec tes modifications: Cela ne fonctionne pas non plus
function myplugin_registration_save( $user_id ) {
var_dump($user_id, $_POST);
    if ( isset( $_POST['register_email'] ) )
    {
      echo " POST de register mail est défini et il a pour valeur";



      
    $headers .= "From: Mon-site.com <[email protected]> \r\n";
      $headers .= "Reply-To: [email protected]\r\n";
      $headers .= 'Content-Type: text/html; charset=utf8\r\n';
      $to = $_POST['register_email'];
      $message .= "";
      $message .= "<table>";
      $message .= "<tr>";
      $message .= "<td>";
      $message .= "<div style='overflow:hidden; text-align:center; margin-bottom:50px;'>";
      $message .= "<img src='https://mon-site.com/wp-content/uploads/2016/07/Logo.png' alt='logo' style='margin:0 auto;'>";
      $message .= "</div>";
      $message .= "</td>";
      $message .= "</tr>";
      $message .= "<tr>";
      $message .= "<td style='background-color: rgb(247, 243, 240);'>";
        $message .= "<div style='margin:30px auto; border-top:solid 3px red; border-radius:3px; width:60%;'>";
        $message .= "<h1 style='text-align:center;'>mon-site.com</h1>";
        $message .= "<div style='background-color:#fff; padding:20px;'>";
        $message .= "<h3 style'color:#313131;'>Bonjour, </h3>";

      $message .= "<p style='font-size:16px;'>Ci vous êtes inscris en tant que <srong>artiste</strong> ou en tant que <strong>amateur d'art</strong>, il est nécessaire de consulter <strong>notre mode emploi</strong> afin de comprendre le fonctionnement globale de notre plateforme.</p>";
      $message .= "<p style='font-size:16px;'>Retrouvez notre mode emploi pour <strong>les artistes</strong> (vendeurs): <a href='https://mon-site.com/mode-emploi-de-artiste/' >Accéder au mode d'emploi</a></p>";
      $message .= "<p style='font-size:16px;'>Retrouvez notre mode emploi pour <strong>les amateurs d'art</strong> (acheteurs): <a href='https://mon-site.com/mode-emploi-de-acheteur/'>Accéder au mode d'emploi</a></p>";
      $message .= "<hr />";
      $message .= "<p style='font-size:16px;'>Si vous êtes artiste, il est obligatoire de joindre avec votre oeuvre, notre <a href='http://mon-site.com/certificat/' target='_blank'>certificat d'authenticité</a> avant toute expédition auprès de l'amateur d'art, vous pouvez le télécharger au format PDF et l'imprimer ci-dessous:</p>";
      $message .= "<p style='font-size:16px;'><a href='https://mon-site.com/wp-content/uploads/2016/09/certificat-authenticité.pdf'>Télécharger le certificat d'authenticité</a></p>";
      
      $message .= "<hr />";
      $message .= "<p style='font-size:16px;'>Cordialement,</p>";
      $message .= "<p style='font-size:16px;'><strong>L'équipe **** </strong></p>";
      $message .= "<p style='font-size:16px;'>Adresse e-mail: [email protected]</p>";
      $message .= "</div>";
      $message .= "</div>";
      $message .= "</td>";
      $message .= "</tr>";
      
      $message .= "</table>";
      wp_mail($to,"[le titre du message] IMPORTANT: MODE EMPLOI A LIRE",$message,$headers);
    }

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 13:20
par Vapegnast
Le var_dump permet d'afficher les informations d'une variable, cela ne va pas faire fonctionner ton code mais de voir si la function myplugin_registration_save est executé .
C'est comme si tu met un echo "je suis dans la function" a la place du var_dump.
Si j'ai bien compris tu veux renvoyer un deuxième mail lorsque ton utilisateur s'inscrit sur ton site, normalement le mail s'envoie avec la ligne de code:

Code : Tout sélectionner

wp_mail($to,"[le titre du message] IMPORTANT: MODE EMPLOI A LIRE",$message,$headers);
donc juste en dessous de ca tu peux ajouter un autre wp_mail avec d'autres variable qui remplace le contenu de ton deuxieme mail
exemple:

Code : Tout sélectionner

wp_mail($to, $autre_sujet , $message_numero_2 ,$headers);

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 13:28
par skynet
Oui j'aimerais envoyé un 2ème e-mail à l'inscription.

Oui d'accord mais comment savoir ci cela est bien exécuter ?
Je vais ajouter wp_mail($to, $autre_sujet , $message_numero_2 ,$headers); et voir ce que cela donne.

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 13:44
par moogli
si tu vire le add_action je ne pense pas que cela fonctionne j'ai juste mis les quelques lignes de code utile.
la doc https://developer.wordpress.org/referen ... dd_action/
reste à trouver la liste des hooks possible ...

ils ont publié un outils qui a pas l'air mal : https://developer.wordpress.org/reference/
du coup tu sembles avoir un hook correct
la doc https://developer.wordpress.org/referen ... _register/ malheureusement elle n'est pas super exhaustive.

je ne sais pas si tu as accès au données postées, il faut tester avec le fameux var_dump($_POST); D'après l'exemple c'est possible.

au pire vu que tu as l'id de l'utilisateur tu peux récupérer ses données (surement plus fiable que le formulaire vu que les données sont traitées).

Dans ce cas le code devient
<?php
add_action('user_register', 'myplugin_registration_save', 10, 1);
function myplugin_registration_save($user_id)
{
    $user_info = get_userdata($user_id);
    if ($user_info !== false) {
        $headers .= 'From: Mon-site.com <[email protected]>'.PHP_EOL;
        $headers .= 'Reply-To: [email protected]'.PHP_EOL;
        $headers .= 'Content-Type: text/html; charset=utf8'.PHP_EOL;
        $message .= '<table>';
        $message .= '<tr>';
        $message .= '<td>';
        $message .= '<div style="overflow:hidden; text-align:center; margin-bottom:50px;">';
        $message .= '<img src="https://mon-site.com/wp-content/uploads/2016/07/Logo.png" alt="logo" style="margin:0 auto;">';
        $message .= '</div>';
        $message .= '</td>';
        $message .= '</tr>';
        $message .= '<tr>';
        $message .= '<td style="background-color: rgb(247, 243, 240);">';
        $message .= '<div style="margin:30px auto; border-top:solid 3px red; border-radius:3px; width:60%;">';
        $message .= '<h1 style="text-align:center;">mon-site.com</h1>';
        $message .= '<div style="background-color:#fff; padding:20px;">';
        $message .= '<h3 style="color:#313131;">Bonjour, </h3>';

        $message .= '<p style="font-size:16px;">Ci vous êtes inscris en tant que <srong>artiste</strong> ou en tant que <strong>amateur d&apos;art</strong>, il est nécessaire de consulter <strong>notre mode emploi</strong> afin de comprendre le fonctionnement globale de notre plateforme.</p>';
        $message .= '<p style="font-size:16px;">Retrouvez notre mode emploi pour <strong>les artistes</strong> (vendeurs): <a href="https://mon-site.com/mode-emploi-de-artiste/"" >Accéder au mode d&apos;emploi</a></p>';
        $message .= '<p style="font-size:16px;">Retrouvez notre mode emploi pour <strong>les amateurs d&apos;art</strong> (acheteurs): <a href="https://mon-site.com/mode-emploi-de-acheteur/">Accéder au mode d&apos;emploi</a></p>';
        $message .= '<hr />';
        $message .= '<p style="font-size:16px;">Si vous êtes artiste, il est obligatoire de joindre avec votre oeuvre, notre <a href="http://mon-site.com/certificat/"" target="_blank">certificat d&apos;authenticité</a> avant toute expédition auprès de l&apos;amateur d&apos;art, vous pouvez le télécharger au format PDF et l&apos;imprimer ci-dessous:</p>';
        $message .= '<p style="font-size:16px;"><a href="https://mon-site.com/wp-content/uploads/2016/09/certificat-authenticité.pdf">Télécharger le certificat d&apos;authenticité</a></p>';

        $message .= '<hr />';
        $message .= '<p style="font-size:16px;">Cordialement,</p>';
        $message .= '<p style="font-size:16px;"><strong>L&apos;équipe **** </strong></p>';
        $message .= '<p style="font-size:16px;">Adresse e-mail: [email protected]</p>';
        $message .= '</div>';
        $message .= '</div>';
        $message .= '</td>';
        $message .= '</tr>';
        $message .= '</table>';
        wp_mail($user_info->user_email, 'IMPORTANT: MODE EMPLOI A LIRE', $message, $headers);
    }
}

pour éviter trop d'email le mieux serait p'tet d'avoir une validation perso du formulaire d'enregistrement (cf google ;) )


@+

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 14:03
par skynet
Merci pour ton aide moogli, mais malheureusement pas concluant, je ne reçois pas d'e-mail, je fais des inscriptions test avec http://www.clipmail.eu/, je reçois bien l'e-mail de confirmation de buddypress mais pas mon mail personnalisé

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 16:11
par moogli
et que donne le debug ?

ajout de l'affichage des variables etc ?

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 21 nov. 2016, 17:21
par skynet
On peut le trouver ou le debug ?

Re: Envoi d'un e-mail automatique à l'inscription

Posté : 22 nov. 2016, 09:41
par moogli
avec un debugger :-)
le plus simple c'est d'utiliser un IDE (eclipse, netbeans, idea / (php | web) storm etc.) avec http://xdebug.org

sinon à l'ancienne, comme indiqué depuis le début, à grand coup de echo, var_dump un peu partout pour suivre l'évolution du code.


@+