true] pour afficher le $corps final sans envoyer le mail * $options['cci' => true] pour passer les destinataires en cci si il y en a plus qu'un * $options['dest_cci' => 'toto@truc.tld'] le destinataire (to) si $options['cci'] === true * (sinon c'est le compte expéditeur du site) * $options['pdfs' => [ 0 => [...], 1 => [...] ] array des fichiers PDF générés à attacher dont les éléments peuvent être : * - soit un nom de squelette PDF * - soit un array avec 3 éléments (seul le 1er est obligatoire): * [ 'fichier' => 'squelette_PDF', * 'contexte' => ['parametre_url_1' => 'valeur_1', 'parametre_url_2' => 'valeur_2', ...] * 'nom' => 'nom_fichier_attache' ] * $options['pieces_jointes'][] = [ * 'chemin' => 'tmp/cache/toto.xls', * 'nom' => 'toto.xls', * 'encodage' => 'base64', * 'mime' => 'application/vnd.ms-excel' * ] * ] * $options['args' => ['param_1' => 'valeur_1, 'param_2' => 'valeur_2', ...]] * @param Array $Tid_doc_piece_jointe => Array id_doc a ajouter comme piece jointe * */ function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_piece_jointe = []) { //var_dump($options) ;die; //var_dump($destinataires); include_spip('inc/texte'); include_spip('classes/facteur'); $retour = array(); // blocage de l'envoi pour le pseudo-slug "no_gamumail" if ($slug === 'no_gamumail') { $retour['message_ok'] = _T('gamumail:message_no_gamumail'); spip_log("Pas d'envoi de mail pour cause de slug no_gamumail","gamumail"); return $retour; } // sécu if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) { $retour['message_erreur'] = _T("gamumail:erreur_format_slug"); return $retour; } // langue (par défaut langue du site) $lang = !empty($options['lang']) ? $options['lang'] : lire_config('langue_site', 'fr'); $id_docs = ''; if ($slug === 'no_slug' && array_key_exists('message', $options)) { $html = $options['message']; if (array_key_exists('sujet', $options)) { $sujet = $options['sujet']; } else { $sujet = array_shift($html); } } else { // contenus du slug $res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"'); if ($res) { $sujet = extraire_multi($res['sujet'], $lang); $html = propre($res['texte']); $id_docs = $res['id_docs']; } else { $retour['message_erreur'] = _T("gamumail:pas_de_slug"); return $retour; } } // destinataires (id_auteur ou mails) => $pour[] est un array avec les adresses mails valides if (!is_array($destinataires)) { $destinataires = explode(',', $destinataires); } $pour = array(); foreach ($destinataires as $dest) { if (is_numeric($dest)) { if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) { $pour[] = $mail; } } elseif (email_valide($dest)) { $pour[] = $dest; } } $non_vide = function ($elem) { return ($elem != NULL AND $elem != ''); }; $cc = array_filter(explode(',', (lire_config('gamumail/mail_cc') ?? '')), $non_vide); $cci = array_filter(explode(',', (lire_config('gamumail/mail_cci') ?? '')), $non_vide); // si on a plusieurs destinataires et $options['cci' => true] les passer en cci et mettre le compte expéditeur du site en to if (count($pour) > 1 AND isset($options['cci']) AND $options['cci']) { $cci = array_unique(array_merge($cci, $pour)); if (isset($options['dest_cci']) and email_valide($options['dest_cci'])) { $pour = [$options['dest_cci']]; } else { $pour = [lire_config('facteur/adresse_envoi_email',lire_config('email_webmaster'))]; } } // documents joints $pieces_jointes = []; // filtrage des id_docs attachés au slug (ici on ne veut que des id_docs valides) $Tid_doc = []; $id_docs = array_filter(explode(',', $id_docs), 'is_numeric'); foreach ($id_docs as $doc) { if ($res = sql_getfetsel('id_document', 'spip_documents', 'id_document='.$doc)) { $Tid_doc[] = $doc; } } $Tid_doc = array_merge($Tid_doc, $Tid_doc_piece_jointe); // récup des paramètres des docs à attacher if (!empty($Tid_doc)) { foreach ($Tid_doc as $id_document) { $protected = ''; $Tdocument = sql_fetsel('*','spip_documents','id_document='.intval($id_document)); if ( array_key_exists('protected', $Tdocument) and $Tdocument['protected'] === 'oui' ) { $protected = 'PROTECTED/'; } $destination = _DIR_IMG.$protected.$Tdocument['fichier']; $extension = $Tdocument['extension']; if ($Tdocument['titre']) { $nom_fichier = $Tdocument['titre'] .".".$extension; } else { $nom_fichier = basename($Tdocument['fichier']); } include_spip('bigup_fonctions'); $type_mime = bigup_get_mime_type_extension($extension); $pieces_jointes[] = [ 'chemin' => $destination, 'nom' => $nom_fichier, 'encodage' => 'base64', 'mime' => $type_mime ]; } } // les docs attachés if (isset($options['pieces_jointes'])) { if (is_array($options['pieces_jointes'])) { foreach ($options['pieces_jointes'] as $Tpj) { $pieces_jointes[] = $Tpj; } } } // les pdfs $Tpdf_dell = []; if (isset($options['pdfs'])) { $Tpdfs = $options['pdfs']; if (!is_array($Tpdfs)) { $Tpdfs = explode(',', $Tpdfs); } $Tpdfs = array_filter($Tpdfs, function($p) { return $p != ''; }); // approximation pour passage dans les fonctions traiter_av_pdf() : // si plusieurs destinataires dans $pour[], on utilise le premier comme 2ème arg ($auteur) if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) { $options = $f($options, $pour[0], [], $Tpdfs); } if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) { $options = $f($options, $pour[0], [], $Tpdfs); } if (!empty($Tpdfs) and is_array($Tpdfs)) { foreach ($Tpdfs as $pdf) { if (!is_array($pdf)) { $sq_pdf = $pdf; $contexte = []; $nom = $pdf; } elseif (array_key_exists('fichier', $pdf)) { $sq_pdf = $pdf['fichier']; $contexte = array_key_exists('contexte', $pdf) ? $pdf['contexte'] : []; $nom = array_key_exists('nom', $pdf) ? $pdf['nom'] : $pdf; } else break; $recup_pdf = charger_fonction('charger_pdf','inc'); $pdf = $recup_pdf($sq_pdf, $contexte); $nom_fichier = $nom.'.pdf'; $destination = _DIR_TMP.basename($nom_fichier); $Tpdf_dell[] = $destination; file_put_contents($destination,$pdf); $pieces_jointes[] = [ 'chemin' => $destination, 'nom' => $nom_fichier, 'encodage' => 'base64', 'mime' => 'application/pdf' ]; } } } $html_header = ''; if (find_in_path('gamumail/'.$slug .'_html_header.html')) { $html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options); } elseif(find_in_path('gamumail/html_header.html')) { $html_header = recuperer_fond('gamumail/html_header', $options); } $html_footer = ''; if (find_in_path('gamumail/'.$slug . '_html_footer.html')) { $html_footer = recuperer_fond('gamumail/'.$slug . '_html_footer', $options); } elseif (find_in_path('gamumail/html_footer.html')) { $html_footer = recuperer_fond('gamumail/html_footer', $options); } $html = $html_header . $html . $html_footer; // pipeline pour les remplacements du contenu des slugs spécifiques de chaque plugins $args = $options; $args['slug'] = $slug; $args['destinataires'] = $pour; $html = pipeline('remplacements_slug', [ 'args' => $args, 'data' => $html ]); $sujet = pipeline('remplacements_slug',[ 'args' => $args, 'data' => $sujet ]); // traitement des remplacements génériques fournis par Gamumail $remplacement_generiques = charger_fonction('gamumail_remplacements', 'inc'); $html = $remplacement_generiques($args, $html); $sujet = $remplacement_generiques($args, $sujet); // traduction des intégrés par les remplacements $html = extraire_multi($html, $lang); $sujet = extraire_multi($sujet, $lang); include_spip('facteur_fonctions'); $texte = facteur_mail_html2text($html); $corps = [ 'html' => $html, 'texte' => $texte, 'cc' => $cc, 'bcc' => $cci, 'pieces_jointes' => $pieces_jointes ]; /* if ($f = charger_fonction('traiter', 'gamumail', true)) { $corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); } */ // appel d'une éventuelle fonction de traitement du contenu spécifique du slug if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) { $corps = $f($corps, $options, $slug, $pour); } // si debug on affiche sans envoyer le mail if (isset($options['debug']) AND $options['debug']) { echo '
slug : '.$slug; echo '
$options :'; var_dump($options); echo '
$pour : '; var_dump($pour); echo '
$sujet : '.$sujet; echo '
$corps : '; var_dump($corps); $ok = true; //exit; } else { // pour ne pas avoir de warning de la fonction envoyer_mail() on doit lui passer un paramètre $from et un $header $from = ''; $header = $options['header'] ?? ''; $envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $ok = $envoyer_mail($pour, $sujet, $corps, $from, $header); } if (!$ok) { spip_log("Erreur d'envoi du mail : ","gamumail"); spip_log($corps,"gamumail"); $retour['message_erreur'] = _L("gamumail:erreur_envoi_mail"); } else { $retour['message_ok'] = _L('gamumail:mail_envoye'); } // on supprime les pdfs temporaires if (count($Tpdf_dell)) { foreach ($Tpdf_dell as $pdf) { unlink($pdf); } } return $retour; }