[php] envoyer un mail avec une pièce jointe

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


HawkEye
Modérateur
Modérateur
 
Messages: 15041
Inscription: Lun Fév 23, 2004 12:33

[php] envoyer un mail avec une pièce jointe

Message le Ven Fév 15, 2008 18:28

Hello,

Je cherche à réaliser un formulaire qui me permette d'envoyer un mail, via php, avec une pièce jointe (avec limitation de taille).

Jusqu'ici, tout ce que je trouve m'envoie le mail, mais pas la pj...

Est-ce que quelqu'un aurait une solution simple à proposer ?

Merci :oops:


spout
WRInaute accro
WRInaute accro
 
Messages: 1320
Inscription: Mer Mai 14, 2003 11:05

Message le Ven Fév 15, 2008 18:53


pelloq1
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Fév 06, 2008 13:08

Message le Ven Fév 15, 2008 21:15

regarde ici dans les comments il y a des exemples :
http://ch2.php.net/manual/fr/ref.mail.php


Audiofeeline
WRInaute accro
WRInaute accro
 
Messages: 5181
Inscription: Jeu Oct 20, 2005 19:47

Message le Sam Fév 16, 2008 1:26

Upload le fichier sur le serveur et joint le lien dans l'email. :)


e-kiwi
Modérateur
Modérateur
 
Messages: 13870
Inscription: Mar Déc 23, 2003 9:04

Message le Sam Fév 16, 2008 8:12

ou la classe mail de PEAR


ptit_mousse
WRInaute discret
WRInaute discret
 
Messages: 66
Inscription: Mar Déc 19, 2006 13:24

Message le Sam Fév 16, 2008 14:17

Allé un petit bout de code, c'est toujours sympa le week-end et au moins on ne fait appel qu'a du pur PHP bien de chez nous... Enfin j'espère ne pas avoir fait d'erreur !

Code: Tout sélectionner
// Destinataire du mail
$destination = 'destinataire@example.com';
// Expediteur du mail
$expediteur = 'expediteur@example.com';
// sujet du mail
$sujet = 'Mail avec PJ';
// Les headers pour un mail multiparts
$headers= "MIME-Version: 1.0\n";
$headers.= "From: $expediteur\n";
$headers.= "Content-type: multipart/mixed;\n";
// Chaine permettant de différencier les différentes parties du mail
$limite = '_parties_'.md5(uniqid (rand()));
$headers.= " boundary=\"----=$limite\"\n\n";

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

// Traitement pour attacher une PJ
// D'abord on lit le fichier
$fichier = 'c:\temp\son.wav';
$contenu = file_get_contents($fichier);
$attachement = "------=$limite\n";
// Dans mon exemple, il s'agit d'un fichier wav, il faut mettre le bon mime type
$attachement .= "Content-Type: audio/x-wav; name=\"fichier.wav\"\n";
$attachement .= "Content-Transfer-Encoding: base64\n";
$attachement .= "Content-Disposition: attachment; filename=\"fichier.wav\"\n\n";
// Ca y est on joint le fichier en l'encodant en base 64
$attachement .= chunk_split(base64_encode($contenu));

// enfin on envoi le mail
mail($destination, $sujet, $texte.$attachement, $headers);


HawkEye
Modérateur
Modérateur
 
Messages: 15041
Inscription: Lun Fév 23, 2004 12:33

Message le Sam Fév 16, 2008 14:24

Merci pour les pistes, et pour la portion de code.
Je teste tout ça en espérant y trouver mon bonheur ;)


belaadel
Nouveau WRInaute
 
Messages: 10
Inscription: Dim Aoû 20, 2006 11:43

Message le Mer Mar 12, 2008 23:31

Bonjour,

J'intérviens rapidement (et brièvement aussi) dans votre discussion car j'ai eu des problèmes:

J'ai fait des testes en mettant comme suivant:

// enfin on envoi le mail
mail($destination, $sujet, $texte.$attachement, $headers);

Je reçois une grande liste de caractères (collés au message Oh un mail !------=_parties_0b4....db Content-Type) dans le corps du message et sans le fichier en pièce jointe.

et aussi un autre teste:
// enfin on envoi le mail
mail($destination, $sujet, $texte, $headers.$attachement);
Je reçois le fichier en pièce jointe mais sans le texte dans le corps du message.

Y a-t-il une solution/explication?

Merci d'avance de votre aide.
Merci encore.

Gattux
Nouveau WRInaute
 
Messages: 1
Inscription: Ven Aoû 28, 2009 16:05

Re: [php] envoyer un mail avec une pièce jointe

Message le Ven Aoû 28, 2009 16:31

Bonjour à tous,

Dsl de réveiller un topic de quelque temps mais en cherchant sur Google c'est ici qu'on arrive ^^"

Donc voila ça fait un moment que je cherchais un scripte pour envoyer une pièce joint avec la fonction mail(), j'ai tenté plusieurs scripte, aucun ne marchait... Le meilleur que j'ai trouvé est celui donner ci dessus par ptit_mousse (merci en même temps :mrgreen: ) car il fonctionnait déjà mieux que d'autres. Je ne sais pas si ça vient de moi m'enfin bon... xD

Je voulais envoyer un e-mail avec une pièce jointe en html et malgré les modifications à faire (Content-Type: text/html ...) ça ne marchai toujours pas.
Mais aujourd'hui j'ai trouvé la solution : il manquait un "\n" ici :

$attachement = "\n------=$limite\n";
Ou sinon on peut le mettre à la fin du texte (dans l'exemple après la balise </html>)

J'ai eut le même bug que belaadel (juste au dessus) et en mettant un retour a la ligne tout s'arrange chez moi ^^

Bref voila le code complet fonctionnel chez moi à 100% pour envoyer un fichier html : (ce qui est entre [crochet] est à changer chez vous)

Code: Tout sélectionner
<?php
     //Auteur : ptit_mousse

    // Destinataire du mail
$destination = "[e-mail du destinataire]";
// sujet du mail
$sujet = "[sujet du message]";
// Les headers pour un mail multiparts
$headers= "MIME-Version: 1.0\n";
$headers.= "From: \"[Nom de l'expediteur]\" <[adresse e-mail de l'expéditeur]>\n";
$headers.= "Content-type: multipart/mixed;\n";
// Chaine permettant de différencier les différentes parties du mail
$limite = '_parties_'.md5(uniqid (rand()));
$headers.= " boundary=\"----=$limite\"\n\n";

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

// Traitement pour attacher une PJ
// D'abord on lit le fichier
$fichier = '[nom du fichier]';
$contenu = file_get_contents($fichier);
$attachement = "\n------=$limite\n";
// Dans mon exemple, il s'agit d'un fichier html, il faut mettre le bon mime type
$attachement .= "Content-Type: text/html; name=\"[nom du fichier]\"\n";
$attachement .= "Content-Transfer-Encoding: base64\n";
$attachement .= "Content-Disposition: attachment; filename=\"[nom du fichier]\"\n\n";
// Ca y est on joint le fichier en l'encodant en base 64
$attachement .= chunk_split(base64_encode($contenu));

// enfin on envoi le mail
mail($destination, $sujet, $texte.$attachement, $headers);

?>


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités