Problème d'envoi de mail

Fermé
ng - 29 juin 2009 à 12:06
 mohamed - 29 juin 2012 à 19:21
Bonjour,
Je travaille sur un logiciel open source nommé agora project et j'ai un problème au niveau de l'envoi de courriel, en effet après avoir rempli tous les champs requis pour l'envoi de mails, j'obtiens le message suivant:"le courriel n'a pas pu être envoyé" et plus en haut de la page j'ai la mention suivante "
Notice: Undefined variable: header in C:\wamp\www\agora\fonctions\divers.inc.php on line 43",
en fait je n'arrive toujours pas à résoudre cette erreur de sorte que l'envoi de courriel soit effectué, voici le code correspondant à divers.inc.php:
<?php
//// INFOS SUR UN ESPACE
////
function info_espace($id_espace, $champ="*")
{
if($champ=="*") { return db_ligne("SELECT * FROM gt_espace WHERE id_espace='".$id_espace."' "); }
else { return db_valeur("SELECT ".$champ." FROM gt_espace WHERE id_espace='".$id_espace."' "); }
}


//// MODULES D'UN ESPACE
////
function modules_espace($id_espace)
{
$tab_modules = db_tableau("SELECT DISTINCT T1.*, T2.* FROM gt_module T1 LEFT JOIN gt_jointure_espace_module T2 ON T1.nom=T2.nom_module WHERE T2.id_espace='".$id_espace."' ORDER BY T2.classement asc");
// Agenda toujours affiché pour les utilisateurs de l'utilisateur
if($_SESSION["user"]["id_utilisateur"] > 0 and $_SESSION["user"]["agenda_desactive"]!="1" and array_multi_search($tab_modules,"nom","agenda")==false) $tab_modules["agenda"] = db_ligne("SELECT * FROM gt_module WHERE nom='agenda'");
return $tab_modules;
}


//// ENVOI DE MAIL(S)
////
function envoi_mail($destinataires, $objet_mail, $contenu_mail, $options="")
{
//// INITIALISATION
global $trad, $infos_trad;
if(empty($options["message_alert"])) $options["message_alert"] = "oui";
if(empty($options["envoi_fichiers"])) $options["envoi_fichiers"] = "non";
if(empty($options["header_footer"])) $options["header_footer"] = "oui";
$retour = "\n";
$frontiere = "-----=".md5(uniqid(mt_rand()));
$fichiers_joints = control_upload();
if(isset($_SESSION["user"]["nom"])) { $expediteur = auteur($_SESSION["user"])." <".$_SESSION["user"]["mail"].">"; }
else { $expediteur = " noreply <noreply@".str_replace("www.","",$_SERVER["SERVER_NAME"]).">"; }

//// DESTINATAIRES
if(!is_array($destinataires)) $destinataires = array($destinataires);
foreach($destinataires as $dest_key => $dest_tmp) { if(is_numeric($dest_tmp)) $destinataires[$dest_key] = info_utils($dest_tmp,"mail"); }
$destinataires = implode(",", array_unique($destinataires));

//// HEADERS
$header.= "From: ".$expediteur.$retour;
$header.= "MIME-Version: 1.0".$retour;
$header.= "Bcc: ".$destinataires.$retour;
if($fichiers_joints==true) { $header.= "Content-Type: multipart/mixed; boundary=\"".$frontiere."\"".$retour; }
else { $header.= "Content-Type: text/html; charset=\"".$infos_trad["charset"]."\" ".$retour; }

//// MESSAGE HTML
$message = "";
if($fichiers_joints==true){
$message .= "--".$frontiere.$retour;
$message .= "Content-Type: text/html; charset=\"".$infos_trad["charset"]."\" ".$retour;
}
$message .= "<html>".$retour."<head>".$retour."<title>".$objet_mail."</title>".$retour."</head>".$retour."<body>".$retour;
if(isset($_SESSION["user"]["nom"]) and $options["header_footer"]=="oui") $message .= $trad["divers"]["mail_envoye_par"]." ".auteur($_SESSION["user"])." (".$_SESSION["espace"]["nom"].") : <br /><br />";
$message .= "<b>".$contenu_mail."</b>";
if($options["header_footer"]=="oui") $message .= "<br /><br /><a href=\"".$_SESSION["agora"]["adresse_web"]."\" target=\"_blank\"> ".$_SESSION["agora"]["nom"]." </a><br />";
$message .= "</body>".$retour."</html>".$retour;

//// FICHIERS JOINTS
foreach($_FILES as $id_input_fichier => $fichier)
{
if($fichier["error"]==0 and $options["envoi_fichiers"]=="oui"){
// Ajout du fichier au message
$message .= "--".$frontiere.$retour;
$message .= "Content-Type: ".$fichier["type"]."; name=\"".$fichier["name"]."\"".$retour;
$message .= "Content-Transfer-Encoding: base64".$retour;
$message .= "Content-Disposition:attachement; filename=\"".$fichier["name"]."\"".$retour;
$message .= chunk_split(base64_encode(file_get_contents($fichier["tmp_name"]))).$retour;
}
}

//// ENVOI DU MAIL + RAPPORT D'ENVOI SI DEMANDE
$message_envoye = @mail(null, $objet_mail, $message, $header);
if($options["message_alert"]=="oui" and $message_envoye==true) { alert($trad["divers"]["mail_envoye"]); }
elseif($options["message_alert"]=="oui" and $message_envoye==false) { alert($trad["divers"]["mail_pas_envoye"]); }
return $message_envoye;
}


//// REDUCTION D'UN TEXTE
////
function text_reduit($chaine, $nb_caract_maxi=200)
{
if(strlen($chaine)>=$nb_caract_maxi){
$chaine = strip_tags($chaine); // Enlève les caractères html
$chaine = substr($chaine, 0, $nb_caract_maxi); // On réduit à la taile maxi
if(strrpos($chaine," ") > 1) { $chaine = substr($chaine, 0, strrpos($chaine," ")); } // On enlève le dernier mot tronqué auquel cas
$chaine = $chaine."...";
}
return $chaine;
}


//// ALERT ERREUR
////
function alert($text_alerte)
{
echo "<script type=\"text/javascript\"> alert(\"".$text_alerte."\"); </script>";
}


//// REDIRECTION VERS UNE AUTRE PAGE
////
function redir($adresse)
{
echo "<script type=\"text/javascript\"> window.location.replace(\"".$adresse."\"); </script>";
exit();
}


//// REDIRECTION VERS LE MODULE PAR DEFAUT DE L'ESPACE
////
function redir_module_espace()
{
if(isset($_SESSION["espace"]["modules"])) { redir(root_path.$_SESSION["espace"]["modules"][0]["module_dossier_fichier"]."/"); }
else { redir(root_path); }
}


//// ON DONNE UNE VALEUR A UN CHAMPS
////
function set_value($id,$valeur)
{
return "<script type=\"text/javascript\"> set_value(\"".$id."\", \"".$valeur."\"); </script>";
}


//// INFOBULLE
function infobulle($text)
{
if($text!="") return " onMouseOver=\"bulle('".addslashes($text)."');\" onMouseOut=\"bullefin();\" ";
}


//// FORMAT TEXT POUR L'ECRITURE DANS LA BDD
////
function formater($chaine, $options="")
{
//// Convertit les caractères spéciaux en html pour éviter du code malveillant
if(eregi("html",$options)) { $chaine = htmlspecialchars($chaine); }
//// Ajoute la propriete wmode dans les balises <embed> : force l'affichage des menus d'element au dessus des animations flash
if(eregi("editeur",$options)) { $chaine = str_replace(array("<EMBED","<embed"), "<embed wmode=\"transparent\" ", $chaine); }
//// Ajoute des slashes si le magic_quotes n'est pas activé ou le slash est demandé
if(eregi("slash",$options) or get_magic_quotes_gpc()!="1") $chaine = addslashes($chaine);
return trim($chaine);
}


//// FORMAT DATE POUR L'ECRITURE DANS LA BDD
////
function formater_date($date)
{
//// Convertit les caractères spéciaux en html pour éviter du code malveillant
if($date=="") { $date = "null"; }
else { $date = "'".$date."'"; }
return $date;
}


//// ENLEVE LES SLASHES SI MAGIC QUOTES EST ACTIVE
////
function magicquotes_strip($chaine)
{
if(get_magic_quotes_gpc()=="1") { return stripslashes($chaine); }
else { return $chaine; }
}


//// REDÉFINITION DU PARAMETRAGE DE PHP
////
function modif_php_ini()
{
@ini_set("memory_limit",memory_limit);
@ini_set("max_execution_time",max_execution_time);
}


//// MODIF CONFIG.INC.PHP
////
function modif_fichier_config($fichier_config, $tab_valeurs_modif)
{
// Test si le fichier est accessible en écriture
if(!is_file($fichier_config)) { alert("config.inc.php : no access"); exit(); }
elseif(!is_writable($fichier_config)) { alert("config.inc.php : no writing access"); exit(); }
else {
$config_tab = file($fichier_config);
// Lecture de chaque ligne du fichier
foreach($config_tab as $id_ligne => $ligne)
{
// Pour chaque valeur du tableau de modif, on vérifie si elle se trouve dans la ligne courante :
foreach($tab_valeurs_modif as $id_valeur => $valeur)
{
if(eregi($id_valeur,$ligne)) {
if($valeur!="true" and $valeur!="false") $valeur = "\"".$valeur."\"";
$config_tab[$id_ligne] = "define(\"".$id_valeur."\", ".$valeur."); \n";
}
}
}
// On remplace le contenu du fichier
$contenu_config = implode("", $config_tab);
$fp = fopen($fichier_config, "w");
$retour = fwrite($fp, $contenu_config);
fclose($fp);
}
}


//// RECHERCHE UNE VALEURE DANS UN TABLEAU MULTIDIMENTIONNEL
////
function array_multi_search($tableau, $cle, $valeur)
{
// Controle s'il s'agit bien d'un tableau
if(is_array($tableau)) {
// Element dans le tableau courant ?
if(array_key_exists($cle,$tableau) and in_array($valeur,$tableau)) return true;
// Sinon Element dans un sous-tableaux ? (recherche récursive)
foreach($tableau as $elem) { if(is_array($elem) and array_multi_search($elem, $cle, $valeur)) return true; }
// Sinon Recherche infructueuse
return false;
}
}


//// ON RECHARGE LA PAGE PRINCIPALE & ON FERME LE POPUP
////
function reload_close_popup()
{
echo "<script type=\"text/javascript\"> window.opener.location.replace(window.opener.location); window.close(); </script>";
exit;
}


//// RETOURNE UNE CHAINE SANS CARACTERES SPECIAUX
////
function caractere_speciaux($txt)
{
//// On enlève les caracteres spéciaux
$txt = eregi_replace("[àâä]", "a", $txt);
$txt = eregi_replace("[éèêë]", "e", $txt);
$txt = eregi_replace("[ïì]", "i", $txt);
$txt = eregi_replace("[ôö]", "o", $txt);
$txt = eregi_replace("[ùûü]", "u", $txt);
$txt = eregi_replace("[ç]", "c", $txt);
return $txt;
}


//// RECUPERE UNE PREFERENCE UTILISATEUR ET ENREGISTRE LA NOUVELLE SI BESOIN (tri, affichage, etc.)
////
function pref_user($cle_preference, $cle_request=null, $valeur_db_exclue=null)
{
if($_SESSION["user"]["id_utilisateur"]>0)
{
// Récup' la préférence enregistrée
$valeur_preference = db_valeur("SELECT valeur FROM gt_utilisateur_preferences WHERE id_utilisateur='".$_SESSION["user"]["id_utilisateur"]."' AND cle='".$cle_preference."' ");
// $_REQUEST n'existe pas & la préference existe dans la bdd => Passe la préference en $_REQUEST
if($cle_request!=null and empty($_REQUEST[$cle_request]) and $valeur_preference!="") { $_REQUEST[$cle_request] = $valeur_preference; }
// Sinon si $_REQUEST existe & peut être enregistrée => Enregistre la nouvelle préference
elseif(isset($_REQUEST[$cle_request]) and ($valeur_db_exclue==null or $valeur_db_exclue!=$_REQUEST[$cle_request]))
{
if($valeur_preference!="") { db_query("UPDATE gt_utilisateur_preferences SET valeur='".$_REQUEST[$cle_request]."' WHERE id_utilisateur='".$_SESSION["user"]["id_utilisateur"]."' AND cle='".$cle_preference."' "); }
else { db_query("INSERT INTO gt_utilisateur_preferences SET id_utilisateur='".$_SESSION["user"]["id_utilisateur"]."', cle='".$cle_preference."', valeur='".$_REQUEST[$cle_request]."' "); }
$valeur_preference = $_REQUEST[$cle_request];
}
// On retourne la préference
return $valeur_preference;
}
}


//// OPTION DU MODULE ACTIVE ?
////
function option_module($option)
{
foreach($_SESSION["espace"]["modules"] as $module)
{
if(eregi($option,$module["options"])) return true;
}
}


//// INITIALISATION DE LA RESOLUTION DES ELEMENTS
////
function init_resolution_elements($width="350px", $height="100px")
{
global $width_element, $height_element;
// Fonction de la résolution d'écran
if($_SESSION["cfg"]["resolution_width"]>1275)
{
if($width=="350px") { $width = "310px"; }
elseif($width=="170px") { $width = "185px"; }
}
$width_element = $width;
$height_element = $height;
}


//// AFFICHAGE DE LA BARRE DE TITRE D'UN POPUP
////
function titre_popup($titre)
{
echo "<div class=\"titre_popup\">".$titre."</div><br /><br />";
}
?>

Merci de votre aide
A voir également:

8 réponses

D'après ton message, je crois comprendre que agora-project est installé sur un serveur web en local sous windows. Pour que l'envoi de mail fonctionne, il est nécessaire que tu disposes:
-soit d'un serveur de mail en local sur ton poste
-soit que tu en indiques un dans le fichier httpd.conf ou dans php.ini de ton serveur web (c'est l'un des deux mais je ne me souviens plus lequel).
il y a une ligne à renseigner: localhost dans le cas d'un serveur de mail en local ou l'adresse d'un serveur d'envoi de mail externe.
Dans le cas d'un serveur externe, il faut bien sûr que tu ais le droit de l'utiliser ( celui de ton fournisseur d'accès par exemple).
2
speed22 Messages postés 33 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 15 juillet 2009
30 juin 2009 à 11:28
$header = "";

avant la ligne 43 et après ton commentaire ////HEADERS

essaye et tiens nous au courant
0
je l'ai essayé mais j'obtiens le résultat "le courriel n'a pas pu être envoyé" et je n'ai aucune indication d'erreur, de warning ou de notice pourtant l'envoi de courriel est géré par ce fichier (divers.inc.php), je pense que le problème se trouce au niveau de l'utilisation des header dans ce code mais je n'ai toujours pas pu le résoudre.
0
speed22 Messages postés 33 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 15 juillet 2009
1 juil. 2009 à 12:47
Remplace :
$header.= "From: ".$expediteur.$retour;

Par :
$header= "From: ".$expediteur.$retour;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
je l'ai essayé, j'ai même essayé d'enlever les points après tous les header mais il m'est affiché "le courriel n'a pas pu être envoyé"
0
speed22 Messages postés 33 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 15 juillet 2009
1 juil. 2009 à 15:38
Déjà pour que ton code soit propre,

Remplace les deux occurences de :
$message .= "--".$frontiere.$retour;

Par :
$message = "--".$frontiere.$retour;

et

Remplace :
$header.= "From: ".$expediteur.$retour;

Par :
$header = "From: ".$expediteur.$retour;


et uniquement ceux la, ensuite si il y a toujours une erreur, je testerait ce soir ton code ;)
0
Je l'ai fait mais lorsque je teste le fichier en essayant d'envoyer un courriel à travers la version téléchargée et installée d'agora project il m'est toujours affiché "le courriel n'a pas pu être envoyé" pourtant agora project est un CMS contenant déjà des fichiers php grâce auxquels on exploite toutes ses fonctionnalités mais je remarque de tous ces fichiers le fichier divers.inc.php n'est pas bien fonctionnel pour l'envoi de courriels.
0
on 'est en 2012 et toujours ça marche votre réponse merci domi 45
0