Comment insérer une pièce jointe dans l'envoi d'un mail ?

arnold002 Messages postés 121 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 5 mars 2007 - 27 oct. 2005 à 18:20
titiameni Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 17 décembre 2008 - 14 juil. 2008 à 14:14
Bonjour à tous,

J'utilise un formulaire sur ma page form.php. Les données sont transmises à ma 2ème page mail.php, qui contient le script d'envoi d'emails en masse. Tout fonctionne très bien.
Aujourd'hui, j'ai besoin de rajouter la fonction d'insertion de pièces jointes, mais là, et après plusieurs heures d'essai, impossible de transférer mon fichier sur le serveur.
Je reçois bien un email contenant une pièce jointe du type ATT000....txt, de 46 octets !!

Voici mon code sur ma page mail.php:

$msg_webmaster
= $_POST
[ 'msg_webmaster'
];
$sujet
= $_POST
['sujet'
];
$NomFichier
= $_POST
[ 'fichier'
];


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

$dest
= "toto@toto.com
"
;
$mail_mime
="From: "Mon site"<$dest>\r\n"
;
$mail_mime
.= "Date: "
. date
("l j F Y, G:i"
)."\n"
;
$mail_mime
. = "MIME-Version: 1.0\n"
;
$mail_mime
.= "X-Priority: 1\n"
;
$mail_mime
. = "Content-Type: multipart/mixed;\n"
;
$mail_mime
.= " boundary="----= $limite "\n\n"
;

//Le message en texte simple pour les navigateurs qui n'acceptent pas le HTML

$texte
= "This is a multi-part message in MIME format.\n"
;
$texte
.= "Ceci est un message au format MIME.\n"
;
$texte
. = "------= $limite \n"
;

$texte
. = "Content-Type: text/html; charset= "iso-8859-1"\n"
;
$texte
. = "Content-Transfer-Encoding: 32bit\n\n"
;
$texte
. = ob_get_clean
();
$texte
. = "\n\n"
;

//le fichier
$attachement
= "------= $limite \n"
;
$attachement
. = "Content-Type: multipart/mixed; name= " $NomFichier "\n"
;
$attachement
. = "Content-Transfer-Encoding: base64\n"
;
$attachement
.= "Content-Disposition: attachment; filename=" $NomFichier "\n\n"
;

//$fd = fopen( $fichier, "r" );
//$contenu = fread( $fd, filesize( $fichier ) );
$fp
= fopen
($fichier
, "rb"
);
$buff
= fread
($fp
, filesize
($fichier
));

fclose
($fp
);
$attachement
. = chunk_split
(base64_encode
($buff
));

$attachement
.= "\n\n\n------= $limite \n"
;
mail
([mailto:'titi@titi.com' 'titi@titi.com']
, $sujet
, $texte
.$attachement
, "Reply-to:$email\n"
.$mail_mime
);

Et mon code sur la page form.php :


<form name ="mail" enctype= "multipart/form-data" method ="post" action= "mail.php" target ="_blank">
Sujet du mail

"sujet">

Mot du webmaster
<gras><textarea
rows"10" name"msg_webmaster" cols="50"></textarea>

Piиce jointe (facultative)

"16">

<gras>

</form>

J'ai l'impression que ma variable $fichier ne passe pas.
Si quelqu'un à le courage de m'aider, il sera le bienvenu.
Merci d'avance

2 réponses

cs_JUL14 Messages postés 2 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 28 octobre 2005
27 oct. 2005 à 21:06
Faudrait déjà voir à changer le content-type de ta pièce jointe :
"application/octet-stream", ou mieux, récupérer le type de fichier
uploadé et définir le content-type partant de là avec un "switch".



Par ailleurs un champs file se récupère en $_FILES
qui est un tableau, et pas en $_POST. Fait l'essai d'un
print_r($_FILES["fichier"]) en retour de formulaire, y a tout plein de
trucs et de machins dont son nom d'origine et le nom de sa copie
temporaire sur le serveur.

$NomFichier= $_FILES["fichier"]["name"];

pour ouvrir la copy: $fichier=$_FILES["fichier"]["tmp_name"];



d'ailleurs :

$msg_webmaster
= $_POST
[ 'msg_webmaster'
];
$sujet
= $_POST
['sujet'
];
$NomFichier
= $_POST
['fichier'
];


où est $fichier?



Partant de là, je sais pas si ça marchera, mais ça sera déjà mieux...

J'édifierai des cathédrales de soufrance en ton nom, Lucifer.
0
titiameni Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 17 décembre 2008
14 juil. 2008 à 14:14
Comment peut-on insere un chemin d'une piéce jointe dans une base de données SQL.
J'ai besion d'aide.
Merci d'avance
0
Rejoignez-nous