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 :

[Réseau] Envoi mail direct sur smtp


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [Réseau] Envoi mail direct sur smtp
    Bonjour,

    Un de mes scripts php envoit un mail directement sur mon serveur smtp via fsockopen(). Le mail contient du texte et un pdf +/-10Ko en pièce jointe.

    Voici le code concerné :

    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
    $fp = fsockopen ('192.168.254.2', 25, $errno, $errstr, 30);
     
    		if (!$fp) {
    			echo "Erreur création socket";
     
    		} 
     
    		else {
    			// Lecture du fichier pdf
    			$ff = fopen("https://domaine/fichier.pdf", "r");
    			$fileHeaders = get_headers("https://https://domaine/fichier.pdf", 1);
    			$fsize = $fileHeaders["Content-Length"];
    			$attachment = fread($ff, $fsize);
    			fclose($ff);
    			$attachment = chunk_split(base64_encode($attachment));
    			// Fin lecture fichier pdf
     
    			fputs ($fp, "MAIL FROM:<xyz@mondomaine.com>\n");
    			fputs ($fp, "RCPT TO:<$mail>\n");
    			fputs ($fp, "DATA\n");
     
    			$boundary = "=" . md5(uniqid(rand()));
     
    			fputs ($fp, "Subject: TEST\nFrom: blablabla<xyz@blablabla.com>\nTo: $contact <$mail>\nContent-Type: multipart/mixed; boundary=\"$boundary\"\nMIME-Version: 1.0\n\n");
     
    			fputs($fp, "--$boundary\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nMessage test\n\n");
     
    			fputs ($fp, "--$boundary\nContent-Disposition: attachment; filename=fichier.pdf\nContent-Type: application/pdf; name=fichier.pdf\nContent-Transfer-Encoding: base64\n\n$attachment\n\n");
     
    			fputs ($fp, "--$boundary--\n.\n");
    		}
    		fclose ($fp);
    Lorsque j'utilise le code tel qu'il est là, je ne reçois aucune erreur de php mais le message n'arrive jamais... ou n'est-il du moins jamais parti.

    Si je rajoute la ligne suivante avant de clore $fp
    Je reçois les infos de mon SMTP mais la transaction n'a pas lieu jusqu'au bout, j'ai juste un 250 OK jusqu'à RCPT TO alors que j'attends un "Message queud as". Mais dans ce cas le message part bien et est reçu même si le pdf est corrompu.

    J'ai essayé pas mal de choses pour 100% de réussite sans le fread (pas propre sur une page à présenter) mais sans succès!

    Si quelqu'un a une idée!

    Merci!!

  2. #2
    Membre régulier Avatar de B.Moncef
    Étudiant
    Inscrit en
    Août 2007
    Messages
    75
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 75
    Points : 88
    Points
    88
    Par défaut
    Je ne saurais pas résoudre ton problème mais l'url dans cette ligne me parait erronée >
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fileHeaders = get_headers("https://https://domaine/fichier.pdf", 1);
    Pas de question techniques par MP

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oups j'ai fait du copier-coller pour le code mais dans la réalité cette erreur n'est pas présente. Merci!

    Petite info supplémentaire :

    Avec pdf moins de 8Ko -> pdf non corrompu

    Avec pdf +/- 17Ko ->corrompu car la taille du pdf reçu est de 8 Ko tout rond...

    Peut-être une limitation? Mais où? php.ini?

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est vraiment la taille du fichier qui pose problème, tout pdf de plus de 8Ko se retrouve dans le mail avec une taille de 8Ko et pas un octet de plus... là je sèche!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Voici la soluce!

    La limitation vient de fread qui arrête de lire le fichier dès que sa taille atteint 8192 octets donc 8Ko! Pour palier à cette limitation je vais implanter une boucle qui va lire le fichier en plusieurs fois et le tour sera joué!

    Voilà je pense que ça pourrait intéresser certains.

    @++

    webrider

  6. #6
    Invité
    Invité(e)
    Par défaut
    Testé 100% fonctionnel :

    A la place de fread mettre ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (!feof($ff)) {
    	$attachment .= fread($ff, 8192);
    }
    Et ça marchera pour toutes les tailles!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/11/2013, 16h15
  2. [MySQL] envoi mail vide sur gmail
    Par paidge dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/02/2012, 14h23
  3. envoie mail avec Net::SMTP + importance faible
    Par ouinih dans le forum Modules
    Réponses: 0
    Dernier message: 30/06/2008, 17h02
  4. Réponses: 1
    Dernier message: 18/02/2008, 20h10
  5. [Javamail] Envoi mail avec plusieurs smtp
    Par igloof dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 02/11/2006, 12h08

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