IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Envois e-mail avec pieces jointe


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Envois e-mail avec pieces jointe
    Bonjour à tous,

    je sollicite de votre part une aide concernant l'envoi d'email, avec pièces jointe.

    je m'explique, je souhaiterais permettre à un visiteur de mon site de m'envoyer des pièces jointes c'est-à-dire qu'il cliques sur un bouton, sélection sur son disque dur le fichier, puis m'envoie le fichier dans ma boîte e-mail, l'objectif et de pouvoir recevoir des pièces diverse sans être obligé de communiquer mon adresse e-mail.

    On peux imaginer un site de formation ou l'étudiant doit envoyer les fichiers exercices par e-mail à son correcteur.

    j'ai consulté sur Google, j'ai trouvé une tonne de réponses aucune d'elle ne fonctionne, notamment celles proposés avec la balise <input> avec l'attribut type=file, cette solution pourrais éventuellement fonctionner sur IE, mais pas sur d'autre navigateurs du à une faille de sécurité corrigée.

    Avez-vous une solution ou pouvez-vous me mettre sur une piste fonctionnelle merci de prendre en compte le fait que la balise ci-dessus ne retourne pas le chemin complet du fichier a envoyer sur tous les navigateurs

    merci à tous

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour qu'un fichier passe du navigateur au serveur, je ne vois pas d'autre solution qu'un input-file mais je ne vois pas non plus ce qui te bloque avec cette methode ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Envois de pieces jointe
    bonjour,

    Ce qui me gene c'est que cela ne fonctionne pas sur tous les navigateur par exemple firefox et autre, as tu un script fonctionnel sur ce type de navigateur

    merci de ta reponse

    Citation Envoyé par sabotage Voir le message
    Pour qu'un fichier passe du navigateur au serveur, je ne vois pas d'autre solution qu'un input-file mais je ne vois pas non plus ce qui te bloque avec cette methode ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    input file fonctionne evidemment avec firefox.

    pour l'envoi du mail :
    http://a-pellegrini.developpez.com/tutoriels/php/mail/

    dans ton cas le $file_name sera $_FILES['nom_du_champ']['tmp_name']
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour et merci pour ta réponse,

    j'ai bien l'envois d'un fichier qui se fait de taille = 0
    d'un nom de fichier bizaroid

    voicie le code source de mes deux pages de tests

    le fichier du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <FORM method="POST"   action="upload.php3" ENCTYPE="multipart/form-data">
     <INPUT type="file"   name="fichier">
     <INPUT type="submit" value="Envoyer">
    </FORM>

    le fichier upload
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <?php
    // To
    //$to = 'truc@server.com';
    $to = 'mon-email ... ici';
     
    // Subject
    $subject = 'Test Mail avec pièces jointe';
     
    // clé aléatoire de limite
    $boundary = md5(uniqid(microtime(), TRUE));
     
    // Headers
    $headers = 'From: Adrien Pellegrini <mail@server.com>'."\r\n";
    $headers .= 'Mime-Version: 1.0'."\r\n";
    $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
    $headers .= "\r\n";
     
    // Message
    $msg = 'This is a multipart/mixed message.'."\r\n\r\n";
     
    // Texte
    $msg .= '--'.$boundary."\r\n";
    $msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
    $msg .= 'Content-transfer-encoding:8bit'."\r\n";
    $msg .= 'Un message avec une pièce jointe.'."\r\n";
     
    // Pièce jointe
    // $file_name = 'image.jpg';
    $file_name = $_FILES['fichier']['tmp_name'];
     
    if (file_exists($file_name))
    {
    	$file_type = filetype($file_name);
    	$file_size = filesize($file_name);
     
    	$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);
     
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
    	$msg .= 'Content-transfer-encoding:base64'."\r\n";
    	$msg .= $content."\r\n";
    }
     
    // Fin
    $msg .= '--'.$boundary."\r\n";
     
    // Function mail()
    mail($to, $subject, $msg, $headers);
    ?>
    le fichier envoyer est un fichier de text de nom date_picker.js de 17ko

    voici ce que j'ai dans les variables

    $file_name : /mnt/167/sda/7/9/ic2v/phpZVj9sk
    $file_type : file
    $file_size : 17146

    le fichier recu dans boite email : mnt167sda79ic (0,0 Ko)

    Je me suis peux être trompé, ou oublié quelque chose, as tu une idée sur le pourquoi de ce comportement ?

    merci

    Citation Envoyé par sabotage Voir le message
    input file fonctionne evidemment avec firefox.

    pour l'envoi du mail :
    http://a-pellegrini.developpez.com/tutoriels/php/mail/

    dans ton cas le $file_name sera $_FILES['nom_du_champ']['tmp_name']

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    ca sera un peu mieux comme ca pour le nom de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $msg .= 'Content-type:'.$file_type.';name='.$_FILES['fichier']['name']."\r\n";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Cela ne fonctionne toujour pas

    sur une email hotmail j'obtien la piece jointe
    1 pièce jointe
    date_pick...js (0,0 Ko),

    avec le warning
    Windows Live Hotmail a bloqué certaines pièces jointes de ce message qui semblent présenter un risque.

    je ne peux donc pas ouvrir, j'ai donc fait le test sur une adresse orange.fr
    et je recois en pieces jointes 2 fichiers

    (pas de nom de...
    (22.91 ko)
    télécharger

    (pas de nom de...
    (1 ko)
    télécharger

    le premier fichier contiens bien le contenu, le deuxième est vide

    Pourquoi deux fichiers sans nom et un vide ?

    Citation Envoyé par sabotage Voir le message
    ca sera un peu mieux comme ca pour le nom de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $msg .= 'Content-type:'.$file_type.';name='.$_FILES['fichier']['name']."\r\n";

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Chez moi cela fonctionne.
    Est ce que hotmail te donne la raison de son filtre ? Ils bloquent peut etre simplement les fichier javascript.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour, cela n'est pas très grave si hotmail bloque, je peux changer de boite email.

    Sur un compte orange.fr j'obtiens deux fichier sans nom cela peux être embêtant as-tu une solution à cela ?

    merci pour ton aide

    Citation Envoyé par sabotage Voir le message
    Chez moi cela fonctionne.
    Est ce que hotmail te donne la raison de son filtre ? Ils bloquent peut etre simplement les fichier javascript.

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    je suis dans la même situation, les mails arrivant sur hotmail font 0 ko.

    si quelqu'un a une solution =)

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour,

    Si tu parles de Hotmail, la raison a été donnée : certains types de fichiers sont refusées.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    oui enfin des fichiers .pdf ou .jpg passent très bien normalement, mais avec ce tuto http://a-pellegrini.developpez.com/tutoriels/php/mail/ impossible :/

    voilà mon code, au cas où quelqu'un est motivé :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    //$sujet et $message_simple sont récupérés par POST du formulaire
    $message_html = '<html>
    		<head>
    		<title>'.$sujet.'</title>
    		</head>
    		<body>'.$message_simple.'</body>
    		</html>';
     
    //-----------------------------------------------
    //GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
    //-----------------------------------------------
     
    $frontiere = '-----=' . md5(uniqid(mt_rand()));
     
    //-----------------------------------------------
    //HEADERS DU MAIL
    //-----------------------------------------------
     
    //$de par POST du formulaire aussi
    $headers = 'From: "'.$de.'" <'.$de.'>'."\n";
    //$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
    $headers .= 'MIME-Version: 1.0'."\n";
    $headers .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"';
     
    //-----------------------------------------------
    //MESSAGE TEXTE
    //-----------------------------------------------
     
    $msg = 'This is a multi-part message in MIME format.'."\n\n";
     
    $msg .= '--'.$frontiere."\n";
    $msg .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
    $msg .= 'Content-Transfer-Encoding: 8bit'."\n\n";
    $msg .= $message_simple."\n\n";
     
    //-----------------------------------------------
    //MESSAGE HTML
    //-----------------------------------------------
     
    $msg .= '--'.$frontiere."\n";
     
    $msg .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
    $msg .= 'Content-Transfer-Encoding: 8bit'."\n\n";
    $msg .= $message_html."\n\n";
     
    $msg .= '--'.$frontiere.'--'."\n";
     
    //$uploadPath mon chemin vers le fichier
    if (file_exists($uploadPath."presentation.pdf"))
    {
    	$file_type = filetype($uploadPath."presentation.pdf");
    	$file_size = filesize($uploadPath."presentation.pdf");
     
    	$handle = fopen($uploadPath."presentation.pdf", 'rb') or die('File '.$uploadPath.'/presentation.pdf can t be open');
    	$content = '';
    	while (!feof($handle))
    	{
    		$content .= fread($handle, $file_size);
    	}
    	$content = chunk_split(base64_encode($content));
    	fclose($handle);
     
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name="presentation.pdf"\r\n';
    	$msg .= 'Content-transfer-encoding:base64'."\r\n\r\n";
    	$msg .= 'Content-disposition: attachment; filename="presentation.pdf"'.'"\n\n"';
    	$msg .= $content."\r\n";
    }
    else
    {
    	echo $uploadPath."presentation.pdf";
    	echo " - Plaquette non trouvée !<br/>";
    }
     
    if(mail($pour, $sujet, $msg, $headers))
    {
    	echo 'Le mail a été envoyé';
    }
    else
            echo 'Le mail n\'a pu être envoyé';

    Le souci est lié aux Content-Type, j'en suis pratiquement sûr, mais je n'ai pas réussi à trouver une solution ...

    EDIT : je viens de tester sur une boite yahoo, et le mail n'arrive carrément pas du tout ...

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as un $boundary qui traine a la fin de ton code alors que tu utilises $frontiere ailleurs.
    Tu as ajouté des guillements autour de la boundary, tu as enlevé les retours chariots dans les en-têtes ... bref reprend précisément l'exemple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    Après réflexion, je me suis penché sur HTML Mime Mail (http://www.phpguru.org/static/mime.mail.html). La classe permet de construire le mail très facilement, avec pièces jointes ...etc.

    J'ai fait les tests de réception avec Gmail, Hotmail, Yahoo, aucun souci.

    Par contre, pas moyen, rien n'arrive chez Free. Etonnant.

    J'ai trouvé ce topic qui parle d'un problème similaire, mais dans mon cas je n'ai aucun style.

    J'ai aussi fait le tour des filtres chez Free, rien ne semble activé.

    Je ne vois pas trop comment savoir à quel niveau est le blocage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. echec d'envoi de mail avec piece jointe
    Par thaundeadboss dans le forum Langage
    Réponses: 3
    Dernier message: 05/01/2010, 15h04
  2. Réponses: 4
    Dernier message: 02/08/2006, 10h38
  3. [oracle 9] Envoi de mail avec piece jointe
    Par tipote69 dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 15h01
  4. probleme d'envoi de mail avec pieces jointes
    Par tmryuga dans le forum ASP
    Réponses: 9
    Dernier message: 23/02/2006, 14h56
  5. Réponses: 5
    Dernier message: 12/12/2005, 08h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo