45,7 → 45,7 |
|
if($this->mode_verbeux) { |
print_r($retour); |
} |
} |
} |
|
private function traiterMailsEnAttente() { |
59,10 → 59,10 |
$mail_a_moderer = $this->decoderDonneeTemporaire($donnees_brutes_mail); |
$id_mail = $donnees_brutes_mail['adt_id']; |
|
$resultat_envoi = true; |
$envois_echoues = $this->envoyerMail($mail_a_moderer['expediteur'], |
$mail_a_moderer['destinataires'], |
$mail_a_moderer['sujet'], |
$resultat_envoi = true; |
$envois_echoues = $this->envoyerMail($mail_a_moderer['expediteur'], |
$mail_a_moderer['destinataires'], |
$mail_a_moderer['sujet'], |
$mail_a_moderer['message']); |
|
if(empty($envois_echoues)) { |
84,20 → 84,20 |
|
private function avertirModerateurEchecEnvoi($envois_echoues, $mail_a_moderer) { |
|
$corps_mail_echoue = "L'envoi d'un mail modéré à échoué pour les destinataires suivants (".count($envois_echoues)." au total) : <br />"; |
$corps_mail_echoue .= implode(", ", $envois_echoues); |
$corps_mail_echoue .= "<br /><br /><br />"; |
$corps_mail_echoue .= "--- <i> Message original ---</i><br />"; |
$corps_mail_echoue .= "Expéditeur : ".$mail_a_moderer['expediteur']."<br />"; |
$corps_mail_echoue .= "Sujet : ".$mail_a_moderer['sujet']."<br />"; |
$corps_mail_echoue = "L'envoi d'un mail modéré à échoué pour les destinataires suivants (".count($envois_echoues)." au total) : <br />"; |
$corps_mail_echoue .= implode(", ", $envois_echoues); |
$corps_mail_echoue .= "<br /><br /><br />"; |
$corps_mail_echoue .= "--- <i> Message original ---</i><br />"; |
$corps_mail_echoue .= "Expéditeur : ".$mail_a_moderer['expediteur']."<br />"; |
$corps_mail_echoue .= "Sujet : ".$mail_a_moderer['sujet']."<br />"; |
$corps_mail_echoue .= "Message original : ".$mail_a_moderer['message']."<br />"; |
|
$sujet = "L'envoi d'un mail modéré a échoué pour un ou plusieurs destinataires"; |
|
// TODO: Que faire si l'envoi de mail d'avertissement échoue également ? |
$envoi_avertissement = $this->envoyerMail(Config::get('adresse_mail_annuaire'), |
Config::get('mail_moderateur'), |
$sujet, |
$sujet = "L'envoi d'un mail modéré a échoué pour un ou plusieurs destinataires"; |
|
// TODO: Que faire si l'envoi de mail d'avertissement échoue également ? |
$envoi_avertissement = $this->envoyerMail(Config::get('adresse_mail_annuaire'), |
Config::get('mail_moderateur'), |
$sujet, |
$corps_mail_echoue); |
|
return $envoi_avertissement; |
104,7 → 104,7 |
} |
|
private function obtenirMailsEnAttente() { |
$requete = "SELECT * FROM annu_donnees_temp WHERE statut = '".self::STATUT_A_TRAITER."' "; |
$requete = "SELECT * FROM annu_donnees_temp WHERE adt_statut = '".self::STATUT_A_TRAITER."' "; |
$retour = $this->bdd->recupererTous($requete); |
|
return $retour; |
111,8 → 111,8 |
} |
|
private function mettreMailsEnCoursDeTraitement() { |
$requete = "UPDATE annu_donnees_temp SET statut = '".self::STATUT_EN_TRAITEMENT."', date_debut_traitement = NOW() ". |
"WHERE statut = '".self::STATUT_A_TRAITER."' "; |
$requete = "UPDATE annu_donnees_temp SET adt_statut = '".self::STATUT_EN_TRAITEMENT."', adt_date_debut_traitement = NOW() ". |
"WHERE adt_statut = '".self::STATUT_A_TRAITER."' "; |
$maj = $this->bdd->requeter($requete); |
return ($maj !== false); |
} |
127,131 → 127,131 |
"SET adt_donnees = '".$mail_mal_traite."' ". |
"WHERE adt_id = '".$mail_a_moderer['adt_id']."'"; |
|
$maj = $this->bdd->requeter($requete); |
$maj = $this->bdd->requeter($requete); |
return $maj; |
} |
|
private function supprimerMailTraite($id) { |
$requete = "DELETE FROM annu_donnees_temp WHERE statut = '".self::STATUT_EN_TRAITEMENT."' ". |
"AND adt_id = '".$id."'"; |
$supp = $this->bdd->requeter($requete); |
$requete = "DELETE FROM annu_donnees_temp WHERE adt_statut = '".self::STATUT_EN_TRAITEMENT."' ". |
"AND adt_id = '".$id."'"; |
$supp = $this->bdd->requeter($requete); |
return $supp; |
} |
|
private function supprimerMailsEnCoursDeTraitement() { |
$requete = "DELETE FROM annu_donnees_temp WHERE statut = '".self::STATUT_EN_TRAITEMENT."' "; |
$supp = $this->bdd->requeter($requete); |
return $supp; |
private function supprimerMailsEnCoursDeTraitement() { |
$requete = "DELETE FROM annu_donnees_temp WHERE adt_statut = '".self::STATUT_EN_TRAITEMENT."' "; |
$supp = $this->bdd->requeter($requete); |
return $supp; |
} |
|
private function remettreATraiterMailsEnRetard() { |
// Les mails a traiter depuis plus de 10 heures sont considérés comme échoués et donc remis à traiter |
// (en cas de plantage du script ou du serveur de mail pendant leur traitement) |
$requete = "UPDATE annu_donnees_temp SET statut = '".self::STATUT_A_TRAITER."', date_debut_traitement = NULL ". |
"WHERE statut = '".self::STATUT_EN_TRAITEMENT."' ". |
"AND date_debut_traitement < (DATE_SUB(now(), INTERVAL ".self::DELAI_MAX_TRAITEMENT.")) "; |
$requete = "UPDATE annu_donnees_temp SET adt_statut = '".self::STATUT_A_TRAITER."', adt_date_debut_traitement = NULL ". |
"WHERE adt_statut = '".self::STATUT_EN_TRAITEMENT."' ". |
"AND adt_date_debut_traitement < (DATE_SUB(now(), INTERVAL ".self::DELAI_MAX_TRAITEMENT.")) "; |
|
$maj = $this->bdd->requeter($requete); |
$maj = $this->bdd->requeter($requete); |
return ($maj !== false); |
} |
|
private function encoderDonneeTemporaire($donnee) { |
return base64_encode(serialize($donnee)); |
private function encoderDonneeTemporaire($donnee) { |
return base64_encode(serialize($donnee)); |
} |
|
private function decoderDonneeTemporaire($donnee_encodee) { |
return unserialize(base64_decode($donnee_encodee['adt_donnees'])); |
private function decoderDonneeTemporaire($donnee_encodee) { |
return unserialize(base64_decode($donnee_encodee['adt_donnees'])); |
} |
|
/** Envoie un mail avec l'adresse de l'utilisateur donné en paramètre, à l'adresse donnée en paramètre. |
* ATTENTION : le sujet et le contenu envoyer à cette méthode doivent avoir le même encodage que l'application. |
* |
* @param string $expediteur l'expediteur du message |
* @param mixed $destinataires un string ou un tableau de mails qui contiennent les destinataire |
* @param string $sujet sujet du mail |
* @return boolean true ou false suivant le succès ou non de l'envoi |
*/ |
public function envoyerMail($expediteur, $destinataires, $sujet, $message_html, $message_texte = '', $adresse_reponse = null) { |
if (!is_array($destinataires)) { |
$destinataires = array($destinataires); |
} |
if ($message_texte == '') { |
$message_texte = $this->filtrerChaine($message_html); |
} |
|
$encodage = Config::get('appli_encodage'); |
$limite = "_----------=_parties_".md5(uniqid(rand())); |
$eol = "\n"; |
|
$entetes = ''; |
// Définition d'un mail en texte simple et html |
// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe |
$entetes .= "X-Sender: <http://www.tela-botanica.org>".$eol. |
"X-Mailer: PHP-ANNUAIRE-HTML".$eol. |
"X-auth-smtp-user: annuaire@tela-botanica.org ".$eol. |
"X-abuse-contact: annuaire@tela-botanica.org ".$eol. |
'Date: '.date('r').$eol. |
'From: '.$expediteur.$eol. |
'MIME-Version: 1.0'.$eol; |
if ($adresse_reponse !== null) { |
$entetes .= 'Reply-To: '.$adresse_reponse.$eol; |
} |
$entetes .= "Content-Type: multipart/alternative; boundary=\"$limite\";".$eol.$eol; |
|
// message en texte simple |
$contenu = "--$limite".$eol. |
"Content-Type: text/plain; charset=\"$encodage\";".$eol. |
"Content-Transfer-Encoding: 8bit;".$eol.$eol. |
$message_texte.$eol.$eol. |
// le message en html est préféré s'il est lisible |
"--$limite".$eol. |
"Content-Type: text/html; charset=\"$encodage\";".$eol. |
"Content-Transfer-Encoding: 8bit;".$eol.$eol. |
$message_html.$eol.$eol. |
"--$limite--".$eol.$eol; |
|
/** Envoie un mail avec l'adresse de l'utilisateur donné en paramètre, à l'adresse donnée en paramètre. |
* ATTENTION : le sujet et le contenu envoyer à cette méthode doivent avoir le même encodage que l'application. |
* |
* @param string $expediteur l'expediteur du message |
* @param mixed $destinataires un string ou un tableau de mails qui contiennent les destinataire |
* @param string $sujet sujet du mail |
* @return boolean true ou false suivant le succès ou non de l'envoi |
*/ |
public function envoyerMail($expediteur, $destinataires, $sujet, $message_html, $message_texte = '', $adresse_reponse = null) { |
if (!is_array($destinataires)) { |
$destinataires = array($destinataires); |
} |
if ($message_texte == '') { |
$message_texte = $this->filtrerChaine($message_html); |
} |
|
$encodage = Config::get('appli_encodage'); |
$limite = "_----------=_parties_".md5(uniqid(rand())); |
$eol = "\n"; |
|
$entetes = ''; |
// Définition d'un mail en texte simple et html |
// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe |
$entetes .= "X-Sender: <http://www.tela-botanica.org>".$eol. |
"X-Mailer: PHP-ANNUAIRE-HTML".$eol. |
"X-auth-smtp-user: annuaire@tela-botanica.org ".$eol. |
"X-abuse-contact: annuaire@tela-botanica.org ".$eol. |
'Date: '.date('r').$eol. |
'From: '.$expediteur.$eol. |
'MIME-Version: 1.0'.$eol; |
if ($adresse_reponse !== null) { |
$entetes .= 'Reply-To: '.$adresse_reponse.$eol; |
} |
$entetes .= "Content-Type: multipart/alternative; boundary=\"$limite\";".$eol.$eol; |
|
// message en texte simple |
$contenu = "--$limite".$eol. |
"Content-Type: text/plain; charset=\"$encodage\";".$eol. |
"Content-Transfer-Encoding: 8bit;".$eol.$eol. |
$message_texte.$eol.$eol. |
// le message en html est préféré s'il est lisible |
"--$limite".$eol. |
"Content-Type: text/html; charset=\"$encodage\";".$eol. |
"Content-Transfer-Encoding: 8bit;".$eol.$eol. |
$message_html.$eol.$eol. |
"--$limite--".$eol.$eol; |
|
$sujetEncode = mb_encode_mimeheader($sujet, mb_internal_encoding(), "B", "\n"); |
$resultats_envois_echoues = array(); |
$ok = true; |
foreach ($destinataires as $destinataire) { |
$ok = mail($destinataire, $sujetEncode, $contenu, $entetes); |
if (!$ok) { |
$resultats_envois_echoues[] = $destinataire; |
} |
} |
return $resultats_envois_echoues; |
$resultats_envois_echoues = array(); |
$ok = true; |
foreach ($destinataires as $destinataire) { |
$ok = mail($destinataire, $sujetEncode, $contenu, $entetes); |
if (!$ok) { |
$resultats_envois_echoues[] = $destinataire; |
} |
} |
return $resultats_envois_echoues; |
} |
|
/** Transforme automatiquement le message html en message txt. |
* |
* Réalise un strip_tags et avant ça un remplacement des liens sur mesure pour les mettre au format email txt. |
*/ |
private function filtrerChaine($messageHtml) { |
$messageTxt = strip_tags($messageHtml); |
if ($messageHtml != $messageTxt) { |
$html = $this->ajouterHrefDansBalise($messageHtml); |
$messageAvecEntites = strip_tags($html); |
// TODO : en précisant l'encodage de l'appli dans html_entity_decode un double encodage UTF-8 se produit... |
$messageTxt = html_entity_decode($messageAvecEntites, ENT_QUOTES); |
} |
return $messageTxt; |
/** Transforme automatiquement le message html en message txt. |
* |
* Réalise un strip_tags et avant ça un remplacement des liens sur mesure pour les mettre au format email txt. |
*/ |
private function filtrerChaine($messageHtml) { |
$messageTxt = strip_tags($messageHtml); |
if ($messageHtml != $messageTxt) { |
$html = $this->ajouterHrefDansBalise($messageHtml); |
$messageAvecEntites = strip_tags($html); |
// TODO : en précisant l'encodage de l'appli dans html_entity_decode un double encodage UTF-8 se produit... |
$messageTxt = html_entity_decode($messageAvecEntites, ENT_QUOTES); |
} |
return $messageTxt; |
} |
|
/** |
* Extrait la valeur de l'attribut href des balises HTML de liens (a) et ajoute le lien entre |
* chevrons (<>) dans le contenu de la balise "a". |
*/ |
private function ajouterHrefDansBalise($html) { |
$dom = new DOMDocument; |
$dom->loadHTML($html); |
foreach ($dom->getElementsByTagName('a') as $node) { |
if ($node->hasAttribute( 'href' )) { |
$href = $node->getAttribute('href'); |
$node->nodeValue = $node->nodeValue." < $href >"; |
} |
} |
$html = $dom->saveHtml(); |
return $html; |
/** |
* Extrait la valeur de l'attribut href des balises HTML de liens (a) et ajoute le lien entre |
* chevrons (<>) dans le contenu de la balise "a". |
*/ |
private function ajouterHrefDansBalise($html) { |
$dom = new DOMDocument; |
$dom->loadHTML($html); |
foreach ($dom->getElementsByTagName('a') as $node) { |
if ($node->hasAttribute( 'href' )) { |
$href = $node->getAttribute('href'); |
$node->nodeValue = $node->nodeValue." < $href >"; |
} |
} |
$html = $dom->saveHtml(); |
return $html; |
} |
} |
?> |