Problème mise à jour MailPoet (Créer un compte)

  • WordPress :6.0
  • Statut : non résolu
9 sujets de 1 à 9 (sur un total de 9)
  • Auteur
    Messages
  • #2429527
    yoanpg
    Participant
    Padawan WordPress
    93 contributions

    Bonjour,

    Ma configuration WP actuelle

    Problème(s) rencontré(s) :

    Bonjour à tous,

    Après chaque mise à jour de l’extension MailPoet, mon site ne fonctionne plus (voir copie d’écran ci-joint). Mise à jour automatique ou manuelle, c’est pareil. Pour récupérer le site, je dois renommer le dossier /content/pluggins/mailpoet, accéder à mon site (qui fonctionne à nouveau), puis je renomme avec le nom original le dossier mailpoet et tout fonctionne bien.

    Contrairement au message affiché, je ne reçois pas d’email avec plus d’information.

    Avez-vous une idée d’où peut venir le problème et comment le corriger ?
    Merci d’avance 🙂

    Fichiers joints :
    Vous devez être connecté pour voir les fichiers joints.
    #2429540
    mathieu42
    Participant
    Maître WordPress
    1720 contributions

    c’est surprenant qu’en réactivant l’extension vous n’ayez plus le message d’erreur, je m’attendrai à avoir le même souci.

    avant la prochaine mise à jour, activez le mode « debug » et le journal d’erreurs, peut-être que vous verrez un message d’erreur plus détaillé dans le journal :

    .https://fr.wordpress.org/support/article/debugging-in-wordpress/

    #2429770
    yoanpg
    Participant
    Padawan WordPress
    93 contributions

    Merci de votre réponse. Je posterez ici le résultat du débug à la prochaine mise à jour

    #2431608
    yoanpg
    Participant
    Padawan WordPress
    93 contributions

    Après des heures d’investigation, j’ai enfin trouvé la cause.

    Indépendamment de WordPress, j’ai développé une page PHP qui liste des taches, avec une date a laquelle est envoyé un mail de rappel. J’envoie ce mail de rappel avec PHPMailer.

    Ensuite j’ai rajouté un peu de code PHP dans fonction.php de mon thème WordPress pour vérifier si un mail de rappel doit être envoyé aujourd’hui. Et a chaque jour où un rappel doit être envoyé, ça faisait planter le site WordPress. En modifiant le nom du dossier MailPoet, le mail PHPMail est envoyé, et ensuite quand je reviens au nom d’origine de MailPoet, ça fonctionne a nouveau puisque mon code PHP n’a plus besoin d’envoyer de mail

    Donc c’est un problème d’incompatibilité entre PHPMailer qui essaie d’envoyer un mail et MailPoet.

    Deux question :

    1. Une idée comment résoudre ce conflit ?
    2. Une meilleure idée où placer mon script PHP qui vérifie les dates de taches et si un mail PHPMailer doit être envoyé ? Peut-être que fonction.php n’est pas le meilleur endroit

    Merci 🙂

    #2431626
    mathieu42
    Participant
    Maître WordPress
    1720 contributions

    montrez nous le code qui est dans functions.php, il devrait être possible de faire cohabiter les 2 codes.

    avez-vous bien mis le code dans un thème enfant ? si vous le laisser dans un fichier du thème, la modification peut disparaitre à la prochaine mise à jour.

     

    #2431718
    yoanpg
    Participant
    Padawan WordPress
    93 contributions

    Oui j’ai un thème enfant. Voila mon code:

     

    require_once 'mail.php';
    
    $req="SELECT * FROM admin_taches WHERE Rappel=-2";
    $resultat2 = $mysqli->query ($req) or die ('Erreur '.$req.' '.$mysqli->error);
    
    if($data2 = $resultat2->fetch_assoc()) {
    	envoyer_mail("erreur", "erreur", "<html><head></head><body>erreur</body></html>", "mail_am", "admin@gmail.com");
    	$req="UPDATE admin_taches SET Rappel=-3 WHERE id=".$data2['id'];
    	$mysqli->query ($req) or die ('Erreur '.$req.' '.$mysqli->error);
    
    } else {
    
    $req="SELECT * FROM admin_taches WHERE DATE<='".date('Y-m-d')."' and Status=0 and (Rappel=0 or Rappel=-1) ORDER BY Date";
    $resultat = $mysqli->query ($req) or die ('Erreur '.$req.' '.$mysqli->error);
    
    if($data = $resultat->fetch_assoc()) {
    	if (envoyer_mail("rappel", "rappel", "<html><head></head><body>rappel</body></html>", "mail_am", $data['MailRespo'])) {
    		$req="UPDATE admin_taches SET Rappel=1 WHERE id=".$data['id'];
    		$mysqli->query ($req) or die ('Erreur '.$req.' '.$mysqli->error);
    	} else {
    		$req="UPDATE admin_taches SET Rappel=".($data['Rappel']-1)." WHERE id=".$data['id'];
    		$mysqli->query ($req) or die ('Erreur '.$req.' '.$mysqli->error);
    	}
    }
    fonction.php

    //Import PHPMailer classes into the global namespace
    //These must be at the top of your script, not inside a function
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;
    
    function envoyer_mail($sujet, $message_txt, $message_html, $idExp, $destinataire) {
    
    require_once 'connexion.php'; // Pour obtenir les logins
    $login = login($idExp);
    
    //Load Composer's autoloader
    require 'mailer/src/Exception.php';
    require 'mailer/src/PHPMailer.php';
    require 'mailer/src/SMTP.php';
    //require 'vendor/autoload.php';
    
    //Create an instance; passing `true` enables exceptions
    $mail = new PHPMailer(true);
    
    try {
        //Server settings
        //$mail->SMTPDebug = SMTP::DEBUG_SERVER;             //Enable verbose debug output
        $mail->isSMTP();                                     //Send using SMTP
        $mail->Host       = 'smtp.gmail.com';                //Set the SMTP server to send through
        $mail->SMTPAuth   = true;                            //Enable SMTP authentication
        $mail->Username   = $login['login'];                 //SMTP username
        $mail->Password   = $login['motdepasse'];            //SMTP password
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;  //Enable implicit TLS encryption
        $mail->Port       = 587;                             //TCP port; use 587 if SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS
    
        //Recipients
        $mail->setFrom($login['login'], $login['alias']);
        $mail->addAddress($destinataire);     //Add a recipient
        $mail->addReplyTo($login['login'], $login['alias']);
    
        //Content
        $mail->isHTML(true);                                  //Set email format to HTML
        $mail->Subject = $sujet;
        $mail->Body    = $message_html;
        $mail->AltBody = $message_txt;
    
        $succes = $mail->send();
        //echo 'Message has been sent';
    
    } catch (Exception $e) {
        $succes = false;
        //echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
    }
    
    return $succes;
    }
    mail.php

    J’ai fait le test à la fin de mail.php ajouter une ligne pour envoyer un mail test avec la fonction envoyer_mail(). Si je charge la page mail.php ça fonctionne et le mail est envoyé. Si je charge ma page WordPress, j’ai une erreur et le mail n’est pas envoyé. Si je désactive MailPoet, ça fonctionne et le mail est envoyé.

    #2431778
    mathieu42
    Participant
    Maître WordPress
    1720 contributions

    et quel est le message d’erreur ?

    dans les fichiers du thème, vous pouvez utiliser la fonction wp_mail, vous n’avez pas besoin de redéfinir une instance de phpmailer à chaque fois :

    .https://developer.wordpress.org/reference/functions/wp_mail/

    #2431800
    yoanpg
    Participant
    Padawan WordPress
    93 contributions

    Le message d’erreur est le même que la copie d’écran de mon premier post

    Je ne connaissais pas la fonction wp_mail. En effet ca fonctionne 😀 merci beaucoup !

    Encore une question, le mail est envoyé depuis l’adresse mon.email=gmail.com@replies.sendingservice.ne. Est-il possible de le modifier ?

    #2431801
    mathieu42
    Participant
    Maître WordPress
    1720 contributions

    je parlais de l’erreur dans le journal de débogage.

    pour l’adresse e-mail de l’envoyeur, regardez dans les exemples en bas de la page avec l’entête « From ».

9 sujets de 1 à 9 (sur un total de 9)
  • Vous devez être connecté pour répondre à ce sujet.