From 848dcc53702f3b73f9169bc3457d4b3907fbedbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Philippe=20Gu=C3=A9rard?= Date: Mon, 9 Jan 2012 01:26:44 +0100 Subject: [PATCH] Fix encoding for To and Subject headers --- adminstuds.php | 26 +++++++++++++------------- contacts.php | 6 +++--- creation_sondage.php | 6 +++--- fonctions.php | 25 ++++++++++++++++++++++++- studs.php | 6 +++--- 5 files changed, 46 insertions(+), 23 deletions(-) diff --git a/adminstuds.php b/adminstuds.php index a111504..a1e98ad 100644 --- a/adminstuds.php +++ b/adminstuds.php @@ -122,12 +122,12 @@ if (isset($_POST["boutonnouveautitre"]) || isset($_POST["boutonnouveautitre_x"]) //envoi du mail pour prevenir l'admin de sondage if ($connect->Execute($sql, array($nouveautitre, $numsondage))) { - mail ($adresseadmin, + sendEmail( $adresseadmin, _("[ADMINISTRATOR] New title for your poll") . ' ' . NOMAPPLICATION, _("You have changed the title of your poll. \nYou can modify this poll with this link") . " :\n\n".getUrlSondage($numsondageadmin, true)."\n\n" . _("Thanks for your confidence.") . "\n" . NOMAPPLICATION, - $headers); + $headers ); } } } @@ -145,12 +145,12 @@ if (isset($_POST["boutonnouveauxcommentaires"]) || isset($_POST["boutonnouveauxc if ($connect->Execute($sql, array($commentaires, $numsondage))) { //envoi du mail pour prevenir l'admin de sondage - mail ($adresseadmin, + sendEmail( $adresseadmin, _("[ADMINISTRATOR] New comments for your poll") . ' ' . NOMAPPLICATION, _("You have changed the comments of your poll. \nYou can modify this poll with this link") . " :\n\n".getUrlSondage($numsondageadmin, true)." \n\n" . _("Thanks for your confidence.") . "\n" . NOMAPPLICATION, - $headers); + $headers ); } } } @@ -168,12 +168,12 @@ if (isset($_POST["boutonnouvelleadresse"]) || isset($_POST["boutonnouvelleadress if ($connect->Execute($sql, array($nouvelleadresse, $numsondage))) { //envoi du mail pour prevenir l'admin de sondage - mail ($_POST['nouvelleadresse'], + sendEmail( $_POST['nouvelleadresse'], _("[ADMINISTRATOR] New email address for your poll") . ' ' . NOMAPPLICATION, _("You have changed your email address in your poll. \nYou can modify this poll with this link") . " :\n\n".getUrlSondage($numsondageadmin, true)."\n\n" . _("Thanks for your confidence.") . "\n" . NOMAPPLICATION, - $headers); + $headers ); } } } @@ -329,12 +329,12 @@ if (isset($_POST["confirmesuppression"]) || isset($_POST["confirmesuppression_x" error_log($date . " SUPPRESSION: $dsondage->id_sondage\t$dsondage->format\t$dsondage->nom_admin\t$dsondage->mail_admin\n", 3, 'admin/logs_studs.txt'); //envoi du mail a l'administrateur du sondage - mail ($adresseadmin, + sendEmail( $adresseadmin, _("[ADMINISTRATOR] Removing of your poll") . ' ' . NOMAPPLICATION, _("You have removed your poll. \nYou can make new polls with this link") . " :\n\n".get_server_name()."index.php \n\n" . _("Thanks for your confidence.") . "\n" . NOMAPPLICATION, - $headers); + $headers ); //affichage de l'ecran de confirmation de suppression de sondage print_header(); @@ -478,10 +478,10 @@ if (isset($_POST["ajoutercolonne_x"]) && issetAndNoEmpty('nouvellecolonne') && ( if ($connect->Execute($sql, array($nouveauxsujets, $numsondage))) { //envoi d'un mail pour prévenir l'administrateur du changement $headers="From: ".NOMAPPLICATION." <".ADRESSEMAILADMIN.">\r\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit"; - mail ("$adresseadmin", "" . _("[ADMINISTRATOR] New column for your poll").NOMAPPLICATION, "" . + sendEmail( "$adresseadmin", "" . _("[ADMINISTRATOR] New column for your poll").NOMAPPLICATION, "" . _("You have added a new column in your poll. \nYou can inform the voters of this change with this link") . " : \n\n".getUrlSondage($numsondage)." \n\n " . _("Thanks for your confidence.") . "\n".NOMAPPLICATION, - $headers); + $headers ); } } @@ -592,11 +592,11 @@ if (isset($_POST["ajoutercolonne_x"]) && ($dsondage->format == "D" || $dsondage- //envoi d'un mail pour prévenir l'administrateur du changement $adresseadmin = $dsondage->mail_admin; - mail ($adresseadmin, + sendEmail( $adresseadmin, _("[ADMINISTRATOR] New column for your poll"), _("You have added a new column in your poll. \nYou can inform the voters of this change with this link"). " : \n\n".getUrlSondage($numsondage)." \n\n " . _("Thanks for your confidence.") . "\n".NOMAPPLICATION, - $headers); + $headers ); } else { $erreur_ajout_date="yes"; } @@ -1257,4 +1257,4 @@ echo '
 
'; bandeau_pied_mobile(); echo ''."\n"; echo ''."\n"; -echo ''."\n"; \ No newline at end of file +echo ''."\n"; diff --git a/contacts.php b/contacts.php index 0e4b306..3ca5f48 100644 --- a/contacts.php +++ b/contacts.php @@ -56,10 +56,10 @@ if ((isset($_POST['envoiquestion']) || isset($_POST['envoiquestion_x'])) && isse if (isset($_POST['adresse_mail']) && !empty($_POST['adresse_mail']) && validateEmail($_POST['adresse_mail'])) { $headers .= "\r\n".'Reply-To: '.$_POST['adresse_mail']; } - mail (ADRESSEMAILADMIN, "" . _("[CONTACT] You have sent a question ") . "".NOMAPPLICATION, "" . _("You have a question from a user ") . " ".NOMAPPLICATION."\n\n" . _("User") . " : ".$_POST["nom"]."\n\n" . _("User's email address") . " : $_POST[adresse_mail]\n\n" . _("Message") . " :".$message,$headers); + sendEmail( ADRESSEMAILADMIN, "" . _("[CONTACT] You have sent a question ") . "".NOMAPPLICATION, "" . _("You have a question from a user ") . " ".NOMAPPLICATION."\n\n" . _("User") . " : ".$_POST["nom"]."\n\n" . _("User's email address") . " : $_POST[adresse_mail]\n\n" . _("Message") . " :".$message,$headers ); if (isset($_POST['adresse_mail']) && !empty($_POST['adresse_mail']) && validateEmail($_POST['adresse_mail'])) { $headers="From: ".NOMAPPLICATION." <".ADRESSEMAILADMIN.">\r\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit"; - mail ("$_POST[adresse_mail]", "" . _("[COPY] Someone has sent a question ") . "".NOMAPPLICATION, "" . _("Here is a copy of your question") . " :\n\n".$message." \n\n" . _("We're going to answer your question shortly.") . "\n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION,$headers); + sendEmail( "$_POST[adresse_mail]", "" . _("[COPY] Someone has sent a question ") . "".NOMAPPLICATION, "" . _("Here is a copy of your question") . " :\n\n".$message." \n\n" . _("We're going to answer your question shortly.") . "\n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION,$headers ); } //affichage de la page de confirmation d'envoi @@ -148,4 +148,4 @@ framanav(); bandeau_pied(); echo ''."\n"; echo ''."\n"; -} \ No newline at end of file +} diff --git a/creation_sondage.php b/creation_sondage.php index 641ffae..38ae7fe 100644 --- a/creation_sondage.php +++ b/creation_sondage.php @@ -118,8 +118,8 @@ function ajouter_sondage() $message_admin = sprintf($message_admin, getUrlSondage($sondage_admin, true)); if (validateEmail($_SESSION['adresse'])) { - mail ("$_SESSION[adresse]", "[".NOMAPPLICATION."][" . _("Author's message") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"],ENT_QUOTES)), $message_admin, $headers); - mail ("$_SESSION[adresse]", "[".NOMAPPLICATION."][" . _("For sending to the polled users") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"],ENT_QUOTES)), $message, $headers); + sendEmail( "$_SESSION[adresse]", "[".NOMAPPLICATION."][" . _("Author's message") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"],ENT_QUOTES)), $message_admin, $headers ); + sendEmail( "$_SESSION[adresse]", "[".NOMAPPLICATION."][" . _("For sending to the polled users") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"],ENT_QUOTES)), $message, $headers ); } $date=date('H:i:s d/m/Y:'); @@ -127,4 +127,4 @@ function ajouter_sondage() header("Location:".getUrlSondage($sondage)); exit(); session_unset(); -} \ No newline at end of file +} diff --git a/fonctions.php b/fonctions.php index adc128b..c4f3ada 100644 --- a/fonctions.php +++ b/fonctions.php @@ -161,6 +161,29 @@ function validateEmail($email) return (bool)preg_match($pattern, $email); } +# Envoi un courrier avec un codage correct de To et Subject +# Les en-têtes complémentaires ne sont pas gérés +# Inspiré de http://geoland.org/2007/12/utf8-ready-php-mail-function/ + +function sendEmail( $to, $subject, $body, $headers, $param) +{ + $to_list = explode( ',', $to ) ; + $to = "" ; + $first = 1 ; + + foreach ( $to_list as $one ) { + if ( $first == 0 ) $to .= ',' ; + $to_cut = explode( '<' ,$one, 2 ) ; + $to .= '=?UTF-8?B?' . base64_encode( $to_cut[ 0 ] ) . '?= <' . $to_cut[ 1 ] ; + $first = 0 ; + } ; + + $subject = '=?UTF-8?B?' . base64_encode( $subject ) . '?=' ; + + mail( $to, $subject, $body, $headers, $param ) ; + +} + /** * Fonction vérifiant l'existance et la valeur non vide d'une clé d'un tableau @@ -216,4 +239,4 @@ define('NO_POLL_ID', 0x0001000000); define('INVALID_EMAIL', 0x0010000000); define('TITLE_EMPTY', 0x0100000000); define('INVALID_DATE', 0x1000000000); -$err = 0; \ No newline at end of file +$err = 0; diff --git a/studs.php b/studs.php index f113838..f8446e0 100644 --- a/studs.php +++ b/studs.php @@ -172,13 +172,13 @@ if (!is_error(NO_POLL) && (isset($_POST["boutonp"]) || isset($_POST["boutonp_x"] if ($dsondage->mailsonde || /* compatibility for non boolean DB */ $dsondage->mailsonde=="yes" || $dsondage->mailsonde=="true") { $headers="From: ".NOMAPPLICATION." <".ADRESSEMAILADMIN.">\r\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit"; - mail ("$dsondage->mail_admin", + sendEmail( "$dsondage->mail_admin", "[".NOMAPPLICATION."] "._("Poll's participation")." : ".html_entity_decode($dsondage->titre, ENT_QUOTES, 'UTF-8')."", html_entity_decode("\"$nom\" ", ENT_QUOTES, 'UTF-8'). _("has filled a line.\nYou can find your poll at the link") . " :\n\n". getUrlSondage($numsondage)." \n\n" . _("Thanks for your confidence.") . "\n". NOMAPPLICATION, - $headers); + $headers ); } } } else { @@ -308,7 +308,7 @@ if ($testmodifier) { if ($dsondage->mailsonde=="yes") { $headers="From: ".NOMAPPLICATION." <".ADRESSEMAILADMIN.">\r\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit"; - mail ("$dsondage->mail_admin", "[".NOMAPPLICATION."] " . _("Poll's participation") . " : ".html_entity_decode($dsondage->titre, ENT_QUOTES, 'UTF-8'), "\"".html_entity_decode($data->nom, ENT_QUOTES, 'UTF-8')."\""."" . _("has filled a line.\nYou can find your poll at the link") . " :\n\n".getUrlSondage($numsondage)." \n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION,$headers); + sendEmail( "$dsondage->mail_admin", "[".NOMAPPLICATION."] " . _("Poll's participation") . " : ".html_entity_decode($dsondage->titre, ENT_QUOTES, 'UTF-8'), "\"".html_entity_decode($data->nom, ENT_QUOTES, 'UTF-8')."\""."" . _("has filled a line.\nYou can find your poll at the link") . " :\n\n".getUrlSondage($numsondage)." \n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION,$headers ); } }