8796 sujets

Développement web côté serveur, CMS

Mon formulaire de contact permet sans problème de joindre un fichier .doc que je reçois sans problème.
Si dans mon script, je change le type MIME et dans Content-Type, je stipule "application/pdf" à la place de "application/msword".
Je reçois bien un fichier joint d'extension .pdf mais illisible que adobe reader refuse d'ouvrir.
Naturellement, je me suis assuré que ce fichier à l'origine était lisible sur le disque dur et que le reader pouvait l'ouvrir sans problème.
Auriez-vous des pistes ?
Modifié par PJC (17 Apr 2010 - 20:06)
Bonjour et désolé de ne pas avoir salué l'ensemble des gens présents sur ce forum.
Donc : Bonjour à tous.
Voilà mon script d'envoi du mail suite à la saisie dans un formulaire de contact.
function mail_PJ($destinataire, $nomExpediteur, $mailExpediteur, $sujet, $corps, $fichier, $typemime, $nomPJ) {

// Les headers pour un mail multiparts
$headers= "MIME-Version: 1.0\r\n";
$headers.= "From: \"$nomExpediteur\" <$mailExpediteur>\r\n";
$headers.= "Content-type: multipart/mixed;\r\n"; // Chaine permettant de différencier les différentes parties du mail
$limite = '_parties_'.md5(uniqid (rand()));
$headers.= " boundary=\"----=$limite\"\r\n\r\n";

// Première partie, corps du mail en HTML
$texte = "------=$limite\r\n";
$texte.= "Content-type: text/html; charset=\"iso-8859-1\"\r\n\r\n";
$texte.="<HTML><HEAD></HEAD><BODY>".nl2br($corps)."</BODY></HTML>";

// Traitement pour attacher une PJ
// D'abord on lit le fichier
$contenu = file_get_contents($fichier);
$attachement = "\r\n------=$limite\r\n";
$attachement .= "Content-Type: $typemime; name=\"$nomPJ\"\r\n";
$attachement .= "Content-Transfer-Encoding: BASE64\r\n";
$attachement .= "Content-Disposition: attachment; filename=\"$nomPJ\"\r\n\r\n";

// On joint le fichier en l'encodant en base 64
$attachement .= chunk_split(base64_encode($contenu));

// enfin on envoie le mail
mail($destinataire, $sujet, $texte.$attachement, $headers);


}

// Destinataire du mail
$destinataire = "destinatire@wanadoo.fr";

// Expéditeur
$nomExpediteur = "$user_name";
$mailExpediteur = "$user_email";

// sujet du mail
$sujet = "Formulaire de contact site";

// texte du corps de mail
$corps = "
Nom: $user_name <br>
Prenom: $user_prenom <br>
Email: $user_email <br>
Type: $user_type <br>
Societe: $user_societe <br>
Tel: $user_tel <br>
Adresse: $user_adresse <br>
CP: $user_cp    
Ville: $user_ville <br>
Secteur: $user_secteur <br><br>
Commentaire: $user_comment.";


$typemime = "application/msword";
$fichier = $_REQUEST['fichier'];
$nomPJ = "$fichier";
mail_PJ($destinataire, $nomExpediteur, $mailExpediteur, $sujet, $corps, $fichier, $typemime, $nomPJ);
[code]

Voilà la partie PHP qui fonctionne très bien pour un document word.
mais si je remplace $typemime par "application/pdf" et que je demande à l'utilisateur de joindre un fichier d'extension .pdf, cela ne marche plus.
Je reçois le fichier en question avec la bonne extension mais la taille de celui-ci est minuscule et le reader d'adobe évoque un problème de décodage.
Merci par avance si vous avez des pistes.
Salut et bienvenue parmi nous Smiley smile

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace).
Tu peux d'ailleurs lire maintenant toutes les règles, ça te permettra d'éviter un troisième message de ma part pour te les signaler. Smiley cligne

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

Bonne continuation Smiley smile

upload/1-code.gif
Modifié par Mikachu (16 Apr 2010 - 18:42)
Salut,

as-tu essayé une classe toute faite?

moi pour ne pas me prendre la tête avec ce genre de problématique,
j'ai toujours utilisé PHPMailer

et pour l'instant j'en ai toujours été content.

Pascal
Modifié par CPascal (17 Apr 2010 - 19:55)
Merci CPascal,
J'ai suivi ton conseil et ça marche tout seul !
Nickel.
Merci pour ton intervention.
A bientôt.
Eh ben voila.

des fois la solution est toute bête en informatique.

pas besoin de ré-inventer la roue.

edit: merci d'avoir mis résolu

Pascal.
Modifié par CPascal (18 Apr 2010 - 09:02)