Attention, version mise à jour. Utiliser la dernière version du GIT (section devel). https://github.com/CyrilleBiot/scripts/blob/devel/digest.php
Envoi mail hebdomadaire des nouveautés d'un forum FluxBB A copier dans un fichier digest.php et positionner sur un cron.
<php> # # cyrille <cyrille@cbiot.fr> # https://cbiot.fr/ # Licence GPL # # Debut du script $time_start = microtime(true); # Recuperation des donnees de connexion require'config.php'; # Nombre de jour à garder $nb_days = 7 ; # Période à afficher $today = date('d/m/Y', time()) ; $todayDiff = date('d/m/Y',strtotime("- $nb_days days" )); # Message de présentation du mail $message = 'Voici les nouveautés du forum depuis les '. $nb_days . ' jours ' . "\r\n \r\n" ; # Preparation de la connexion $DBconnect = "mysql:dbname=".$db_name.";host=".$db_host; # Tentative de connexion pdo try { $pdo = new PDO($DBconnect, $db_username, $db_password, array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); # ========================================= # RECUPERATION DES EMAIL ADMIN / WEBMASTER # Du nom du forum et de l'url # Sous la variable $mailToAdmin -> tableau # [2] Admin et [3] Webmaster # [0] Board Title et [1] Base Url # ========================================= # La requete avec ses clauses $sqlClause = 'FROM '.$db_prefix.'config WHERE conf_name LIKE \'o_admin_email\' OR conf_name LIKE \'o_webmaster_email\'' . ' OR conf_name LIKE \'o_board_title\' OR conf_name LIKE \'o_base_url\' '; # Test de la requete $sql = 'SELECT COUNT(*)' . $sqlClause ; if ($res = $pdo->query($sql)) { # Test du nombre de lignes qui correspond à la requête SELECT COUNT if ($res->fetchColumn() > 0) { # Des résultats sont retournés , effectue la requête SELECT et travaille sur les résultats $sql = 'SELECT * ' . $sqlClause ; foreach ($pdo->query($sql) as $row) { # Affichage des résultats $globalData[] .= $row['conf_value']; } # fin du foreach } else { # Aucun résultat echo 'Problème de configuration dans la structure du forum'; } # Fin du If Test resultat } # =================================== # RECUPERATION DES NOUVEAUX SUJETS # =================================== # La requete avec ses clauses $sqlClause = 'FROM '.$db_prefix.'topics WHERE CAST( FROM_UNIXTIME(last_post ) AS DATE)> DATE_SUB(now(), INTERVAL '.$nb_days.' DAY)' . ' ORDER BY last_post DESC'; # Test de la requete $sql = 'SELECT COUNT(*)' . $sqlClause ; if ($res = $pdo->query($sql)) { # Test du nombre de lignes qui correspond à la requête SELECT COUNT if ($res->fetchColumn() > 0) { # Des résultats sont retournés , effectue la requête SELECT et travaille sur les résultats $sql = 'SELECT * ' . $sqlClause ; $nbMsg = 0 ; foreach ($pdo->query($sql) as $row) { # Affichage des résultats $nbMsg++ ; $message .= 'De '. $row['poster'] . "\r\n"; $message .= 'Sujet : '. $row['subject'] . "\r\n"; $message .= 'Posté : ' .date('m/d/Y', $row['posted']). ' --Dernière réponse le : '.date('m/d/Y', $row['last_post']) . "\r\n" ; $message .= 'Accèder au message : [ ' . $globalData[1] .'/viewtopic.php?pid='.$row['last_post_id'].'#p'.$row['last_post_id'] . ' ]'; $message .= "\r\n". '----------------------------------------------------------------'; $message .= "\r\n \r\n"; } # fin du foreach $message .= "\r\n". '----------------------------------------------------------------' . "\r\n"; $message .= $globalData[0]; } else { # Aucun résultat $message .= 'Aucune nouveauté dans le forum à ce jour \r\n \r\n'; $nbMsg = 0 ; } # Fin du If Test resultat } # =================================== # GESTION DE L'ENVOI DES EMAILS # =================================== # Clause de la requete $sqlClause = ' FROM '.$db_prefix.'users ORDER BY username'; # Test de la requete $sql = 'SELECT COUNT(*)' . $sqlClause ; if ($res = $pdo->query($sql)) { # Test du nombre de lignes qui correspond à la requête SELECT COUNT if ($res->fetchColumn() > 0) { # Des résultats sont retournés , effectue la requête SELECT et travaille sur les résultats $sql = 'SELECT * ' . $sqlClause ; $nbUsers = 0; foreach ($pdo->query($sql) as $row) { # Affichage des résultats $nbUsers++ ; # ENVOI DE L'EMAIL $mailTo = $row['username'] . ' <'. $row['email'] .'>' ; $subject = 'Sujets hebdomadaires ('. $nbMsg . ') du forum PEDAGOGIES ALTERNATIVES du '. $todayDiff . ' au ' .$today ; $headers = 'From: ' . $globalData[2] . "\r\n" . 'Reply-To: '.$globalData[2] . "\r\n" . 'Content-type: text/plain; charset=UTF-8\r\n'. "\r\n" . 'Content-Transfer-Encoding: 8bit' . 'X-Mailer: PHP/' . phpversion(); # ENVOI DU MAIL mail($mailTo, $subject, $message, $headers); # POUR AFFICHAGE $listMailTo .= $mailTo .' -- '; } # fin du foreach } else { # Aucun résultat echo "Aucun utilisateur enregistré. Pas normal, l'administrateur devrait être au moins présent... Vérifier vos tables..."; } # Fin du If Test resultat } # Cloture $pdo = null; $res = null ; # ============================================ # Sortie écran # ============================================ echo '<h1>GESTION DES MAILS</h1>'; $messageToScreen = preg_replace('%(http[s]?://)(\S+)%', '<a href="\1\2" target="_blank">\1\2</a>', $message); # Fin du script $time_end = microtime(true); $time = $time_end - $time_start; echo 'Temps d\'execution du script : ' . $time . ' secondes <br><br>'; echo '<b>Liste des destinataires ('.$nbUsers.') : </b>' . htmlentities($listMailTo) . ' <br><br>'; echo '<b>Sujet : </b>' . $subject . ' <br><br>' ; echo '<b>voici le mail envoyé : </b><br><br>' ; echo nl2br($messageToScreen).'' ; # Gestion ERREUR PDO } catch (PDOException $e) { print "Erreur De Connexion : " . $e->getMessage() . "<br/>"; die(); } # Fin du try <php>