[spip-dev] Fonction de piece jointe à un mél depuis un site spip (inc_mail.php3)

Bonjour à tous,

1. J'avais quelques besoins d'envoyer des pièces jointes à un mél depuis mon
site; je n'y connais rien en Php, j'ai donc adapté une fonction présente
dans le script de Matthieu Onfray ( sauvegarde base auto - d'ailleurs au
passage, je bosse dessus pour la rendre administrable directement depuis
l'espace privé dans admin_tech.php3 ), créée par Damien Seguy ( nexen.net ).

Voici ce que cela donne , dans inc_mail.php3 :

//
// Fonction d'envoi de fichier attaché
//

function envoyer_mail_piecejointe($email, $sujet, $texte, $from = "",
$headers = "", $nom, $fichier) {

global $hebergeur, $queue_mails, $flag_wordwrap, $os_serveur;

include_ecrire("inc_filtres.php3");

if (!$from) $from = $email;
if (!email_valide($email)) return false;
if ($email == _T('info_mail_fournisseur')) return false;

spip_log("mail ($email): $sujet , $nom, $fichier");

$charset = lire_meta('charset');

$limite = "_parties_".md5(uniqid (rand()));

//headers spécifique pour cette fonction

$headers = "From: $from\n";
$headers .= "Date: ".date("l j F Y, G:i")."\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n".
$headers .= " boundary=\"----=$limite\"\n\n";

//Traitement typo du sujet et du texte

$texte = filtrer_entites($texte);
$sujet = filtrer_entites($sujet);

// encoder le sujet si possible selon la RFC
if($GLOBALS['flag_multibyte'] AND @mb_internal_encoding($charset))
  $sujet = mb_encode_mimeheader($sujet, $charset, 'Q');

if ($flag_wordwrap) $texte = wordwrap($texte);

if ($os_serveur == 'windows') {
  $texte = ereg_replace ("\r*\n","\r\n", $texte);
  $headers = ereg_replace ("\r*\n","\r\n", $headers);
}

// création du corps du message du mél avec un entête propre

// Le message en texte simple
$message = "This is a multi-part message in MIME format.\n";
$message .= "------=$limite\n";
$message .= "Content-Type: text/plain; charset=$charset\n";
$message .= "Content-Transfer-Encoding: 32bit\n\n";
$message .= $texte."\n\n";

// La pièce jointe
$piecejointe = "------=$limite\n";
$piecejointe .= "Content-Type: application/octet-stream; name=\"$nom\"\n";
$piecejointe .= "Content-Transfer-Encoding: base64\n";
$piecejointe .= "Content-Disposition: attachment; filename=\"$nom\"\n\n";

    $fp = fopen($fichier, "rb");
    $buff = fread($fp, filesize($fichier));
    fclose($fp);

    $piecejointe .= chunk_split(base64_encode($buff));
    $piecejointe .= "\n\n\n------=$limite\n";

// Appel de la fonction mél en fonction de l'hébergeur

switch($hebergeur) {
case 'lycos':
  $queue_mails[] = array(
   'email' => $email,
   'sujet' => $sujet,
   'texte' => $message.$piecejointe,
   'headers' => $headers);
  return true;
case 'free':
  return false;
case 'online':
  return @email('webmaster', $email, $sujet, $message.$piecejointe,
$headers);
// nexen annonce la fin de ses particularismes (23/01/2003)
// case 'nexenservices':
// return @email($email, $sujet, $message.$piecejointe, $headers);
default:
  return @mail($email, $sujet, $message.$piecejointe, $headers);
}
}

//
// Ajout de la fonction d'envoi de fichier attaché pour la sauvegarde
automatique de base
//

function ecrire_mail_sauvegardeauto($nom, $fichier) {

  $adresse_maintenance = lire_meta("email_webmaster");

  // Sélectionne la langue du site
   $lang_utilisateur = $GLOBALS['spip_lang'];
   changer_langue($GLOBALS['langue_site']);

  // Traite le titre du message
   $titre = _T('sauvegardeauto:sauvegardeauto_titre_courrier');
   $titre = nettoyer_titre_email($titre);

  //Traite le corps du message
   $courr = _T('sauvegardeauto:sauvegardeauto_corps_courrier');

  //Appel de la fonction d'envoi de pièce jointe
   envoyer_mail_piecejointe($adresse_maintenance, $titre, $courr, $nom,
$fichier);

   changer_langue($lang_utilisateur);
}

Ais-je commis d'énormes erreurs, et si oui, lesquelles ???

--neoram