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 :

Cherche l'erreur -- mail + pièces jointes -- php5 -- zend f2


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 40
    Points : 55
    Points
    55
    Par défaut Cherche l'erreur -- mail + pièces jointes -- php5 -- zend f2
    Salut tous le monde

    Après avoir fait de nombreuses recherches et malgré le nombre important de posts que j'ai pu lire, je n'arrive pas à identifier mon erreur....

    Pour faire simple,
    • J'ai créé un formulaire d'upload de fichier
    • Que je transforme en pdf, fusionne si besoin et sauvegarde sur mon serveur
    Jusque là tout fonctionne correctement, les fichiers pdf que je génère sont parfaitement lisible avec adobe.
    Mais ensuite :
    • je cherche à les envoyer par mail
    Et la plus rien de fonctionne, j'envoie bien un mail, il y a bien mes fichiers rattachés mais illisible avec adobe qui détecte bien qu'ils ont été envoyé en pièce jointe et signale qu'ils sont endommagés ou corrompus....

    Voici ma méthode d'envoi
    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
    public function sendMailJoin(Contrat $contrat, array $result) {
     
    	#création du mail
    		$sm = $this->getServiceLocator();
    		$config = $sm->get('config');
    		$comptesMails = $config['mail'];
    		$mail = new Mail\Message();
    		$mail->setEncoding("UTF-8");
    	# Récupération des paramètres mails de la boite gestion.
    		$mail->setFrom($comptesMails['****']['mail'], $comptesMails['****']['intitule']);
    		$mail->addTo($contrat->getEmail()*/, $contrat->getRaisonSociale());
    	# Contenu
    		$txtSujet = 'Envoi de fichiers ';
    		$txtContenu = 'blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla';
    		$aPart = array();
    	# Contenu Texte
    		$partTexte = new Mime\Part(strip_tags(str_replace(array('<br>', '<li>', '</li>'), array("\n", '- ', "\n"), $txtContenu)));
    		$partTexte->type = "text/plain; charset=UTF-8";
    		$partTexte->encoding = 'quoted-printable';
    		$aPart[] = $partTexte;
    	# Contenu Html
    		$partHtml = new Mime\Part('<html><body><div>'.$txtContenu.'</div></body></html>');
    		$partHtml->type = "text/html; charset=UTF-8";
    		$partHtml->encoding = 'quoted-printable';
    		$aPart[] = $partHtml;
    	#attachement
    		foreach ($result['pdf'] as $myPdf){
    			$aPart[] = $this->MonPlugin()->getAttachementFile($myPdf);
    		}
    	# Sujet
    		$mail->setSubject($txtSujet);
    	#corp du mail
    		$body = new Mime\Message();
    		$body->setParts($aPart);
    		$mail->setBody($body);
    		$mail->getHeaders()->get('content-type')->setType('multipart/alternative');
    	# Envoi du mail
    		$transport = new Mail\Transport\Sendmail();
    		$transport->send($mail);	
     
    	}
    et pour ma methode getAttachementFile() voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function getAttachementFile($param) {
     
    		if(file_exists($param)){
    			$file= pathinfo($param);
    			$txt = chunk_split(base64_encode(file_get_contents($param))) ;
    			$partPdf = new Mime\Part($txt);
    			$partPdf->type = 'application/pdf';
    			$partPdf->filename = $file['basename'];
    			$partPdf->disposition = 'attachement';
    			$partPdf->encoding = 'base64';
    			return $partPdf;
    		}	
     
    	}
    Si quelqu'un pouvait m'aider ou bien m'orienter sur un tuto.... et je ne souhaite pas passer par la librairie phpMailer......
    Merci beaucoup....

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Si tes fichiers sont corrompus c'est sans doute que PHP à rajouter quelque chose dedans.
    Essai d'en ouvrir un avec notepad++ pour voir si defois il n'yaurais pas des erreur PHP à l'intérieur.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    Merci grunk pour ta réponse
    je viens de tester, lorsque j'ouvre mon fichier envoyé avec notepad++ j'ai le contenu encodé en base 64
    je l'ai copie pour le tester sur https://www.base64decode.org/ afin de voir s'il pouvait décoder le fichier et cela fonctionne donc php n'ajoute rien seulement mon fichier ne se décode pas .....
    une idée .....

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Si ton fichier est en base 64 c'est que les entête du mail ne permettent pas au client de comprendre que le fichier est en base64. Il y'a donc un soucis de ce coté là.

    Je sais pas quel lib tu utilise mais en général les librairie de mail permettent de simplement donner un chemin et elle gère toute la tambouille derrière.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    Salut grunk

    J'utilise la lib Zend\Mail....

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    J'ai l'impression qu'il manque le boundary entre tes parts "textuelle" et les pièces jointes.

    Regarde peut être cet exemple : https://akrabat.com/sending-attachme...with-zendmail/
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    Merci Grunk

    Ce tuto est une vraie mine d'or !!!!
    Super en plus depuis le début je provoquais une erreur à la création de la Mine\Part, en fournissant le contenue de mon fichier déjà encodé en base64 alors qu'en fait zend\mail s'en charge !!! résultat mon fichier était encodé deux fois.....
    Normale qu'à la réception je ne pouvais pas ouvrir mon fichier....

    Donc merci beaucoup et pour ceux qui voudrez voir la solution finale... voici :
    en premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use Zend\Mime;
    use Zend\Mail;
    et ensuite :
    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
    54
    55
    56
    57
    	public function sendMailJoin($to, $from, $messageHtml, $file) {
     
     
    		$email_subject = "Essaie envoie pdf"; //Sujet du mail
     
    		$message = new Mail\Message();
    		$message->addTo($to);
    		$message->addFrom($from);
    		$message->setSubject($email_subject);
    		$text = strip_tags(str_replace(array('<br>', '<li>', '</li>'), array("\n", '- ', "\n"), $messageHtml));
     
    	// HTML part
    		$htmlPart           = new Mime\Part($messageHtml);
    		$htmlPart->encoding = Mime\Mime::ENCODING_QUOTEDPRINTABLE;
    		$htmlPart->type     = "text/html; charset=UTF-8";
    	// Plain text part
    		$textPart           = new Mime\Part($text);
    		$textPart->encoding = Mime\Mime::ENCODING_QUOTEDPRINTABLE;
    		$textPart->type     = "text/plain; charset=UTF-8";
     
    		$body = new Mime\Message();
     
    	///////////Attachments/////////////// PIECES JOINTES
     
    		$content = new Mime\Message();
    		$content->addPart($textPart);
    		$content->addPart($htmlPart);
     
    		$contentPart = new Mime\Part($content->generateMessage());
    		$contentPart->type = "multipart/alternative;\n boundary=\"" .
                $content->getMime()->boundary() . '"';
     
    		$body->addPart($contentPart);
            $messageType = 'multipart/mixed';
     
    		foreach ($file['pdf'] as $pdf){
    			$info = pathinfo($pdf);
    			$handle = fopen($pdf, 'rb'); //Ouverture du fichier
    			$content = fread($handle, filesize($pdf)); //Lecture du fichier
    			$f = fclose($handle); //Fermeture du fichier
    			$attachment = new Mime\Part($content);
                $attachment->filename    = $info['basename'];
                $attachment->type        = 'application/pdf';
                $attachment->encoding    = Mime\Mime::ENCODING_BASE64;
                $attachment->disposition = Mime\Mime::DISPOSITION_ATTACHMENT;
                $body->addPart($attachment);
    		}
     
    		 // attach the body to the message and set the content-type
    		$message->setBody($body);
    		$message->getHeaders()->get('content-type')->setType($messageType);
    		$message->setEncoding('UTF-8');
    	///////////////////////////////////////////////	
    		$transport = new Mail\Transport\Sendmail();
    		$transport->send($message);
     
    	}

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

Discussions similaires

  1. Mail pièce jointe
    Par Claire07 dans le forum ASP.NET
    Réponses: 15
    Dernier message: 30/05/2007, 16h17
  2. [Mail] Envoi/Reception compte mail (pièce jointe)
    Par Curby dans le forum Langage
    Réponses: 1
    Dernier message: 27/03/2007, 20h54
  3. Réponses: 7
    Dernier message: 30/06/2006, 17h12
  4. [Mail] mail pièce jointe
    Par yAnSoLo82 dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 13h48
  5. [Mail] [fonction mail] Pièces jointes
    Par poussinphp dans le forum Langage
    Réponses: 2
    Dernier message: 30/12/2005, 12h15

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