Subversion Repositories eFlore/Applications.del

Rev

Rev 1716 | Rev 1718 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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