Subversion Repositories eFlore/Applications.del

Rev

Rev 1721 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1710 jpm 1
<?php
2
class Messagerie {
3
 
4
	private $conteneur = null;
5
 
6
	public function __construct($conteneur) {
7
		$this->conteneur = $conteneur;
8
	}
9
 
10
	public function envoyerHtml($destinataires, $sujet, $message) {
11
		$messageHtml = $message;
12
		$messageTxt = $this->supprimerHtml($message);
13
		$emailExpediteur = $this->conteneur->getParametre('adresse_expediteur_recapitulatif');
14
		$encodage = $this->conteneur->getParametre('encodage_appli');
15
		$dateHeure = date('D, j M Y G:i:s O');
16
		$uid = md5(uniqid(rand()));
17
		$limite = "_----------=_parties_$uid";
18
 
19
		// Définition d'un mail en texte simple et html
20
		// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe
21
		$entetes = "X-Sender: <http://www.tela-botanica.org>\n".
22
			"X-Mailer: PHP-DEL-SCRIPTS\n".
23
			"X-auth-smtp-user: $emailExpediteur\n".
24
			"X-abuse-contact: $emailExpediteur\n".
25
			"Date: $dateHeure\n".
26
			"From: $emailExpediteur\n".
27
			"Content-Type: multipart/alternative; boundary=\"$limite\";\n\n";
28
 
29
		// le message en html est préféré s'il est lisible
30
		$contenu =
31
			"--$limite\n".
32
			"Content-Type: text/plain; charset=\"$encodage\";\n".
33
			"Content-Transfer-Encoding: 7bit;\n\n".
34
			"$messageTxt\n".
35
			"--$limite\n".
36
			"Content-Type: text/html;".
37
			"charset=\"$encodage\";\n".
38
			"Content-Transfer-Encoding: 7bit;\n\n".
39
			"$messageHtml\n".
40
			"--".$limite."--\n";
41
 
42
		$envoieStatut = $this->envoyer($destinataires, $entetes, $sujet, $contenu);
43
 
44
		return $envoieStatut;
45
	}
46
 
1716 jpm 47
	public function envoyerTxt($destinataires, $sujet, $message) {
48
		$messageTxt = $this->supprimerHtml($message);
49
		$emailExpediteur = $this->conteneur->getParametre('adresse_expediteur_recapitulatif');
50
		$dateHeure = date('D, j M Y G:i:s O');
51
 
52
		// Définition d'un mail en texte simple et html
53
		// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe
54
		$entetes = "X-Sender: <http://www.tela-botanica.org>\n".
55
			"X-Mailer: PHP-DEL-SCRIPTS\n".
56
			"X-auth-smtp-user: $emailExpediteur\n".
57
			"X-abuse-contact: $emailExpediteur\n".
58
			"Date: $dateHeure\n".
1721 jpm 59
			"From: $emailExpediteur\n".
60
			"Content-Type: text/plain; charset=UTF-8\n";
1716 jpm 61
 
62
		// le message en html est préféré s'il est lisible
63
		$contenu = "$messageTxt\n";
64
 
65
		$envoieStatut = $this->envoyer($destinataires, $entetes, $sujet, $contenu);
66
 
67
		return $envoieStatut;
68
	}
69
 
1710 jpm 70
	private function envoyer($destinataires, $entetes, $sujet, $contenu) {
71
		$envoieStatut = mail(
72
			$destinataires,
73
			$sujet,
74
			$contenu,
75
			$entetes
76
		);
77
		return $envoieStatut;
78
	}
79
 
80
	/** Transforme automatiquement le message html en message txt.
81
	 *
82
	 * Réalise un stip_tags et avant ça un remplacement des liens sur mesure pour les mettre au format email txt.
83
	 */
84
	private function supprimerHtml($messageHtml) {
85
		$html = $this->ajouterHrefDansBalise($messageHtml);
86
		$messageSansHtml = strip_tags($html);
1722 jpm 87
		$messageSansTab = preg_replace('/^\t+/', '', $messageSansHtml);
1721 jpm 88
		$messageTxt = html_entity_decode($messageSansTab, null, 'UTF-8');
1710 jpm 89
		return $messageTxt;
90
	}
91
 
92
	/**
93
	 * Extrait la valeur de l'attribut href des balises HTML de liens (a) et ajoute le lien entre
94
	 * chevrons (<>) dans le contenu de la balise "a".
95
	 */
96
	private function ajouterHrefDansBalise($html) {
1717 jpm 97
		libxml_use_internal_errors(true);
98
		$dom = new DOMDocument();
1710 jpm 99
		$dom->loadHTML($html);
100
		foreach ($dom->getElementsByTagName('a') as $node) {
101
			if ($node->hasAttribute( 'href' )) {
102
				$href = $node->getAttribute('href');
103
				$node->nodeValue = $node->nodeValue." ( $href )";
104
			}
105
		}
106
		$html = $dom->saveHtml();
107
		return $html;
108
	}
109
}