Comment attacher fichier par mail en php
Résolu
mad92men
Messages postés
130
Date d'inscription
Statut
Membre
Dernière intervention
-
Alex -
Alex -
Bonjour,
Je cherche un script qui me permet d'attacher un fichier pdf (fichier des conditions generales) à mes mails envoyés par mon formulaire. j'ai trouvé quelques codes sur le net mais aucun ne marche.
j'espère que j'ai été clair ! Si quelqu'un a une solution à mon problème, je lui en serai infiniment reconnaissant.
cordialement
Je cherche un script qui me permet d'attacher un fichier pdf (fichier des conditions generales) à mes mails envoyés par mon formulaire. j'ai trouvé quelques codes sur le net mais aucun ne marche.
j'espère que j'ai été clair ! Si quelqu'un a une solution à mon problème, je lui en serai infiniment reconnaissant.
cordialement
A voir également:
- Comment attacher fichier par mail en php
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
11 réponses
As tu regardé de ce côté là ?
https://www.commentcamarche.net/faq/2761-langages-envoyer-un-mail-avec-piece-jointe
https://www.commentcamarche.net/faq/2761-langages-envoyer-un-mail-avec-piece-jointe
merci kyser pour le tuto. j'ai essayé de rajouter le code dans mon script mais je reçois toujours pas la mon fichier pdf en piece jointe.
voici mon code :
<?php
if(isset($_POST['envoyer'])) {
$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
$contenu="<br/>Nom: $civilite $nom $prenom <br/><br/>Email: $email<br/>";
$contenu=str_replace(chr(92),"",$contenu);
$contenu=str_replace(chr(10),"<br/>",$contenu);
$headers="From: <$email>\n";
$headers.="Content-Type: text/html; charset=UTF-8\n";
$to="xxxx@xxx.fr";
$objet="$demande";
mail($to, $objet, $contenu, $headers);
}
boundary="didondinaditondelosdudosdodudundodudindon"\r\n\n
$body="--". $boundary ."\n
$fichier=file_get_contents('./condition-generales-de-vente.pdf');
$fichier=chunk_split( base64_encode($fichier) );
$body = $body . "--" .$boundary. "\n
Content-Type: application/msword; name=\"condition-generales-de-vente.pdf\"\r\n
Content-Transfer-Encoding: base64\r\n
Content-Disposition: attachment; filename=\"condition-generales-de-vente.pdf\"\r\n\n
$fichier";
//Fermeture de la frontière
$body = $body . "--" . $boundary ."--";
$destinataire = "$email";
$expediteur = "xxxx@xxx.fr";
$reponse = $expediteur;
$thmess = "<html><body> mon texte </body></html>
mail($destinataire,
"Validation de prise en charge",
$thmess, $fichier,
"From: Mon Site<$expediteur>\r\n".
"Reply-To: $reponse\r\n".
"Content-Type: text/html; charset=UTF-8\n");
?>
merci d'avance pour votre aide.
voici mon code :
<?php
if(isset($_POST['envoyer'])) {
$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
$contenu="<br/>Nom: $civilite $nom $prenom <br/><br/>Email: $email<br/>";
$contenu=str_replace(chr(92),"",$contenu);
$contenu=str_replace(chr(10),"<br/>",$contenu);
$headers="From: <$email>\n";
$headers.="Content-Type: text/html; charset=UTF-8\n";
$to="xxxx@xxx.fr";
$objet="$demande";
mail($to, $objet, $contenu, $headers);
}
boundary="didondinaditondelosdudosdodudundodudindon"\r\n\n
$body="--". $boundary ."\n
$fichier=file_get_contents('./condition-generales-de-vente.pdf');
$fichier=chunk_split( base64_encode($fichier) );
$body = $body . "--" .$boundary. "\n
Content-Type: application/msword; name=\"condition-generales-de-vente.pdf\"\r\n
Content-Transfer-Encoding: base64\r\n
Content-Disposition: attachment; filename=\"condition-generales-de-vente.pdf\"\r\n\n
$fichier";
//Fermeture de la frontière
$body = $body . "--" . $boundary ."--";
$destinataire = "$email";
$expediteur = "xxxx@xxx.fr";
$reponse = $expediteur;
$thmess = "<html><body> mon texte </body></html>
mail($destinataire,
"Validation de prise en charge",
$thmess, $fichier,
"From: Mon Site<$expediteur>\r\n".
"Reply-To: $reponse\r\n".
"Content-Type: text/html; charset=UTF-8\n");
?>
merci d'avance pour votre aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ca fonctionne normalement comme ça, il y a quelques petites erreurs de guillemet de ton code il me semble :
Essai chez toi !
Essai chez toi !
<?php //if(isset($_POST['envoyer'])) { $civilite="M"; $nom="plop"; $prenom="blop"; $email="moi@moi.moi"; $contenu="<br/>Nom: $civilite $nom $prenom <br/><br/>Email: $email<br/>"; $contenu=str_replace(chr(92),"",$contenu); $contenu=str_replace(chr(10),"<br/>",$contenu); $blablabla='blablabla'; $headers="From: ".$email."\r\nMIME-Version: 1.0\r\n Content-Type: multipart/mixed; boundary=\"$blablabla\"\r\n\n"; $fichier=file_get_contents('./bidule.txt'); $fichier=chunk_split( base64_encode($fichier) ); //Écriture de la pièce jointe $body = $body . "--" .$boundary. "\n Content-Type: application/msword; name=\"nom_fichier\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment; filename=\"nom_fichier\"\r\n\n $fichier"; $to="xxx@xxx.com"; $objet="demande"; mail($to, $objet, $contenu, $headers); //} ?>
Merci beaucoup pour ton aide kyser, je testerai ton script ce soir et je tiendrai au courant. En fait une dernière question $blablabla='blablabla'; ça correspond a quoi? Et name=\"nom_fichier\"\r\n je rajoute l'extension de mon fichier (.pdf) ou je mets uniquement le nom de fichier?
Merci
Merci
Le $blablabla ici ne sert à rien tu peux le retirer, c'est comme si c'etait un marqueur pour identifier différentes parties du mail, et le name=\"nom_fichier\" c'est juste le nom à l'affichage du mail reçu, c'est lorsqu'on utilise la fonction file_get_contents un peu plus haut qu'on instancie le nom du fichier à ajouter.
Y a pas de soucis si ça t'as aidé c'est cool ;)
Y a pas de soucis si ça t'as aidé c'est cool ;)
encore merci pour t explication kyser :)
j'ai testé ce que tu ma donné toute à lheure et toujours rien je reçois tjr un mail sans pièce jointe.
voici le code :
<?php
if(isset($_POST['envoyer'])) {
$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
$contenu="<br/>Nom: $civilite $nom $prenom <br/><br/>Email: $email<br/>";
$contenu=str_replace(chr(92),"",$contenu);
$contenu=str_replace(chr(10),"<br/>",$contenu);
$blablabla='blablabla';
$headers="From: ".$email."\r\nMIME-Version: 1.0\r\n
Content-Type: multipart/mixed; boundary=\"$blablabla\"\r\n\n";
$fichier=file_get_contents('../www/condition-generales-de-vente.pdf');
$fichier=chunk_split( base64_encode($fichier) );
//Écriture de la pièce jointe
$body = $body . "--" .$boundary. "\n
Content-Type: application/msword; name=\"nom_fichier\"\r\n
Content-Transfer-Encoding: base64\r\n
Content-Disposition: attachment; filename=\"nom_fichier\"\r\n\n
$fichier";
$to="xxxx@xxxx.com";
$objet="$demande";
mail($to, $objet, $contenu, $headers);
}
?>
et voici ce que je reçois
Content-Type: multipart/mixed; boundary="blablabla"
<br/>Nom: xxxxx<br/><br/>Email: xxxxxx@xxxxx.com<br/><br/>
merci bq pour ton aide.
j'ai testé ce que tu ma donné toute à lheure et toujours rien je reçois tjr un mail sans pièce jointe.
voici le code :
<?php
if(isset($_POST['envoyer'])) {
$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
$contenu="<br/>Nom: $civilite $nom $prenom <br/><br/>Email: $email<br/>";
$contenu=str_replace(chr(92),"",$contenu);
$contenu=str_replace(chr(10),"<br/>",$contenu);
$blablabla='blablabla';
$headers="From: ".$email."\r\nMIME-Version: 1.0\r\n
Content-Type: multipart/mixed; boundary=\"$blablabla\"\r\n\n";
$fichier=file_get_contents('../www/condition-generales-de-vente.pdf');
$fichier=chunk_split( base64_encode($fichier) );
//Écriture de la pièce jointe
$body = $body . "--" .$boundary. "\n
Content-Type: application/msword; name=\"nom_fichier\"\r\n
Content-Transfer-Encoding: base64\r\n
Content-Disposition: attachment; filename=\"nom_fichier\"\r\n\n
$fichier";
$to="xxxx@xxxx.com";
$objet="$demande";
mail($to, $objet, $contenu, $headers);
}
?>
et voici ce que je reçois
Content-Type: multipart/mixed; boundary="blablabla"
<br/>Nom: xxxxx<br/><br/>Email: xxxxxx@xxxxx.com<br/><br/>
merci bq pour ton aide.
- $contenu : semble incorrect (concaténation)
- Où est renseigné ton $demande qui se trouve dans $objet ?? Par ailleurs, ton $objet devrait être = $demande; sans les "
- Ton $email est celui du destinataire ou de l'expéditeur ?? Je me pose la question car tu le mets en expéditeur mais tu le renseignes dans le contenu, avec les coordonnées du destinataire, bizarre...
- le titre de ton fichier est-il bon ? il y a une faute d'orthographe (condition sans S) donc est-ce volontaire ? et le chemin est-il bon : est-ce normal le ../ avant la racine du site ?
Si le nom de ton fichier est OK, ce code devrait mieux fonctionner (il faut d'abord y renseigner ce qui manque : infos expéditeur et objet) :
- Où est renseigné ton $demande qui se trouve dans $objet ?? Par ailleurs, ton $objet devrait être = $demande; sans les "
- Ton $email est celui du destinataire ou de l'expéditeur ?? Je me pose la question car tu le mets en expéditeur mais tu le renseignes dans le contenu, avec les coordonnées du destinataire, bizarre...
- le titre de ton fichier est-il bon ? il y a une faute d'orthographe (condition sans S) donc est-ce volontaire ? et le chemin est-il bon : est-ce normal le ../ avant la racine du site ?
Si le nom de ton fichier est OK, ce code devrait mieux fonctionner (il faut d'abord y renseigner ce qui manque : infos expéditeur et objet) :
$civilite = $_POST['civilite']; $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $destination = $email; $sujet = "OBJET DU MAIL"; // à renseigner $headers= "MIME-Version: 1.0\n"; $headers.= "From: \"NOM EXPE\" <expe@site.fr>\n"; // à renseigner $headers.= "Content-type: multipart/mixed;\n"; $limite = '_parties_'.md5(uniqid (rand())); $headers.= " boundary=\"----=$limite\"\n\n"; $texte = "------=$limite\n"; $texte.= "Content-type: text/html; charset=\"iso-8859-1\"\n\n"; $texte.= "<br>Nom : ".$civilite." ".$nom." ".$prenom."<br><br>Email : ".$email."<br>"; $fichier1 = "condition-generales-de-vente"; $fichier = "../www/".$fichier1.".pdf"; $contenu = file_get_contents($fichier); $attachement = "\n------=$limite\n"; $attachement .= "Content-Type: application/pdf; name=\$fichier1\"\n"; $attachement .= "Content-Transfer-Encoding: base64\n"; $attachement .= "Content-Disposition: attachment; filename=\$fichier1.".pdf\"\n\n"; $attachement .= chunk_split(base64_encode($contenu)); mail($destination, $sujet, $texte.$attachement, $headers);