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


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

[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: 4378
Inscription: 14 Mai 2003

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


pelloq1
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 37
Inscription: 6 Fév 2008

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: 5257
Inscription: 20 Oct 2005

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: 15617
Inscription: 23 Déc 2003

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

ou la classe mail de PEAR


ptit_mousse
WRInaute discret
WRInaute discret
 
Messages: 67
Inscription: 19 Déc 2006

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
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

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
Nouveau WRInaute
 
Messages: 10
Inscription: 20 Aoû 2006

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
Nouveau WRInaute
 
Messages: 1
Inscription: 28 Aoû 2009

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);

?>


jerkeve
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 39
Inscription: 11 Juin 2004

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

Message le Mer Fév 10, 2010 15:27

MERCI a vous deux Gattux et P'tit mousse : un bout de temps que je me cassais le nez sur ces envois en PJ et là c'est nickel ! :D


ptit_mousse
WRInaute discret
WRInaute discret
 
Messages: 67
Inscription: 19 Déc 2006

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

Message le Mer Fév 10, 2010 17:45

J'avais quelque peu oublié ce charmant bout de code mis sur WRI et il faut absolument y apporter une modification sans quoi les mails envoyés risquent de vous revenir en erreur (par Free notamment). Donc il faut ABSOLUMENT remplacer tous les \n par des \r\n


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

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

Message le Mer Fév 10, 2010 17:56

Ou plus simplement utiliser PHPMailer qui gère tout ça à la perfection : http://phpmailer.worxware.com/index.php?pg=phpmailer


jerkeve
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 39
Inscription: 11 Juin 2004

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

Message le Mer Fév 10, 2010 20:04

merci ptit_mousse, j'adapte illico

merci aussi pour PHPmailer, je connaissais mais pas encore testé ... va falloir que je fasse ça. Il y a qquechoise a installer sur le serveur ?

:D


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

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

Message le Mer Fév 10, 2010 20:05

Non, juste à mettre en place les différentes classes nécessaires.


jerkeve
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 39
Inscription: 11 Juin 2004

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

Message le Mer Fév 10, 2010 20:20

ok une classe toute simple. Je pensais que ça ne marchais pas avec PHP4 mais si, c'est super !
Gracie mille :)

========================= edit

avec un ch'ti tuto plutôt bien fait en complément :
http://stephaneey.developpez.com/tutoriel/php/phpmailer/

:mrgreen:


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Gmail Notifier



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité