Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Mon fournisseur d'accès est FREE. Je me sers du module "contact" pour que les visiteurs de mon site puisse m'envoyer un formulaire.
Toutes les zones sont remplies. Le capcha fonctionne. J'appuie sur le bouton "envoyer", quelques instant après l'avertissement du formulaire envoyé apparait.
Malheureusement je ne reçois rien.
Que puis-je faire ?
Merci de votre aide
Hors ligne
Bonjour Bernard,
La fonction mail() de Free n'est pas conforme au standard php.
De temps en temps les courriels ne sont pas envoyés, mais pourtant leur fonction mail() renvoie True (et le courriel sera définitivement perdu ...)
Au fil des années, il y a eu de multiples échanges sur les groupes de discussions de Free en pure perte
Ce problème n'est pas spécifique à Ziteplus, mais touche tous les scripts PHP des freenautes utilisant la fonction mail().
Il existe une solution empirique permettant de contourner le problème.
Il faut remplacer l'appel à la fonction mail() par la fonction mailFree() suivante à insérer dans ton code:
function mailFree($to , $subject , $message , $additional_headers=null , $additional_parameters=null) {
$start_time = time();
$resultat=mail ( $to , $subject, $message, $additional_headers, $additional_parameters);
$time= time()-$start_time;
return $resultat & ($time>1);
}
La modification est à faire dans le module contact à la ligne 108 (en fonction des versions du module)
et de remplacer la ligne
if (mail($cible, $objet, $message, $headers)) {
par
if (mailFree($cible, $objet, $message, $headers)) {
a+
Jean-Paul
Hors ligne
Bonjour Jean Paul,
Mon problème est toujours là !
Je n'y connais rien en PHP ! par le FTP j'ai récupéré le fichier "contact.php", rapatrié sur mon ordinateur, modifié sur le BlocNotes et remis dans le dossier par le FTP.
J'ai fait un copier coller de la function et modifier la ligne citée dans ta réponset. et j'ai remis le tout en place.
J'ai très certainement du faire une bêtise mais laquelle ?
Je joints ci-dessous le fichier "contact.php".
Si cela peut être utile je suis prêt à fournir mes codes d'accès du site et de chez FREE
Cordialement
<?php
/*
module: Contact - Gestion d'un formulaire de contact
Copyright Hubert ARNOUX 2011
Site : http://www.atod.fr/ziteplus/
Licence : CeCILL-B, http://www.cecill.info
Historique:
Version et Date version Zite+ mini Description
=============== ================== ===========
1.0 du 01/02/11 0.9.1.b1 (Atod) Création du module
1.1 du 17/04/11 0.9.2.a1 (JPG) Ajout captcha de ziteplus + diverses corrections, simplifications et modifications
1.2 du 26/11/11 0.9.2.a7 (JPG) Petite correction bug
1.3 du 14/04/13 0.9.2 (JPG) compatibilité php 5.4
1.4 du 11/03/17 0.9.5 (JPG) compatibilité php 7.0 + ajout langues IT, DE et EN
Le module principal se trouve dans le fichier zplus/module/contact.php
Les données ini sont dans zplus/module/contact.ini
les données paramètres dans zplus/module/config/contact.opt
Il permet de créer un formulaire de contact :
- vérification de la syntaxe d'email
- possibilité d'envoyer une copie de l'email à l'expéditeur
- configurez vos messages d'échec et de réussite d'envoi
- configurez une action du formulaire ???????????? => voir ce que devient le traitement de base du formulaire ??????????????????????????????????????????
- possibilité d'afficher le champ "nom" ou non
- possibilité d'afficher le champ "prénom" ou non
- possibilité d'afficher le champ "objet" ou non
- possibilité d'afficher le champ "civilité" ou non
- possibilité d'ajouter une signature à vos message pour savoir si le message provient de votre site <=================== voir user_auto <<<<<<<<<<<<<<<<<<<<<
- conserver les données saisies dans le formulaire en cas d'echec
- Captcha dans le formulaire de contact
PROJET :
- possibilité d'ajouter un champ "piece jointe" ou non : En projet
*/
//==============================================================================
class Tcontact extends Tmodule {
function dojob($opt="") {
parent::dojob();
$out='';
self::$cms->content['dftcss'].= ' label {
width:150px;
float:left;
} ';
require_once(self::$cms->zpath.'/outils.php');
// Fonction pour remplacer la fonction de Mail par la Function MailFree
function mailFree($to , $subject , $message , $additional_headers=null , $additional_parameters=null) {
$start_time = time();
$resultat=mail ( $to , $subject, $message, $additional_headers, $additional_parameters);
$time= time()-$start_time;
return $resultat & ($time>1);
}
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($postname) {
$text ='';
if (isset($_POST[$postname])) { // si formulaire envoyé, on récupère le champ. Sinon, on initialise la variable
$text = no_mq_gpc($_POST[$postname]);
$text = htmlspecialchars($text, ENT_QUOTES,''); // converts to string with " and ' as well
$text = nl2br($text);
}
return $text;
};
/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function verification_email($email) {
$pattern = "/^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$/i";
return (@preg_match($pattern,$email)) ? true : false;
};
$err_formulaire =false;
$err_email = $err_message= $err_messagesent = false;
// Etablir valeurs des champs
$nom = strtoupper(Rec('nom')); //"NOM" en majuscule
$prenom = ucwords(strtolower(Rec('prenom'))); //"Prénom" avec une majuscule puis en minuscules
$civilite = Rec('civilite');
$email = Rec('email');
$objet = Rec('objet');
$message = Rec('message');
$signature = 'Message envoyé par '.$prenom.' '.$nom.' via mon formulaire de contact '; // à voir ============> dans les options de config
if (isset($_POST['envoi'])) {
// On va vérifier les variables et l'email ...
$err_email = !verification_email($email);
$err_message = empty($message);
$err_formulaire |= $err_email | $err_message;
$err_captcha = false;
if (!$err_formulaire) {
self::$cms->doevent(eCaptcha,eAfter,$err_captcha);
$err_formulaire |= $err_captcha;
}
// Pas d'erreur => envoyer le message
if ($err_formulaire==false) {
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$civilite.' '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n"; /// Logiquement, une génération par défaut est faite + ATTENTION: faire: noreply@hhhhh pour la copie utilisateur
$cible = $this->getOption('destinataire');
// envoyer une copie au visiteur ?
if ($this->getOption('copie')) {
$cible .= ','.$email;
};
//=> à voir
// Remplacement de certains caractères spéciaux
$message = html_entity_decode($message);
$message = str_replace(''',"'",$message);
$message = str_replace('’',"'",$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = wordwrap($message, 70); // Dans le cas où nos lignes comportent plus de 70 caractères, nous les coupons en utilisant wordwrap()
if ($this->getOption('signature')){ //Dans le cas ou il faut insérer une signature
$message .= '
'.$signature;
$message .= $this->getOption('endsignature');
}
// Envoi du mail
if (mailFree($cible, $objet, $message, $headers)) {
//if (mail($cible, $objet, $message, $headers)) {
return '<p>'.$this->getOption('messagesent').'</p>'."\n";
} else {//Il y a un probleme
$err_formulaire = $err_messagesent = true;
};
}
}; // fin du if (!isset($_POST['envoi']))
if (($err_formulaire) || (!isset($_POST['envoi']))) {
if ($err_formulaire) {
if ($err_email) self::$cms->msgShow($this->get_message('err_email'),false);
if ($err_message) self::$cms->msgShow($this->get_message('err_message'),false);
if ($err_messagesent) self::$cms->msgShow($this->get_message('err_messagesent'),false);
}
// afficher le formulaire
$out .= '<form id="contact" method="post" action="'.($this->getOption('form_action')?$this->getOption('form_action'):'')."\">\n";
$out .= ' <fieldset><legend>'.$this->get_message('coordonnees').'</legend>'."\n";
if ($this->getOption('showname')){ /*On affiche le champ nom*/
$out .= ' <p>'."\n";
$out .= ' <label for="nom">'.$this->get_message('nom').'</label>'."\n";
$out .= ' <input type="text" id="nom" name="nom" value="'.$nom.'" tabindex="1" />'."\n";
$out .= ' </p>'."\n";
}
if ($this->getOption('showfirstname')){ /*On affiche le champ prenom*/
$out .= ' <p>'."\n";
$out .= ' <label for="prenom">'.$this->get_message('prenom').'</label>'."\n";
$out .= ' <input type="text" id="prenom" name="prenom" value="'.$prenom.'" tabindex="2" />'."\n";
$out .= ' </p>'."\n";
}
if ($this->getOption('civility')){ /*On affiche le champ civilité*/
$out .= ' <p>'."\n";
$out .= ' <label for="civilite">'.$this->get_message('civilite').'</label>'."\n";
$out .= ' <input type="radio" id="civilite" name="civilite" value="'.stripslashes($this->get_message('monsieur')).'" '.($civilite==$this->get_message('monsieur')?'checked':'').' tabindex="3" /> '.$this->get_message('monsieur')."\n";
$out .= ' <input type="radio" id="civilite" name="civilite" value="'.stripslashes($this->get_message('madame')).'" '.($civilite==$this->get_message('madame')?'checked':'').' tabindex="3" /> '.$this->get_message('madame')."\n";
$out .= ' </p>'."\n";
}
$out .= ' <p>'."\n";
$out .= ' <label for="email">'.$this->get_message('email').'</label>'."\n";
$out .= ' <input type="text" id="email" name="email" value="'.$email.'" tabindex="4" />'."\n";
$out .= ' </p>'."\n";
$out .= ' </fieldset>'."\n";
$out .= ' <fieldset><legend>' . $this->get_message('message') . '</legend>'."\n";
if ($this->getOption('showobject')){ /*On affiche le champ objet*/
$out .= ' <p>'."\n";
$out .= ' <label for="objet">'.$this->get_message('objet').'</label>'."\n";
$out .= ' <input type="text" id="objet" name="objet" value="'.$objet.'" tabindex="5" />'."\n";
$out .= ' </p>'."\n";
}
$out .= ' <p id="contact_pmessage">'."\n";
$out .= ' <label for="message" style="vertical-align:top" >'.$this->get_message('corps').'</label>'."\n";
$out .= ' <textarea id="message" name="message" tabindex="6"'.($this->getOption('width')>0?' cols="'.$this->getOption('width'):'').'" rows="'.$this->getOption('length').'">'.$message.'</textarea>'."\n";
$out .= ' </p>'."\n";
$out .= ' </fieldset>'."\n";
self::$cms->doevent(eCaptcha,eBefore,$out,true);
$out .= ' <div style="text-align:center;"><input type="submit" name="envoi" value="'.$this->get_message('envoyer').'" /></div>'."\n";
$out .= '</form>'."\n";
};
return $out;
}
}
?>
Hors ligne
Normalement, avec cette modif tu devrais avoir deux cas:
- le courriel part normalement et tu as le message comme quoi le courrier est bien parti
- le courrier ne part part et tu restes sur le formulaire avec affichage d'un message d'avertissement.
Avec cette version modifiée, tu as lequel des deux cas ?
Bonjour Jean Paul,
Mon problème est toujours là !
Je n'y connais rien en PHP ! par le FTP j'ai récupéré le fichier "contact.php", rapatrié sur mon ordinateur, modifié sur le BlocNotes et remis dans le dossier par le FTP.
J'ai fait un copier coller de la function et modifier la ligne citée dans ta réponset. et j'ai remis le tout en place.
J'ai très certainement du faire une bêtise mais laquelle ?
Je joints ci-dessous le fichier "contact.php".
Si cela peut être utile je suis prêt à fournir mes codes d'accès du site et de chez FREE
Cordialement
Hors ligne
Je suis dans le premier cas.
Le courrier part normalement après quelques instants (2 secondes environ) après avoir cliquer sur Envoyer. Le formulaire s'efface et apparait le message disant que mon formulaire est parti.
Sauf qu'il n'arrive jamais.
J'ai plusieurs adresses "courriel" J'ai changé celles-ci dans le module "contact" On ne sait pas si FREE fait la gueule à Gmail, ou à Laposte mais ça ne fonctionne pas non plus avec mon adresse Free.
J'ai fait la même chose pour remplir le formulaire
Mais toujours pas de réception.
J'ai aussi modifié le fichier .Hatccess car il parait que Free à changer de version PHP. J'ai remplacé PHP 1 par Php56 1 comme dit sur certains sites.
Dernière modification par bernard (01/02/2019 19:13:38)
Hors ligne
Free a peut-être encore changé quelque chose sur ses serveurs mail (mais sans mettre une configuration correcte malheureusement)
Tu as le délai d'environ deux secondes, cela veut dire que tu as correctement intégré le code.
Le délai de deux secondes ayant été déterminé expérimentalement, peut-être en augmentant un peu la valeur d'attente.
Pour cela, remplacer dans la fonction MailFree() la ligne
return $resultat & ($time>1);
par
return $resultat & ($time>2);
a+
Jean-Paul
Hors ligne
Me revoilà,
Tentative infructueuse ! L>a modification de return $resultat & ($time>1); avec la valeur 2 me met le message d'erreur "envoi du mail échoué" et me garde mon formulaire ouvert comme expliqué sur ton avant dernier message.
J'ai fait plusieurs tentatives en tant qu'administrateur (connecté sans captcha) et en tant que visiteur non inscrit (avec captcha)
à chaque fois échec avec la formule return $resultat & ($time>2); et mon message de non distribution
à chaque fois avec laformule return $resultat & ($time>1); message envoyé avec ou sans connection mais no arrivé.
J'ai oublié de te dire que je suis avec la version de Ziteplus estampillée 0.9.6 (Cela pourrait-il venir de là ????
J'en perd mon latin (qui est bien pauvre)
Hors ligne
J'ai oublié de te dire que je suis avec la version de Ziteplus estampillée 0.9.6 (Cela pourrait-il venir de là ????
Non, même si j'aurais préféré: le problème serait déjà résolu
Peu d'espoir de solution: ce problème touche tous les CMS chez Free (wordpress, joomla etc) et la seule solution connue était MailFree().
Depuis quelques temps de nombreux clients Free sont aussi touchés et se plaignent sur les groupes de discussions de pertes de mails.
Pour contourner le problème, deux solutions:
- intégrer un formulaire externe à Free avec un iFrame et/ou par javascript.
Par exemple pour : JotForm le code à insérer dans la page ressemblera à <script type="text/javascript" src="https://form.jotform.co/jsform/7xxxxxxxx8"></script>)
- changer d'hébergeur: c'est un peu radical mais l'hebergement Free n'est plus ce qu'il était et des problèmes simples deviennent insoluble
un petit exemple des possibilités: https://www.hebergementweb.org/hosting/gratuit/view
a+
Jean-Paul
Hors ligne
Bonsoir Jean Paul,
Merci de ton aide. Je vais essayer de me tourner vers un javascript. Quand j'avais mes sites en Html (avant Ziteplus) je me servais beaucoup de ces codes.
Je te tiendrais au courant
Encore merci pour ton aide et ton dévouement.
Bien à toi
Bernard
Hors ligne
Pages : 1