mail qui ne part jamais

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : mail qui ne part jamais

par Boro64 » 19 mai 2008, 09:20

Bonjour
J'ai fini par voir (et comprendre! :? ) pourquoi j'avais ce message concernant file_get_contents. A celles et ceux qui seraient interessé-e-s voici pourquoi:
Dans la ligne chunk_split il faut écrire le chemin du fichier ainsi:
$msg .=chunk_split(base64_encode(file_get_contents("http://www.lejolisite.fr/le chemin complet jusqu'à votre fichier.pdf")))."\n";
Bien, je mets 'Résolu', car mon mail arrive enfin. Il n'est pas complet car il manque le texte( :?: ) et le fichier joint( :?: ).
Mais ça, ce devrait être l'objet d'un autre post.... :lol: :? :?:
Le plus drôle, c'est qu'à l'arrivée mon courrielleur (Thunderbird) m'annonce bien un message AVEC une pièce jointe, et lorsque je clique sur le message pour le lire...la pièce disparait!!! |*()
Il doit y avoir une bête solution que je vais m'efforcer de trouver.
Si vous avez une idée, n'hésitez pas à me le faire savoir.
En attendant, merci à toutes et tous pour votre aide.

par FredoMkb » 19 mai 2008, 00:28

Bonsoir :)

Petit souci d'apostrophe sur ce code, mais il doit certainement venir du copier/coller :
$msg_txt = 'Bonjour."\n\n"; 
Qui devrait normalement être :
$msg_txt = 'Bonjour'."\n\n"; 
D'ailleurs, petite astuce pour éviter de saisir à chaque fois les retours à la ligne "\n", c'est de le mettre dans un "array", un peu comme-ça :
$ret = array("", "\n", "\n\n", "\n\n\n", "\n\n\n\n"); // a placer au debut du script
$msg_txt = 'Bonjour'.$ret[2]; // le numero correspond au nombre de retours a utiliser
à+ :)

par Boro64 » 18 mai 2008, 23:01

Bonsoir
Alors, j'ai bien relu (parce que je le connaissais déjà... :oops: ) le tuto proposé par dunbar, et...c'est moins pire! :D
J'explique (et je montre!): J'obtiens maintenant ce message:
Warning: Division by zero in /home.10.16/lejolisite/www/charge/mail-auto3.php on line 78

Warning: file_get_contents(0pdf) [function.file-get-contents]: failed to open stream: No such file or directory in /home.10.16/lejolisite/www/charge/mail-auto3.php on line 78
Le mail a été envoyé
Ok, je comprends bien que la fonction file_get_contents a échoué, mais:
1) je ne comprends pas vraiment pourquoi...Oui, je sais...le boulet!
2) le mail part bien (haaaaaaaaa...enfin!), mais sans le fichier pdf et sans le texte du mail non plus, car je reçois ceci:
From: "Nom"<[email protected]>
Return-Path:<[email protected]>/nMIME-Version:1.0
Content-Type:multipart/mixed; boundary= "-----=1e27faa846b32e39b92c0d7a03808868"
Et c'est tout....! :cry:
Ah, j'oubliais, le code revu (merci encore à dunbar):
<?php
session_start();
//------------------------------------------
//déclaration des variables
//------------------------------------------
$dest = $_SESSION['email'];
$exp = "[email protected]";
$reply = "[email protected]";
$nom_exp = "XXXXXX";
$msg_txt = 'Bonjour."\n\n";
$msg_txt .='Merci d\'avoir commandé \"YYYYY\", au format pdf."\n"
Nous vous en souhaitons une bonne réception, et surtout une bonne lecture."\n"
Nous vous rappelons qu\'un espace de discussion à son sujet est ouvert dans le forum du site de 
XXXXX, et que vos commentaires y sont attendus."\n\n"
Cependant, si vous rencontriez quelque problème que ce soit, n\'hésitez pas à nous le signaler."\n"
A bientôt."\n\n"
XXXXX';
$msg_html = '<html>
<head>
<title>YYYYYY, format pdf</title>
</head>
<body><b>Bonjour.</b>
<br />
<br />
Merci d\'avoir commandé \"YYYYYYYYY", au format pdf.
<br />
Nous vous en souhaitons une bonne réception, et surtout une bonne lecture.
<b />
Nous vous rappelons qu\'un espace de discussion à son sujet est ouvert dans le forum du site de 
XXXXXXX, et que vos commentaires y sont attendus.
<b />
Cependant, si vous rencontriez quelque problème que ce soit, n\'hésitez pas à nous le signaler.
<br />
<br />
A bientôt.
<br />
<br />
XXXXXXXXXX
</body>
</html>';
//------------------------------------------
//création de la frontière
//------------------------------------------
$frontiere = '-----='.md5(uniqid(mt_rand()));
//en têtes
$head = 'From: "Nom"<'.$exp.'>'."\n";
$head .='Return-Path:<'.$reply.'>'."/n";
$head .= 'MIME-Version:1.0'."\n";
$head .= 'Content-Type:multipart/mixed; boundary= "'.$frontiere.'"';

//--------------------------------------------
//Message texte
//--------------------------------------------
$msg = 'This is a multi-part message in MIME format.'."\n\n";
$msg .= '--'.$frontiere.'--'."\n";
$msg .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
$msg .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$msg .= $msg_txt."\n\n";

//---------------------------------------------
//Message Html
//---------------------------------------------
$msg .= '--'.$frontiere.'--'."\n";
$msg .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$msg .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$msg .= $msg_html."\n\n";

$msg .= '--'.$frontiere.'--'."\n";

//----------------------------------------------
//PIECE JOINTE!
//--------------------------------------------

$msg .='Content-Type: application/pdf; name= "complets/YYYYYYY.pdf"'."\n";
$msg .='Content-Transfer-Encoding: base64'."\n";
$msg .= 'Content-Disposition: attachement; filename ="complets/YYYYYYYYY.pdf"'."\n\n";

$msg .=chunk_split(base64_encode(file_get_contents(complets/YYYYYYYYYYYYY.pdf)))."\n";

if (mail($dest,$msg,$head))
{
  echo'Le mail a été envoyé';
}
else
{
  echo 'Le mail n\a pu être envoyé; contactez le webmaster!';
}
?>
Voilà. Désolé de vous déranger encore avec ça, mais si vous aviez une piste, je suis toujours preneur.
Quoi qu'il en soit, merci encore pour votre aide et vos conseils

par dunbar » 16 mai 2008, 23:22

Ok revient quand ton projet sera plus claire :wink:
Bonne chance

par Boro64 » 16 mai 2008, 23:15

Oui, tu as raison, car là je suis perdu dans mes modifs et nos réponses qui se croisent
Encore merci et à plus tard peut être

par dunbar » 16 mai 2008, 23:14

Non cela ne devrais pas intervenir, mais je pense que tu devrais refaire ton formulaire a ton aise et regarder le tuto que je t'ai donner ou un autre . :wink:

par Boro64 » 16 mai 2008, 23:11

Non, non :lol: Je disais avoir copier TON test avec ton session_start(); ce qui en faisait 2 (le mien en tête de page et avec son <?php ?> et le tien dans le test suggéré..:oops: ); mais je l'ai corrigé depuis...
Quoi qu'il en soit je me demande toujours si les différences énoncées plus haut (texte/multipart et sans/avec fichier joint) ne sont pas responsable de ce dysfonctionnement... :?
Qu'en penses tu? C'est possible?
P.S: Je n'ai même pas pensé à te remercier pour tout ce que tu as déjà fait pour m'aider! Honte à moi :oops: Merci donc ! :D

par dunbar » 16 mai 2008, 23:05

Et dans ton mail-auto.php a tu un session_start() aussi ?????
Chaque fichier qui a besoins des variable de session doit commencer par un session_start()

par Boro64 » 16 mai 2008, 23:01

Non, non, je fais bien:
<?php session_start();?>
D'ailleurs, c'est ce que j'écrivais hier:
Hello.
Merci pour le . du 1er $msg! Par contre, mais c'est de ma faute je ne l'ai pas précisé dans mon post, j'ai bien une session_start(), que voici d'ailleurs:
PHP:
<?php
session_start();
if (!isset($_SESSION['identification']) || !isset($_SESSION['prenom']) || !isset($_SESSION['nom']) || !isset($_SESSION['email']) || !isset($_SESSION['adresse'])) {
header ('Location: ../index.php');
exit();
}
?>
...mais je le mets avec include et AVANT <entête xhtml>
Alors voilà toute la page:

Code : Tout sélectionner

<?php include ('../codes/session.php'); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Journaux Intimes, Le pdf!</title> <link href="../styles/styldo.css" rel="stylesheet" type="text/css" media="screen" /> <!--[if lte IE 6]> <link rel="stylesheet" type="text/css" href="../styles/chie.css" media="screen" /> <![endif]--> </head> <body> <div id="bkground"> <div id="global"> <div id="head"></div><!--fin header--> <div id="cont-page"> <div id="cont-txt-droit"> <p class="texte-page"> <?php echo ("Bonjour $prenom $nom"); ?> <br /> blablablablebleblibliblobloblublu Un second mail va vous parvenir avec votre fichier .pdf. <form method="post" action="mail-auto.php"> <input type="submit" name="mail" value="Cliquez ici pour recevoir votre commande..." /> </form> Nous vous remercions encore de votre commande, et vous souhaitons une agr&eacute;able lecture. <br /> <br /> <br /> <a href="deconnexion.php">Cliquez ici pour revenir &agrave; l'accueil du site de XXX.</a> </p> </div><!--fin texte droit--> <div id="cont-legal"></div><!--fin conteneur legal--> </div><!--fin conteneur general page--> </div><!--fin global--> </div><!--fin ombre--> </body> </html>

par dunbar » 16 mai 2008, 22:54

Pour moi, et c'est ainsi que j'architecture par exemple cette page, c'est:

Code : Tout sélectionner

session_start(); /<entête xhtml> /<body>/la structure de la page/</body>
et là, j'ai bêtement copié ton test AVEC un session_start :oops: ....(wouaouh 2 session_start(); !!!
De ton test et de mon code je dirais que le tien est en "Content-Type: texte" et le mien en "Content-Type: multipart"; le tien sans pièce jointe le mien avec. Le tien fonctionne...pas le mien :cry:
J'avais raison d'avoir peur :wink:
Il faudrait nous donner le code de toute ta page comme elle es et pas en morceau :P se sera plus simple
toi
session_start(); /<entête xhtml> /<body>/la structure de la page/</body
et normalement
<?php
session_start();
?>

/<entête xhtml> /<body>/la structure de la page/</body
Il faut séparer le code php du code html
je te conseil le tuto suivant

par Boro64 » 16 mai 2008, 22:50

Pour moi, et c'est ainsi que j'architecture par exemple cette page, c'est:

Code : Tout sélectionner

session_start(); /<entête xhtml> /<body>/la structure de la page/</body>
et là, j'ai bêtement copié ton test AVEC un session_start :oops: ....(wouaouh 2 session_start(); !!!
De ton test et de mon code je dirais que le tien est en "Content-Type: texte" et le mien en "Content-Type: multipart"; le tien sans pièce jointe le mien avec. Le tien fonctionne...pas le mien :cry:

par dunbar » 16 mai 2008, 22:35

Oui en effet le session_start() doit commencer avant tout autre code
mais cette réflection me fait peur :wink:
Pourquoi dit tu cela :?:

par Boro64 » 16 mai 2008, 22:29

:shock: :shock: :?: :?:
C'est ça! ça marche!!!!!!!!!!
Mais je ne comprends plus...J'ai toujours cru que session_start() devait commencer AVANT tout le reste; autre chose, je n'ai pas ajouté la pièce jointe (un pdf) à ton test. Je vais essayer de l'ajouter, mais pense tu déjà que cela aussi puisse générer un pb?
EDIT
Oui oui, la fonction mail() est bien active; je l'utilise déjà sur une autre page du site...

par dunbar » 16 mai 2008, 22:20

Bonsoir dunbar
Et merci, bien vu là aussi :wink: ...mais toujours:
Le mail n'a pu être envoyé; contactez le webmaster, svp.
|*()
C'est à ne plus rien y comprendre....
Je continues à chercher de mon côté, mais j'avoue m'y perdre.. #-o
Et tu me dis que chez toi ça fonctionne???
Je précise que je teste ça en ligne, et pas en local avec wamp.
Que pourrais je tester encore pour cerner le problème?
La fonction mail() est active sur ton serveur :?:
Si tu ne sait pas essaye de voir avec phpinfo

par dunbar » 16 mai 2008, 22:17

Un test essaye celui-ci
<?php
session_start();
$email_dest            = $_SESSION['email'];
$nom_expediteur        = 'dunbar';
$exp                   = 'lemail@lesite';

     $headers  ='From: '.$nom_expediteur.'<'.$exp.'>'."\n";          //----> Mail de l'expiditeur<-----//
     $headers .='Content-type: text/plain; charset=iso-8859-1'."\n";  //----> Type d'encodage du mail <----//
     $headers .='Content-Transfer-Encoding: 64bit'."\n";               //----> Niveau de crytage du mail <---//
     $headers .='X-MSMail-Priority: Normal'."\n";                     //----> Niveau de priorité du mail <---//
     $headers .='X-Originating-IP: [0.0.0.0]'."\n";                   //----> Adresse IP de l'expéditeur <---//

     $objet    = 'Objet du mail';
     $message  =  'Bonjour '.$_SESSION['nom']."\n\n".
     $message .=  'blablabla bliblibli blobloblob blublubli. '."\n\n".
                 '++++++++++++++++++++++++++++++++++++++++++++++++++++++'."\n".
                 'Cordialement '.$nom_expediteur."\n";


      if(mail($email_dest,$objet,$message,$headers))

	      {

          echo '<center><p> Envoi réussi</p>';

          }
     else
          {
          echo 'Le mail n\'a pu être envoyé';
          }
?>