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

Bibliothèques et frameworks PHP Discussion :

[Librairies] Envoyer mail avec fichier joint


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut [Librairies] Envoyer mail avec fichier joint
    Bonjour

    Je sais, la question a été posée 100 fois mais je ne trouve toujours pas mon bonheur dans cette jungle, après moult recherches.

    Si j'ai bien compris, d'une part il y a la fonction mail() intégrée à PHP, que l'on peut utiliser, ou alors utiliser une bibliotheque externe, qui a son propre moteur d'envoie (ou surcharge de mail() de php?).

    Quoi qu'il en soit, je ne sais pas quel est le moyen le plus fiable et le plus simple pour envoyer une mail avec pièce jointe conséquente 4 ou 5 Mo. (et gratuit)

    Si vous avez un conseil quant à la bib rassemblant au mieux ces qualités, je suis preneur !

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Si mes souvenirs sont bons, PHPmailer le fait très bien.

    http://phpmailer.sourceforge.net/

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147

  5. #5
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Merci pour vos réponses !

    je les avais déjà tous téléchargé, je les ai donc essayé après avoir été conforté par vos réponses.

    Et TOUS me renvoient le même message à l'execution:

    Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 6267125 bytes)
    or mon fichier (pdf) en pièce jointe fait exactement ceci comme taille:
    4 639 297 octets soit 4.42 Mo

    Donc, ca devrait passer logiquement...

    je ne comprends d'ailleurs pas très bien le message, que je lis: '16Mo autorisé, j'ai essayé d'en allouer 6Mo'. ... alors que mon fichier fait 4.42 Mo (je concois qu'il alloue un peu plus mais quand même!...)

    Bref je suis un peu dépité là.
    Ou alors, se peut-il que mon hébergeur limite la taille des pièces jointe en deçà des 5 Mo ??
    Dans ce cas, se tourner vers une autre passerelle SMTP peut être une solution ? (j'ai vu qu'avec phpmailer c'était assez simple de le faire).



    Je sais pas ce que vous en pensez...
    Merci en tout cas de vos réponse

  6. #6
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    Il est dit : Tu as 16Mo mais tu l'a dépasser en essayant de prendre 6Mo. Donc ton script consommaine deja plus 10Mo (tu as d'autre traitement avant ?).
    Cela ne vient donc pas de l'hebergeur ou koi que ce soit !

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par TicTacToe
    je ne comprends d'ailleurs pas très bien le message, que je lis: '16Mo autorisé, j'ai essayé d'en allouer 6Mo'. ...
    A Mon Humble Avis :
    • tu es à 13Mo, tu demandes 6Mo => 19Mo>16Mo => error

    ou
    • tu es à 13Mo, tu demandes 9Mo => 16Mo+6Mo => error


    Citation Envoyé par TicTacToe
    Je sais pas ce que vous en pensez...
    J'en pense que tu devrais augmenter la taille mémoire alloué à ton script, ou ne pas envoyer de gros fichier par mail.

    En fait si tu regardes le source d'un mail avec un fichier attaché, tu verras que ce fichier est en base64. Ca doit etre le processus d'inclusion du fichier dans le mail (lecture d'un fichier => passage en base64, chunk, ...) qui fait explosé le script.

  8. #8
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    nope !

    rien que le strict nécessaire
    le sujet, le body, ne font que quelques caractères...

    Le message d'erreur est identique quelquesoit les mailers cités ci-dessus.

    et prendre 22Mo pour envoyer 4.4 Mo, je trouve ca un peu fort...

    je donne un exemple, le dernier avec phpmailer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $mail = new PHPMailer;
     
    $mail->AddAddress("xxx@yahoo.fr", "xx");
    $mail->Subject = "Here is the subject phpmailer avec PJ";
    $mail->Body    = "This is the message body phpmailer";
    $mail->AddAttachment("ww01fr.pdf", "ww01fr.pdf");  
     
    if(!$mail->Send())
    {
       echo "There was an error sending the message";
       exit;
    }
     
    echo "Message was sent successfully";
    Les chemins sont bien sur corrects, et cela marche pour un fichier de quelques Ko. (j'ai pas essayé tous les intermédiaires pour voir ou se situais la limite).

    je vais tenter en changeant le smtp selon l'exemple phpmailer...

  9. #9
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Je viens de voir ton Post Mr.N

    Je comprends bien que je dépasse et que je ne suis pas maitre de ce dépassement.

    Quant à ne pas envoyer de gros fichiers tu as parfaitement raison. Mais il se trouve que c'est vraiment la meilleure solution pour ce que je souhaite faire.
    Mais je vais peut être trouver un solution meilleure techniquement mais moins bonne pour ma stratégie si ca continue...

    mais bon... 4.4 Mo c'est pas le bout de monde maintenant, les transferts de mails laissent passer souvent plus (en dessous de 5Mo en tout ca).

    C'est pas cool

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Les concaténations de chaines sont assez gourmandes. Une autre solution que tu pourrais envisager, c'est d'envoyer toi même ce fichier, sans passer par une classe. Tu peux toujours essayer, ça coute presque rien...

    Sinon est-ce que ce bout de script consomme plus de 16Mo ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $v = chunk_split(base64_encode(file_get_contents("ww01fr.pdf")));
    ?>

  11. #11
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Heu, j'ai oublié de préciser, le php c'est pas mon langage naturel

    Les concaténations de chaines sont assez gourmandes. Une autre solution que tu pourrais envisager, c'est d'envoyer toi même ce fichier, sans passer par une classe. Tu peux toujours essayer, ça coute presque rien...
    Je veux bien 'envoyer moi même', mais c'est flou pour moi

    Je veux bien essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <?php
    $v = chunk_split(base64_encode(file_get_contents("ww01fr.pdf")));
    ?>
    mais, comment fait-on pour afficher la mémoire alloué par $v ?

    Merci pour l'aide !

    PS: j'ai essayé en passant par un autre smtp .. pareil, ca confirme donc tes dires Mr N, c'est le traitement avant envoie...

    :EDIT:
    En attend, j'ai essayé ce code, pour voir si la mémoire "sautait", elle ne saut visiblement pas (le code derriere est correctement executé et pas de message d'erreur).

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par TicTacToe
    En attend, j'ai essayé ce code, pour voir si la mémoire "sautait", elle ne saut visiblement pas (le code derriere est correctement executé et pas de message d'erreur).
    Cool !
    Est-ce que tu as besoin de la plupart des fonctionnalités des classes qu'on t'a proposées ? (différents encoding, gestions des adresses mails, envoi html, ...) ? Juste l'envoi de fichier attaché t'intéresse ?

  13. #13
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    content que tu sois content, ca me redonne espoir !

    non, j'ai uniquement besoin d'envoyer une pièce jointe.
    Le Html serait un plus, mais je peux m'en passer.

    ps:
    J'ai regardé l'environnement de mon serveur php (phpinfo() et visiblement c'est bien la config "memory_limit = 16M" qui délimite la mém max utilisée dans une session. et comme je le controle pas...

    je suis donc impatient de voir ta soluce !
    Merci encore

  14. #14
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par TicTacToe
    je suis donc impatient de voir ta soluce !
    Faut pas rever, je ne suis pas capable de sortir une soluce toute prête de mon chapeau comme ça ! Au mieux je peux te donner des pistes...

    Pour l'instant est-ce que tu peux envoyer un mail simple avec la fonction mail (exemple dans la doc http://php.net/mail)
    Si oui, dans le body, est-ce que tu peut mettre le contenu de $v ?

  15. #15
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    ah désolé, je croyais que tu avais un bout de code derriere la tête ! (je suis bien conscient, je demande pas qu'on programme à ma place ! )


    sinon, je teste de suite le code.

  16. #16
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Bon, bravo Mr N, c'est bien passé

    Le hic, c'est que le fichier n'est pas en fichier joint, mais visible en binaire dans le corps du message.
    D'ailleurs, je vois la taille du mail = 12Mo

    Je sens que je vais me rabattre sur une autre solution et ca m'enchante pas du tout. (l'avantage d'envoyer le fichier c'était que l'adresse du fichier est inconnue et plus difficilement copiable du fait de son poids justement).

    Je fonctionne actuellement en lien dans le mail sur le fichier, (avec pass sur le zip), mais c'est plus simple à passer au copain -> lien+pass et c'est fini.

    C'est un fichier payant, c'est pour ca que je trouvais cette solution un peu meilleure pour éviter (un peu) le copiage.


    Merci pour tout en tout cas !

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Alors maintenant essaie ceci. Je n'ai rien pour tester donc à prendre avec des pincettes :
    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
    <?php
    $type = 'application/pdf';
    $name = "ww01fr.pdf";
    $f_contents = chunk_split(base64_encode(file_get_contents($name)));
     
    # To 
    $to = "toto@domain.tld";
     
    # From
    $from = "titi@domain.tld";
     
    # Subject
    $subject = "Email avec un PDF ".date("Y/m/d H:i:s");
     
    # Headers
    $mime_boundary = md5(time()); 
    $headers = 'From: '. $from ."\r\n";
    $headers .= 'MIME-Version: 1.0'.$eol;
    $headers .= 'Content-Type: multipart/mixed; boundary="'. $mime_boundary .'"\r\n';
     
    # Body
    $body = '';
     
    $body .= "--".$mime_boundary. "\r\n";
    $body .= "Content-Type: text/plain; charset=iso-8859-1". "\r\n";
    $body .= "Content-Transfer-Encoding: 8bit". "\r\n". "\r\n";
    $body .= "Voir fichier joint.". "\r\n". "\r\n";
     
    $body .= "--".$mime_boundary. "\r\n";
    $body .= "Content-Type: ". $type .'; name="'. $name .'"'. "\r\n";
    $body .= "Content-Transfer-Encoding: base64". "\r\n";
    $body .= 'Content-Disposition: attachment; filename="'. $name .'"'. "\r\n". "\r\n";
    $body .= $f_contents. "\r\n". "\r\n";
     
    $body .= "--". $mime_boundary ."--\r\n". "\r\n";
     
    mail($to, $subject, $body, $headers, '-f'.$from); 
     
    ?>

  18. #18
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut


    On retombe sur le dépassement de mémoire précisément ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $body .= $f_contents. "\r\n". "\r\n";
    merci encore de ta patience, je pense que tu as assez bossé pour moi !

    Je vais m'orienter vers une page de download à dispo, selon un code
    (je reviendrai surement pour poser des questions à ce sujet )

  19. #19
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Arfff. C'est bien ce que je pensais... La concaténation de chaine ne passe pas.
    peut-être pourrais-tu encore essayer ceci, pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $body = sprintf($body . "%s\r\n\r\n", $f_contents);
    (à la place de la ligne que tu viens de citer)


  20. #20
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    argh, pas mieux, même pire, au même endroit.

    avant l'erreur était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error:  Allowed memory size of 16777216 bytes exhausted (tried to allocate 6348521 bytes)
    maintenant c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error:  Allowed memory size of 16777216 bytes exhausted (tried to allocate 7863840 bytes)
    On (enfin 'tu') auras essayé !

Discussions similaires

  1. envoyer un mail avec fichier joint généré par fpdf
    Par abdelkarim_1987 dans le forum Langage
    Réponses: 4
    Dernier message: 25/09/2013, 14h01
  2. [Mail] fonction mail avec fichier joint
    Par tiger63 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2007, 16h29
  3. Envoi Mail avec fichier joint compressé
    Par dav_e77 dans le forum Général VBA
    Réponses: 1
    Dernier message: 25/11/2006, 17h27
  4. envoi mail avec fichier joint
    Par dietrich dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 28/02/2006, 14h42
  5. [c#] Envoi d'un mail avec fichier joint
    Par macfred dans le forum ASP.NET
    Réponses: 8
    Dernier message: 05/12/2005, 11h15

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