|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/***************************************************************************\ |
|
4
|
|
|
* SPIP, Système de publication pour l'internet * |
|
5
|
|
|
* * |
|
6
|
|
|
* Copyright © avec tendresse depuis 2001 * |
|
7
|
|
|
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James * |
|
8
|
|
|
* * |
|
9
|
|
|
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. * |
|
10
|
|
|
* Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. * |
|
11
|
|
|
\***************************************************************************/ |
|
12
|
|
|
|
|
13
|
|
|
/** |
|
14
|
|
|
* Gestion des emails et de leur envoi |
|
15
|
|
|
* |
|
16
|
|
|
* @package SPIP\Core\Mail |
|
17
|
|
|
**/ |
|
18
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) { |
|
19
|
|
|
return; |
|
20
|
|
|
} |
|
21
|
|
|
|
|
22
|
|
|
|
|
23
|
|
|
|
|
24
|
|
|
/** |
|
25
|
|
|
* Vérifier la conformité d'une ou plusieurs adresses email (suivant RFC 822) |
|
26
|
|
|
* |
|
27
|
|
|
* @param string $adresses |
|
28
|
|
|
* Adresse ou liste d'adresse (separees pas des virgules) |
|
29
|
|
|
* @return bool|string |
|
|
|
|
|
|
30
|
|
|
* - false si une des adresses n'est pas conforme, |
|
31
|
|
|
* - la normalisation de la dernière adresse donnée sinon |
|
32
|
|
|
**/ |
|
33
|
|
|
function inc_email_valide_dist($adresses) { |
|
34
|
|
|
// eviter d'injecter n'importe quoi dans preg_match |
|
35
|
|
|
if (!is_string($adresses)) { |
|
36
|
|
|
return false; |
|
37
|
|
|
} |
|
38
|
|
|
|
|
39
|
|
|
// Si c'est un spammeur autant arreter tout de suite |
|
40
|
|
|
if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $adresses)) { |
|
41
|
|
|
spip_log("Tentative d'injection de mail : $adresses"); |
|
42
|
|
|
|
|
43
|
|
|
return false; |
|
44
|
|
|
} |
|
45
|
|
|
|
|
46
|
|
|
foreach (explode(',', $adresses) as $v) { |
|
47
|
|
|
// nettoyer certains formats |
|
48
|
|
|
// "Marie Toto <[email protected]>" |
|
49
|
|
|
$adresse = trim(preg_replace(",^[^<>\"]*<([^<>\"]+)>$,i", "\\1", $v)); |
|
50
|
|
|
// RFC 822 |
|
51
|
|
|
if (!preg_match('#^[^()<>@,;:\\"/[:space:]]+(@([-_0-9a-z]+\.)*[-_0-9a-z]+)$#i', $adresse)) { |
|
52
|
|
|
return false; |
|
53
|
|
|
} |
|
54
|
|
|
} |
|
55
|
|
|
|
|
56
|
|
|
return $adresse; |
|
|
|
|
|
|
57
|
|
|
} |
This check looks for the generic type
arrayas a return type and suggests a more specific type. This type is inferred from the actual code.