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