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

Langage PHP Discussion :

Envoi de pièce jointe éternel


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 36
    Points
    36
    Par défaut Envoi de pièce jointe éternel
    Bonjour
    je galère depuis plusieurs jours , je craque ... aussi je fais appel à la communauté
    j'ai une PJ qui se nomme facture_18 dans le fichier tmp en chmod 0777
    je tente de l'envoyer avec le script suivant qui appelle la fonction en bas envoimail , le mail part bien, le nom de la pièce jointe y est attaché mais le poids est faux et la pièce ne s'ouvre pas (testé avec firefox et adobe acrobat qui me dit mauvais encodage peut être ..

    détail script
    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
                   if(isset($_GET['objet']))
    			$objet = strtolower($_GET['objet']);
    		if(isset($_GET['body']))
    			$body = nl2br(htmlentities($_GET['body'], ENT_QUOTES));
    		if(isset($_GET['mailessai']))
    			$desti= $_GET['mailessai'];
    		else
    			$desti= $emailclient;
    		if(isset($_GET['objet']))
    			$objet = strtolower($_GET['objet']);
    		if(isset($_GET['body']))
    			$body = nl2br(htmlentities($_GET['body'], ENT_QUOTES));
    		if(isset($_GET['mailessai']))
    			$desti= $_GET['mailessai'];
    		else
    			$desti= $emailclient;
    		if($typepiece == 'Facture')
    			$proform = 'Facture';
    		elseif($typepiece == 'Commande' AND isset($proforma) AND $proforma==1)
    			$proform = 'Facture_proforma';
    		else
    			$proform = 'Commande';
    		$nomfichier = $proform . '_' . $numcommande . '.pdf';
    		envoimailrelance('nepasrepondre@xxx.fr', $desti, $objet, $body, $nomfichier, $_xxx['mailadmin'], $_xxx['mailadmin']);
    		echo '<br /><div class="info">Le mail avec la PJ est parti !</div>';
    jusque la pas de soucis, j'ai recréé exactement le même nom que ma PJ qui est dans le fichier temp ..
    la fonction
    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
    function envoimailrelance($emailexpediteur, $emaildestinataire, $objet, $html = '', $piecejointe, $emailreponse = '', $emailaccuse = '')
    {
        $eol = PHP_EOL;
        $mailadmin = 'nepasrepondre@b3a.fr';
        $emailreponse = $emailexpediteur;
        $boundary = 'boundary_' . md5(time());
        // Entete du mail
        $headers = "From: $mailadmin" . $eol;
        $headers .= "Reply-To: $emailreponse" . $eol;
        $headers .= "X-Priority: 1".$eol;
        $headers .= "MIME-Version: 1.0" . $eol;
        $headers .= "Disposition-Notification-To: $emailaccuse" . $eol;
        // Si le mail est sans piece jointe
        if ($piecejointe == '')
            $headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . $eol;
        else
            $headers .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $eol;
        $headers .= 'This is a multi-part message in MIME format.' . $eol;
        // Mail en HTML
        $body = '--' . $boundary . $eol;
        $body .= 'Content-Type: text/html; charset="utf-8"' . $eol . $eol;
        $body .= $html . $eol;
        // Piece jointe
        if ($piecejointe != '')
        {
    		$path = "tmp/";
    		// Liste de MIME
    		$mime = 'application/pdf';
    		// debut piece jointe
    		$body .= '--' . $boundary . $eol;
    		$body .= 'Content-Type: ' . $mime . '; name="' . $piecejointe . '"' . $eol;
    		$body .= 'Content-Transfer-Encoding: base64' . $eol;
    		$body .= 'Content-Disposition:attachement; filename="' . $piecejointe . '"' . $eol. $eol;
    		$body .= chunk_split(base64_encode(file_get_contents($path.$piecejointe))) . $eol;
        }
        // Fin de message
        $body .= '--' . $boundary . '--' . $eol;
        // Envoie du mail
        mail($emaildestinataire, $objet, $body, $headers, '-f' . $mailadmin)
    }

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    et si tu utilisais la librairie PHPMAILER pour envoyer des mails ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 36
    Points
    36
    Par défaut je préfererais comprendre ce qui ne marche pas dans ma fonction ...
    je prefererai comprendre ce qui ne marche pas dans ma fonction

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 393
    Points : 15 754
    Points
    15 754
    Par défaut
    personnellement, j'aime bien aussi comprendre ce que je fais au lieu de juste copier-coller un code et l'oublier, donc je comprends votre curiosité.
    mais avec l'envoi d'e-mail composés, la plupart du temps ce n'est pas un soucis de boucle PHP ou d'une variable erronée. si vous voulez trouver votre soucis, vous allez peut être devoir étudier entièrement un nouveau protocole qui se découpe en 4 RFC tellement la question n'est pas vite répondue :
    https://tools.ietf.org/html/rfc2045
    https://tools.ietf.org/html/rfc2046
    https://tools.ietf.org/html/rfc2047
    https://tools.ietf.org/html/rfc2049

    une autre façon d'étudier cela serait de lire la source de phpmailer pour voir comment les développeurs de cette bibliothèque on réussi à s'en sortir.

    au final, le fait de vouloir comprendre le soucis est souvent constructif mais là l'intérêt d'apprendre ce format se limite à avoir plus d'expérience dans le développement autour des serveurs POP, IMAP et SMTP.
    donc si ce n'est pas dans vos projets de carrière, je pense que cela ne vous apportera pas grand chose professionnellement.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 36
    Points
    36
    Par défaut truc de fou..
    Merci pour les infos,
    en fait ce que j'ai écrit marche très bien , je viens de réessayer , et c'est nickel ..
    ce qui devait se passer est qu'a mon premier essai, le code avait surement une erreur, j'ai du corriger, mais à chaque relance le nom de la piece changait (facture_34-1.php) et s'incrémentait à chaque nouvel essai ..
    surement un problème de sessions ou de cache, j'aurais du essayer de tous vider et killer ...

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Merci de cocher et de Mathieu pour l'aide apportée.

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

Discussions similaires

  1. [JavaMail] Envoi de pièce jointe
    Par log2n dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 08/11/2013, 09h34
  2. envoi fichier pièce jointe avec Jmail
    Par nickg dans le forum ASP
    Réponses: 2
    Dernier message: 04/07/2006, 09h38
  3. Réponses: 7
    Dernier message: 30/06/2006, 17h12
  4. [axis - SOAP] Envoi de pièces jointes
    Par getupa dans le forum Services Web
    Réponses: 1
    Dernier message: 17/01/2006, 12h04
  5. problème avec l'envoi de pièces jointes
    Par mouna201 dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 11/01/2006, 13h20

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