Subversion Repositories eFlore/Applications.del

Rev

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