Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks
Bibliothèques et frameworks Forum d'entraide sur les frameworks, templates, bibliothèques de code (PDFLib, eZPdf, JpGraph, Artichow, PEAR, etc). Avant de poster : FAQ bibliothèques, toutes les FAQ PHP et cours bibliothèques
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2006, 12h03   #1
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
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
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 12h08   #2
Membre actif
 
Inscription : mai 2005
Messages : 221
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : mai 2005
Messages : 221
Points : 159
Points : 159
Si mes souvenirs sont bons, PHPmailer le fait très bien.

http://phpmailer.sourceforge.net/
kalash_jako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 13h49   #3
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
+
http://www.phpguru.org/static/mime.mail.html
+
http://pear.php.net/package/Mail_Mime
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 14h41   #4
Membre habitué
 
Homme Nicolas BUI
Consultant CRM
Inscription : mai 2006
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Nicolas BUI
Âge : 35
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 : 145
Points : 145
Envoyer un message via Skype™ à nicolas.bui
+1 pour http://www.phpguru.org/static/mime.mail.html
__________________
Nicolas BUI
nicolas.bui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 15h06   #5
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
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:

Citation:
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
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 15h15   #6
Membre habitué
 
Homme Nicolas BUI
Consultant CRM
Inscription : mai 2006
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Nicolas BUI
Âge : 35
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 : 145
Points : 145
Envoyer un message via Skype™ à nicolas.bui
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 !
__________________
Nicolas BUI
nicolas.bui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 15h21   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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.
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 15h26   #8
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
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 :
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...
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 15h32   #9
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
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
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 15h42   #10
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 :
1
2
3
<?php
$v = chunk_split(base64_encode(file_get_contents("ww01fr.pdf")));
?>
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 15h57   #11
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
Heu, j'ai oublié de préciser, le php c'est pas mon langage naturel

Citation:
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 :
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).
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 16h17   #12
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 16h33   #13
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
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
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 16h50   #14
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 16h58   #15
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
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.
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 17h19   #16
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
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 !
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 17h31   #17
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Alors maintenant essaie ceci. Je n'ai rien pour tester donc à prendre avec des pincettes :
Code :
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); 
 
?>
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 17h45   #18
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910


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

Code :
$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 )
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 17h57   #19
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 :
$body = sprintf($body . "%s\r\n\r\n", $f_contents);
(à la place de la ligne que tu viens de citer)

Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 18h09   #20
Membre Expert
 
Avatar de TicTacToe
 
Inscription : septembre 2005
Messages : 1 921
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : septembre 2005
Messages : 1 921
Points : 1 910
Points : 1 910
argh, pas mieux, même pire, au même endroit.

avant l'erreur était:
Code :
Fatal error:  Allowed memory size of 16777216 bytes exhausted (tried to allocate 6348521 bytes)
maintenant c'est
Code :
Fatal error:  Allowed memory size of 16777216 bytes exhausted (tried to allocate 7863840 bytes)
On (enfin 'tu') auras essayé !
TicTacToe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h11.


 
 
 
 
Partenaires

Hébergement Web