Vous souhaitez récupérer des adresses mail automatiquement depuis une page web avec PHP ? Bonne nouvelle : quelques lignes de code suffisent pour analyser le contenu d’un site et extraire les adresses e-mail qu’il contient. C’est également une excellente occasion de découvrir les bases du web scraping et les expressions régulières en PHP.
Dans ce tutoriel PHP, vous allez apprendre pas à pas à récupérer des adresses mail depuis une page web, à filtrer les résultats et à construire un script complet, même si vous débutez en développement PHP. Chaque étape sera expliquée simplement afin que vous puissiez comprendre le fonctionnement du code et le réutiliser dans vos propres projets.
- Automatiser l’extraction d’adresses e-mail depuis une page web grâce à quelques fonctionnalités clés de PHP.
- Comprendre comment identifier des coordonnées de contact au sein d’un contenu HTML sans analyse manuelle.
- Disposer d’une base solide pour créer vos propres outils de web scraping, d’analyse ou de collecte de données en PHP.
Lorsque l’on débute en PHP, il arrive que l’on ait besoin d’analyser le contenu d’une page web. Parmi les tâches les plus courantes figure la récupération d’adresses e-mail présentes dans un texte, un article, une page de contact ou encore une documentation en ligne.
Nous verrons plusieurs méthodes, de la plus simple jusqu’à une approche plus robuste utilisant les expressions régulières. À la fin de ce guide, vous serez capable de créer votre propre extracteur d’adresses e-mail et de comprendre précisément comment il fonctionne.
Attention toutefois : récupérer des adresses mail ne signifie pas que vous pouvez les utiliser librement. Les adresses e-mail constituent des données personnelles et leur utilisation est encadrée par la réglementation, notamment le RGPD.
- Comprendre le principe du scraping mail en PHP
- Découvrir les expressions régulières
- Récupérer les adresses mail d'une page web
- Afficher les adresses dans une liste HTML
- Utiliser cURL pour les sites plus complexes
- Exemple complet de script
- Vérifier qu'une adresse mail est valide
- Construire un formulaire d'analyse
- Les limites de cette méthode
- Comment améliorer votre script
- Le code PHP complet pour récupérer les adresses mail d'un site web automatiquement
Comprendre le principe du scraping mail en PHP
Avant d’écrire la moindre ligne de code, il est important de comprendre ce que nous allons faire.
Imaginons une page contenant le texte suivant :
Contactez-nous à contact@monsite.fr
ou support@monsite.fr
Pour un humain, il est facile de repérer ces adresses. Notre script PHP devra réaliser exactement le même travail :
- Télécharger le contenu de la page.
- Parcourir le texte.
- Identifier les adresses e-mail.
- Les stocker dans un tableau.
- Les afficher.

Le défi principal consiste à reconnaître automatiquement une adresse mail parmi tout le texte présent sur la page.
Comment PHP récupère le contenu d’une page web
Pour commencer, nous devons récupérer le code HTML d’une page distante.
PHP propose une fonction particulièrement simple :
<?php
$url = "https://www.exemple.com";
$contenu = file_get_contents($url);
echo $contenu;
Décortiquons ce code.
- La variable
$urlcontient l’adresse de la page à analyser. - La fonction
file_get_contents()télécharge le contenu de cette page et le stocke dans la variable$contenu. - Enfin,
echoaffiche le résultat.
Si vous exécutez ce script, vous verrez apparaître tout le code HTML de la page.
Ce n’est pas encore très joli, mais c’est une première étape essentielle.
Vérifier que la récupération fonctionne
Avant d’aller plus loin, prenez l’habitude de tester votre récupération.
<?php
$url = "https://www.exemple.com";
$contenu = file_get_contents($url);
if ($contenu !== false) {
echo "Page récupérée avec succès.";
} else {
echo "Impossible de récupérer la page.";
}
Cette vérification vous permettra de savoir lorsque le site distant est inaccessible. C’est un peu comme vérifier que votre voiture démarre avant de partir en vacances.
Première méthode : rechercher le symbole @
Une idée très simple consiste à chercher la présence du caractère @.
<?php
$texte = "Contactez-nous à contact@monsite.fr";
if (strpos($texte, "@") !== false) {
echo "Une adresse mail semble présente.";
}
Cette méthode fonctionne parfois, mais elle est très limitée.
Par exemple :
Bonjour @Jean
contient un symbole @ mais ne représente pas une adresse mail.
Nous avons donc besoin d’une méthode plus intelligente.
Découvrir les expressions régulières
Les expressions régulières, souvent appelées Regex, permettent de rechercher des motifs précis dans un texte.
Elles peuvent sembler impressionnantes au premier abord, mais rassurez-vous : nous allons les apprivoiser progressivement.
Une REGEXP, c’est comme un moule ou un modèle de recherche intelligent.
Au lieu de chercher un mot précis (comme « chat »), tu crées une formule magique pour dire à l’ordinateur : « Trouve-moi tous les mots qui commencent par un ‘c’, finissent par un ‘t’, et ont deux lettres au milieu ».
C’est un super-outil qui permet de vérifier ou de trouver très vite des morceaux de texte précis, comme une adresse email ou un numéro de téléphone, dans un gros bloc de texte.
Pour détecter une adresse mail, PHP propose une combinaison redoutablement efficace :
preg_match_all()
Cette fonction recherche tous les éléments correspondant à un modèle donné.
La fonction preg_match_all() en PHP sert à rechercher toutes les correspondances d’une expression régulière (regex) dans une chaîne de caractères.
Contrairement à preg_match() qui s’arrête dès qu’elle trouve un premier résultat, preg_match_all() parcourt le texte jusqu’au bout, extrait chaque occurrence trouvée (ainsi que les groupes de capture) et les stocke de manière organisée dans un tableau multidimensionnel (array).
Elle s’avère particulièrement utile pour extraire en masse des données ciblées, comme tous les liens d’une page HTML ou toutes les adresses email d’un texte.
Récupérer les adresses mail d’un texte avec une Regex
Prenons un exemple simple.
<?php
$texte = "
Contact : contact@monsite.fr
Support : support@monsite.fr
";
preg_match_all(
'/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/',
$texte,
$resultats
);
print_r($resultats[0]);
Résultat :
Array
(
[0] => contact@monsite.fr
[1] => support@monsite.fr
)
Notre script a trouvé les deux adresses automatiquement.
Comprendre la Regex utilisée
La ligne suivante peut faire peur :
/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/
Pourtant, chaque morceau a une signification précise.
La partie :
[A-Za-z0-9._%+-]+
représente la première partie de l’adresse.
Par exemple :
contact
support
info-service
Ensuite :
@
correspond simplement au caractère arobase.
Puis :
[A-Za-z0-9.-]+
représente le nom de domaine.
Enfin :
\.[A-Za-z]{2,}
correspond à l’extension :
.fr
.com
.net
.org
.eu
Une fois comprise, cette expression régulière devient beaucoup moins mystérieuse.
👉 Pour mieux comprendre les Regex mail, consultez notre tutoriel complet sur les Regex mail en PHP.
Récupérer les adresses mail d’une page web
Maintenant que nous savons détecter une adresse dans un texte, nous pouvons combiner cela avec file_get_contents().
<?php
$url = "https://www.exemple.com";
$html = file_get_contents($url);
preg_match_all(
'/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/',
$html,
$resultats
);
echo "<pre>";
print_r($resultats[0]);
echo "</pre>";
Le script télécharge la page puis extrait automatiquement toutes les adresses mail qu’il trouve.
Éliminer les doublons
Sur certaines pages, une même adresse apparaît plusieurs fois.
Par exemple :
contact@monsite.fr
contact@monsite.fr
contact@monsite.fr
Il peut être utile de ne conserver qu’une seule occurrence.
Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?PHP propose pour cela :
array_unique()
La fonction
array_unique()en PHP sert à nettoyer un tableau en supprimant tous les doublons.
Exemple :
<?php
$mails = array_unique($resultats[0]);
print_r($mails);
Les doublons disparaissent automatiquement.
Afficher les adresses dans une liste HTML
Présentons maintenant les résultats de manière plus propre.
<?php
foreach ($mails as $mail) {
echo "<li>$mail</li>";
}
Ou mieux :
<?php
echo "<ul>";
foreach ($mails as $mail) {
echo "<li>" . htmlspecialchars($mail) . "</li>";
}
echo "</ul>";
L’utilisation de htmlspecialchars() permet d’éviter certains problèmes de sécurité lors de l’affichage.
Utiliser cURL pour les sites plus complexes
Certains serveurs refusent les requêtes provenant de file_get_contents().
Dans ce cas, cURL est souvent la meilleure solution.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.exemple.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
echo $html;
Le résultat est identique, mais la compatibilité est généralement meilleure.
Exemple complet de script
Voici un extracteur d’adresses e-mail fonctionnel.
<?php
$url = "https://www.exemple.com";
$html = file_get_contents($url);
preg_match_all(
'/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/',
$html,
$resultats
);
$mails = array_unique($resultats[0]);
echo "<h2>Adresses trouvées</h2>";
if (count($mails) > 0) {
echo "<ul>";
foreach ($mails as $mail) {
echo "<li>" . htmlspecialchars($mail) . "</li>";
}
echo "</ul>";
} else {
echo "Aucune adresse trouvée.";
}
Ce script constitue une excellente base pour vos futurs projets.
Vérifier qu’une adresse mail est valide
Même si la Regex est efficace, il peut être intéressant d’effectuer une seconde vérification.
PHP possède une fonction dédiée :
filter_var()
La fonction filter_var() en PHP est comme un agent de sécurité ou un trieur automatique pour tes données. Elle sert à deux choses principales :
- Vérifier (Valider) : Elle contrôle si une donnée a le bon format. Par exemple : « Est-ce que ce texte est bien une vraie adresse email ? » ou « Est-ce un vrai nombre ? ».
- Nettoyer (Sanitiser) : Elle nettoie une donnée en supprimant ce qui dépasse. Par exemple : « Enlève tous les caractères bizarres ou dangereux de ce commentaire ».
C’est l’outil indispensable pour sécuriser les informations envoyées par tes utilisateurs.
👉 Pour aller plus loin : Valider une adresse mail en PHP
Exemple :
<?php
$mail = "contact@monsite.fr";
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
echo "Adresse valide";
} else {
echo "Adresse invalide";
}
Cette vérification supplémentaire améliore la fiabilité des résultats.
Construire un formulaire d’analyse
Pourquoi ne pas laisser l’utilisateur saisir lui-même l’adresse de la page à analyser ?
Le formulaire HTML
<form method="post">
<input type="text" name="url">
<button type="submit">
Analyser
</button>
</form>
Le traitement PHP
<?php
if (!empty($_POST['url'])) {
$url = $_POST['url'];
$html = file_get_contents($url);
preg_match_all(
'/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/',
$html,
$resultats
);
print_r(array_unique($resultats[0]));
}
Vous disposez désormais d’un véritable outil d’extraction.
Les limites de cette méthode
Même si notre script fonctionne très bien, il possède quelques limites.
- Certaines adresses sont volontairement masquées :
contact [at] monsite.fr
ou encore :
contact(at)monsite.fr
Ces techniques sont souvent utilisées pour empêcher les robots de collecter automatiquement les e-mails.
👉 Apprenez à bloquer certain user-agent sur votre site web.
De même, certaines adresses sont générées en JavaScript après le chargement de la page. Dans ce cas, PHP seul ne pourra pas les voir puisque le JavaScript s’exécute dans le navigateur.
Pour récupérer ces données, il faudrait utiliser des outils plus avancés comme Selenium ou un navigateur sans interface graphique.
Respecter la législation
C’est probablement la partie la plus importante de ce tutoriel.
Techniquement, récupérer des adresses mail est relativement simple.
Cependant, cela ne signifie pas que vous pouvez ensuite envoyer des messages commerciaux à toutes les personnes trouvées.
En Europe, le RGPD encadre strictement la collecte et l’utilisation des données personnelles.
Si vous développez un outil d’analyse pour votre propre site ou pour un usage légitime, aucun problème.
En revanche, constituer une base d’adresses e-mail afin d’envoyer du démarchage non sollicité peut vous exposer à des sanctions.
Gardez toujours cette règle simple en tête : Ce n’est pas parce qu’une donnée est visible qu’elle est librement exploitable.
Comment améliorer votre script
Une fois cette base maîtrisée, plusieurs pistes d’amélioration s’offrent à vous.
- Vous pourriez enregistrer les résultats dans une base MySQL.
- Vous pourriez exporter les adresses dans un fichier CSV.
- Vous pourriez parcourir plusieurs pages d’un même site automatiquement.
- Vous pourriez également construire un mini crawler capable d’explorer tous les liens d’un domaine afin de récupérer les coordonnées présentes sur l’ensemble du site.
Ces évolutions représentent d’excellents exercices pour progresser en PHP.
Aller plus loin avec un crawler PHP
Imaginez que votre script visite automatiquement :
https://monsite.fr
https://monsite.fr/contact
https://monsite.fr/a-propos
https://monsite.fr/mentions-legales
Puis qu’il rassemble toutes les adresses trouvées dans un seul tableau.
- Vous venez alors de créer les bases d’un crawler web.
C’est précisément ce type de mécanisme qui est utilisé par les moteurs de recherche pour parcourir Internet.
Bien entendu, les robots de Google sont infiniment plus complexes, mais le principe fondamental reste le même : visiter une page, analyser son contenu, suivre les liens puis recommencer.
👉 Découvrez Katana et GoSpider, deux crawler de site web.
Le code PHP complet pour récupérer les adresses mail d’un site web automatiquement
<?php
// URL à analyser
$url = "https://www.exemple.com";
// Récupération du contenu de la page
$html = @file_get_contents($url);
if ($html === false) {
die("Impossible de récupérer la page.");
}
// Recherche des adresses e-mail
preg_match_all(
'/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/',
$html,
$matches
);
// Suppression des doublons
$emails = array_unique($matches[0]);
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Extraction d'adresses e-mail</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 40px auto;
}
ul {
padding-left: 20px;
}
li {
margin-bottom: 5px;
}
</style>
</head>
<body>
<h1>Adresses e-mail trouvées</h1>
<?php if (!empty($emails)) : ?>
<p><strong><?= count($emails) ?></strong> adresse(s) trouvée(s).</p>
<ul>
<?php foreach ($emails as $email) : ?>
<li><?= htmlspecialchars($email) ?></li>
<?php endforeach; ?>
</ul>
<?php else : ?>
<p>Aucune adresse e-mail trouvée.</p>
<?php endif; ?>
</body>
</html>
Version avec formulaire pour analyser n’importe quelle URL :
<?php
$emails = [];
if (!empty($_POST['url'])) {
$url = trim($_POST['url']);
$html = @file_get_contents($url);
if ($html !== false) {
preg_match_all(
'/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/',
$html,
$matches
);
$emails = array_unique($matches[0]);
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Récupérateur d'adresses e-mail</title>
</head>
<body>
<h1>Récupérer les adresses e-mail d'une page web</h1>
<form method="post">
<input
type="url"
name="url"
placeholder="https://www.exemple.com"
required
style="width:400px;"
>
<button type="submit">Analyser</button>
</form>
<?php if (!empty($_POST['url'])) : ?>
<h2>Résultats</h2>
<?php if (!empty($emails)) : ?>
<p><?= count($emails) ?> adresse(s) trouvée(s)</p>
<ul>
<?php foreach ($emails as $email) : ?>
<li><?= htmlspecialchars($email) ?></li>
<?php endforeach; ?>
</ul>
<?php else : ?>
<p>Aucune adresse e-mail trouvée.</p>
<?php endif; ?>
<?php endif; ?>
</body>
</html>
Peut-on récupérer les adresses mail de n’importe quel site web avec PHP ?
Non. Certains sites protègent leurs données ou affichent les adresses e-mail via JavaScript. Dans ce cas, un simple script PHP ne pourra pas toujours les détecter.
Quelle est la meilleure méthode pour extraire une adresse mail en PHP ?
L’utilisation des expressions régulières (Regex) est généralement la solution la plus efficace. Elle permet de repérer automatiquement les adresses e-mail présentes dans un texte ou une page web.
Est-il légal de récupérer des adresses mail sur Internet ?
La récupération technique est possible, mais l’utilisation des adresses collectées est encadrée par la loi. Avant toute exploitation, notamment à des fins commerciales, il est important de respecter le RGPD et les règles relatives aux données personnelles.
Récupérer des adresses mail avec PHP est un excellent exercice pour découvrir plusieurs notions essentielles du développement web : la récupération de contenu distant, la manipulation de chaînes de caractères, les expressions régulières et le traitement automatique de données.
Au-delà de l’aspect technique, ce projet permet surtout de comprendre comment un programme peut analyser un contenu web comme le ferait un être humain, mais à une vitesse bien supérieure. C’est souvent ce genre de petit projet concret qui fait progresser rapidement lorsqu’on apprend PHP.
Maintenant que vous maîtrisez l’extraction d’adresses e-mail, pourquoi ne pas relever un nouveau défi ? Essayez par exemple de récupérer les numéros de téléphone d’une page, les liens présents dans un article ou encore les images d’un site. Vous découvrirez que les techniques apprises aujourd’hui peuvent être adaptées à une multitude de projets passionnants.
Le meilleur moyen d’apprendre reste toujours le même : ouvrir votre éditeur de code, expérimenter et modifier les exemples proposés. Chaque test vous rapprochera un peu plus de la maîtrise du langage PHP.
👉 Pour aller plus loin avec le scraping, découvrez Goutte pour surveiller les prix d’un produit en PHP

Fondateur de l’agence Créa-troyes, affiliée France Num
Intervenant en Freelance.
Contactez-moi
