Accueil > > > FORMULAIRE DE RÉCUPÉRATION D'EMAILS
FORMULAIRE DE RÉCUPÉRATION D'EMAILS
Information sur la source
Description
Voilà temps que je suis à la recherche d'un script qui me permette d'ajouter un formulaire sur mon site afin que les lecteurs puisse s'abonner à la newsletter du site sans problèmes. J'ai donc crée un formulaire, qui, traité en php, permet de récupérer l'adresse email, vérifier qu'elle est dans le bon format ( xxx@xxx.xx ), vérifier également qu'elle n'est pas déjà présente dans la base de donnée, et ensuite l'inscrit dans celle-ci. Ajouté à cela, un fichier envoi.php qui lance une fonction mail() qui passe les filtres anti-spam hotmail gmail (code fonctionnel et récupéré sur codesources); malheuresement, il faudra une éxecution de ce script par tache cron au niveau du serveur: un simple php -f envoi.php devrait suffire à chaque échéance d'envoi. Et enfin, une fonction de désinscription sous la forme d'un lien comme sur la majorité des sites. Pour une meilleure organisation, le script opte pour un relais de toutes les actions au function.php.
Source
- functions.php
-
- <?php
-
- //fonctions relatives à la BDD
-
- //Connexion à la BDD
- function my_co()
- {
- mysql_connect ('localhost', 'root', '');
- mysql_select_db ("pomme-poire");
- }
-
-
-
-
-
-
-
-
-
- // Fonctions relatives à l'outil newsletter
-
-
-
-
- //Fonction de vérification d'une inscription préalable
- function verif_email_exists($mail)
- {
- // On compte le nombre de fois où apparait le dit mail dans la base
- $verif_presence = mysql_query ("SELECT mail FROM newsletter WHERE mail = '$mail'");
- $verif_presence1 = mysql_fetch_array ($verif_presence);
- // Si le mail apparait; on renvoit la valeur true
- if ($verif_presence1 != NULL)
- {
- return true;
- }
- // Sinon, elle n'apparait pas, on renvoit la valeur false
- elseif ($verif_presence1 == NULL)
- {
- return false;
- }
- }
-
-
-
-
- //Fonction de vérification de format de l'email
- function verif_email($mail)
- {
- // On établit l'archétype d'une adresse mail en expressions régulières et on l'insère dans la variable syntaxe
- $syntaxe = '#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#' ;
- $domain = explode('@', $email);
- // On compare l'adresse donnée en argument avec l'archétype; si elle correspond, on valide, sinon on renvoit la valeur false
- if (preg_match($syntaxe, $mail))
- {
- if (checkdnsrr($domain[1]))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
-
-
-
- // Fonction d'inscription à la newsletter
- function insc_news($mail)
- {
- // Si la syntaxe d'une adresse mail est bien respectée
- if (verif_email($mail) == true)
- {
- // Si le test de présence de l'adresse dans la base nous renvoit false
- if (verif_email_exists($mail) == false)
- {
- // On conserve la date, puis on envoi l'adresse mail et la date d'inscription à la base
- $date_inscription = date("d/m/y");
- mysql_query ("INSERT INTO newsletter VALUES('','$mail','$date_inscription') ") or die ("impossible de transmettre ces valeurs");
- echo "vous voilà inscrit, vous recevrez donc les derniers articles de pomme poire abricot chaque semaine sous la forme d'un journal pdf";
- }
- // Sinon c'est que l'adresse est déjà présente dans la BDD
- else
- {
- echo "vous êtes déjà inscrit à cette newsletter, en cas de problème veuillez contactez le webmaster";
- }
- }
- // Sinon, c'est que le format d'adresse n'est pas valide
- else
- {
- echo "le format de votre adresse email ne semble pas être valide, veuillez réessayer";
- }
-
- }
-
-
-
-
- //Fonction de désinscription de la newsletter
- function desinsc_news($mail)
- {
- // Si la syntaxe d'une adresse mail est bien respectée
- if (verif_email($mail) == true)
- {
- // Et si le test de présence de l'adresse dans la base nous confirme qu'elle y est inscrite
- if (verif_email_exists($mail) == true)
- {
- // Alors on demande à la base de retirer l'occurence correspondant au mail
- mysql_query("DELETE FROM `newsletter` WHERE `newsletter`.`mail` = '$mail' LIMIT 1");
- echo "merci d'avoir été fidèle à Pomme Poire Abricot, en espérant vous retrouver bientôt parmi nos lecteurs";
- }
- // Sinon si l'adresse n'est pas présente dans la BDD
- elseif (verif_email_exists($mail) == false)
- {
- echo "Vous n'êtes actuelement pas inscrit à la newsletter";
- }
- }
- // Sinon, c'est que le format d'adresse n'est pas valide
- else
- {
- echo "Ceci n'est pas un format d'email valide";
- }
- }
-
-
-
-
-
-
-
-
-
- //Fonctions relatives à l'envoi d'emails
-
-
-
-
- //Fonction relative à l'envoi de mail (passe les filtres hotmail/gmail)
- function email($destinataire, $sujet , $messtxt, $messhtml,$mailfrom="newsletter@pomme-poire.fr",$namefrom="http://pomme-poire.fr")
- {
-
- $boundary = "_".md5 (uniqid (rand()));
- $entete = "MIME-Version: 1.0\n";
-
- $entete .= "X-Sender: <www.pomme-poire.fr>\n"; // Votre site
- $entete .= "X-Mailer: PHP\n";
- $entete .= "X-auth-smtp-user: oleiade@pomme-poire.fr \n"; // Votre adresse mail
- $entete .= "X-abuse-contact: newsletter@pomme-poire.fr \n"; // L'adresse mail utilisée pour la newsletter
-
- $entete .= "Reply-to: $namefrom <$mailfrom>\n";
- $entete .= "From:$namefrom <www-data@planet-work.com>\n";
-
- $entete .= "Content-Type: multipart/alternative; boundary=\"$boundary\" ";
-
- $message = "--" . $boundary . "\n";
- $message.= "This is a multi-part message in MIME format.\n\n";
-
- $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
- $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
- $message .= $messtxt;
- $message .= "\n\n";
- $message .= "--" . $boundary . "\n";
- $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
- $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
- $message .= str_replace("=","=3D",$messhtml);
- $message .= "\n\n";
-
-
- return @mail($destinataire, $sujet, $message, $entete);
- }
-
-
-
-
- //Fonction pour envoi de la newsletter
- function mail_newsletter()
- {
- my_co();
- $adresses = mysql_query("SELECT mail FROM newsletter");
- while ($adresses1 = mysql_fetch_row ($adresses))
- {
- foreach ($adresses1 as $cle=>$valeur)
- {
- email($mail,votre sujet,votre message,votre en-tete,"","");
- }
- }
-
- echo "votre mail a correctement été envoyé";
- }
- mysql_close();
-
- ?>
-
-
-
-
- inscription.php
-
- <html>
- <body>
- <div class="newsletter">
- <div id="inscription">
- <form action="inscription.php" method="post">
- <input type="text" name="adresse"/>
- <input type="submit" value="Tenez=vous au courant" name="inscription"/>
- </form>
- </div>
- <div id="desinscription">
- <a href="/mail-test/desinscription.php"> se désinscrire </a>
- </div>
- </div>
- </body>
- </html>
-
-
-
- <?php
- include ("functions.php");
- //Connexion à la BDD
- my_co();
-
- // On vérifie que le champs existe
- if ( isset($_POST['adresse']) )
- {
- // Et on vérifie que le champs est remplit
- if ( $_POST['adresse'] != NULL)
- {
- // On transmet la valeur du champs dans une variable
- $mail = $_POST['adresse'];
- // Et on l'inscrit dans la BDD via la fonction:
- insc_news($mail);
- // On referme la connexion à la BDD
- mysql_close();
- }
- else
- {
- echo "Veuillez entrer une adresse email";
- }
- }
-
- ?>
-
-
-
-
- desinscription.php
-
-
- <html>
- <body>
- <form action="desinscription.php" method="post">
- <input type="text" name="adresse"/>
- <input type="submit" value="désinscrivez-moi">
- </form>
- </body>
- </html>
-
-
- <?php
- include ("functions.php");
- my_co();
- // Si le champs existe
- if (isset ($_POST['adresse']))
- {
- // Et s'il est remplit
- if ($_POST != NULL)
- {
- // On récupère son contenu dans une variable
- $mail = $_POST['adresse'];
- // Et on la désinscrit de la BDD via la fonction:
- desinsc_news($mail);
- }
- // Sinon, c'est que le champs a été laissé vide
- else
- {
- echo "veuillez entrez une adresse email svp";
- }
- }
- mysql_close();
- ?>
-
-
-
-
- mail.newsletter.php
-
- <?php
- include ("functions.php");
- mail_newsletter();
- ?>
-
-
-
-
- envoi.php:
-
- <?php
- include ("functions.php");
- mail_newsletter();
- ?>
functions.php
<?php
//fonctions relatives à la BDD
//Connexion à la BDD
function my_co()
{
mysql_connect ('localhost', 'root', '');
mysql_select_db ("pomme-poire");
}
// Fonctions relatives à l'outil newsletter
//Fonction de vérification d'une inscription préalable
function verif_email_exists($mail)
{
// On compte le nombre de fois où apparait le dit mail dans la base
$verif_presence = mysql_query ("SELECT mail FROM newsletter WHERE mail = '$mail'");
$verif_presence1 = mysql_fetch_array ($verif_presence);
// Si le mail apparait; on renvoit la valeur true
if ($verif_presence1 != NULL)
{
return true;
}
// Sinon, elle n'apparait pas, on renvoit la valeur false
elseif ($verif_presence1 == NULL)
{
return false;
}
}
//Fonction de vérification de format de l'email
function verif_email($mail)
{
// On établit l'archétype d'une adresse mail en expressions régulières et on l'insère dans la variable syntaxe
$syntaxe = '#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#' ;
$domain = explode('@', $email);
// On compare l'adresse donnée en argument avec l'archétype; si elle correspond, on valide, sinon on renvoit la valeur false
if (preg_match($syntaxe, $mail))
{
if (checkdnsrr($domain[1]))
{
return true;
}
else
{
return false;
}
}
}
// Fonction d'inscription à la newsletter
function insc_news($mail)
{
// Si la syntaxe d'une adresse mail est bien respectée
if (verif_email($mail) == true)
{
// Si le test de présence de l'adresse dans la base nous renvoit false
if (verif_email_exists($mail) == false)
{
// On conserve la date, puis on envoi l'adresse mail et la date d'inscription à la base
$date_inscription = date("d/m/y");
mysql_query ("INSERT INTO newsletter VALUES('','$mail','$date_inscription') ") or die ("impossible de transmettre ces valeurs");
echo "vous voilà inscrit, vous recevrez donc les derniers articles de pomme poire abricot chaque semaine sous la forme d'un journal pdf";
}
// Sinon c'est que l'adresse est déjà présente dans la BDD
else
{
echo "vous êtes déjà inscrit à cette newsletter, en cas de problème veuillez contactez le webmaster";
}
}
// Sinon, c'est que le format d'adresse n'est pas valide
else
{
echo "le format de votre adresse email ne semble pas être valide, veuillez réessayer";
}
}
//Fonction de désinscription de la newsletter
function desinsc_news($mail)
{
// Si la syntaxe d'une adresse mail est bien respectée
if (verif_email($mail) == true)
{
// Et si le test de présence de l'adresse dans la base nous confirme qu'elle y est inscrite
if (verif_email_exists($mail) == true)
{
// Alors on demande à la base de retirer l'occurence correspondant au mail
mysql_query("DELETE FROM `newsletter` WHERE `newsletter`.`mail` = '$mail' LIMIT 1");
echo "merci d'avoir été fidèle à Pomme Poire Abricot, en espérant vous retrouver bientôt parmi nos lecteurs";
}
// Sinon si l'adresse n'est pas présente dans la BDD
elseif (verif_email_exists($mail) == false)
{
echo "Vous n'êtes actuelement pas inscrit à la newsletter";
}
}
// Sinon, c'est que le format d'adresse n'est pas valide
else
{
echo "Ceci n'est pas un format d'email valide";
}
}
//Fonctions relatives à l'envoi d'emails
//Fonction relative à l'envoi de mail (passe les filtres hotmail/gmail)
function email($destinataire, $sujet , $messtxt, $messhtml,$mailfrom="newsletter@pomme-poire.fr",$namefrom="http://pomme-poire.fr")
{
$boundary = "_".md5 (uniqid (rand()));
$entete = "MIME-Version: 1.0\n";
$entete .= "X-Sender: <www.pomme-poire.fr>\n"; // Votre site
$entete .= "X-Mailer: PHP\n";
$entete .= "X-auth-smtp-user: oleiade@pomme-poire.fr \n"; // Votre adresse mail
$entete .= "X-abuse-contact: newsletter@pomme-poire.fr \n"; // L'adresse mail utilisée pour la newsletter
$entete .= "Reply-to: $namefrom <$mailfrom>\n";
$entete .= "From:$namefrom <www-data@planet-work.com>\n";
$entete .= "Content-Type: multipart/alternative; boundary=\"$boundary\" ";
$message = "--" . $boundary . "\n";
$message.= "This is a multi-part message in MIME format.\n\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n\n";
$message .= $messtxt;
$message .= "\n\n";
$message .= "--" . $boundary . "\n";
$message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n\n";
$message .= str_replace("=","=3D",$messhtml);
$message .= "\n\n";
return @mail($destinataire, $sujet, $message, $entete);
}
//Fonction pour envoi de la newsletter
function mail_newsletter()
{
my_co();
$adresses = mysql_query("SELECT mail FROM newsletter");
while ($adresses1 = mysql_fetch_row ($adresses))
{
foreach ($adresses1 as $cle=>$valeur)
{
email($mail,votre sujet,votre message,votre en-tete,"","");
}
}
echo "votre mail a correctement été envoyé";
}
mysql_close();
?>
inscription.php
<html>
<body>
<div class="newsletter">
<div id="inscription">
<form action="inscription.php" method="post">
<input type="text" name="adresse"/>
<input type="submit" value="Tenez=vous au courant" name="inscription"/>
</form>
</div>
<div id="desinscription">
<a href="/mail-test/desinscription.php"> se désinscrire </a>
</div>
</div>
</body>
</html>
<?php
include ("functions.php");
//Connexion à la BDD
my_co();
// On vérifie que le champs existe
if ( isset($_POST['adresse']) )
{
// Et on vérifie que le champs est remplit
if ( $_POST['adresse'] != NULL)
{
// On transmet la valeur du champs dans une variable
$mail = $_POST['adresse'];
// Et on l'inscrit dans la BDD via la fonction:
insc_news($mail);
// On referme la connexion à la BDD
mysql_close();
}
else
{
echo "Veuillez entrer une adresse email";
}
}
?>
desinscription.php
<html>
<body>
<form action="desinscription.php" method="post">
<input type="text" name="adresse"/>
<input type="submit" value="désinscrivez-moi">
</form>
</body>
</html>
<?php
include ("functions.php");
my_co();
// Si le champs existe
if (isset ($_POST['adresse']))
{
// Et s'il est remplit
if ($_POST != NULL)
{
// On récupère son contenu dans une variable
$mail = $_POST['adresse'];
// Et on la désinscrit de la BDD via la fonction:
desinsc_news($mail);
}
// Sinon, c'est que le champs a été laissé vide
else
{
echo "veuillez entrez une adresse email svp";
}
}
mysql_close();
?>
mail.newsletter.php
<?php
include ("functions.php");
mail_newsletter();
?>
envoi.php:
<?php
include ("functions.php");
mail_newsletter();
?>
Conclusion
Un code à optimiser sans doute, mais qui je l'espère facilitera la vie de ceux qui veulent implémenter simplement sur leur site un systeme de récupération et d'envoi des emails à des fins de newsletter. P.S: les noms de tables et de champs dans la BDD sont là à titre d'exemple. Et je pense que certaines choses sont encore à revoir où à améliorer, telle l'implémentation d'une couche AJAX peut-etre, ou la vérification que les mails sont parvenus, avec notification à l'admin au cas ou ceci n'aurait pas fonctionné.
Historique
- 01 mars 2009 16:38:11 :
- plus d'espace entre chaque fichier + normalisation des noms de variables et autres identifiants.
- 03 mars 2009 10:51:03 :
- Ajout des fonctions de mail et de désinscription; reléguation de la plupart des actions aux fonctions du functions.php
- 03 mars 2009 12:00:36 :
- mise à jour pour vérification du dns de l'adresse entrée pour existence de l'hébergeur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Formulaire Php / Mysql multiple [ par sankudo ]
Bonjour etant newbies dans le codage Php / mysql je me tourne vers vous pour une piste de recherche sur mon probleme je souhaite realiser un formulai
Recherche développeur petit projet PHP/MySQL [ par xema ]
Bonjour, Je suis à la recherche d'un développeur pouvant créer un formulaire PHP simple de saisie d'heures de travail par les employés d'une entrepri
php / mysql [ par honey87 ]
bonjour tout le monde, je voudrais faire une newsletter dans mon site mais je ne sais pas pourquoi les valeurs qu'on saisie dans la zone de texte ne s
PHP MySQL requete d'affichage [ par babygamer ]
Bonjours a tous et a toutes !! voici mon problème: Je voudrai récupérer une valeur saisi dans un formulaire afin de la tester si elle est égale a la c
Doublon PHP mysql et formulaire [ par mfournet ]
bonjour, Je suis débutant en php et je souhaite créer un site avec gestion d'utilisateur dans ma base Mysql. J'ai créé une page
Formulaire php [ par xenthor ]
J'ai un petit souci avec un formulaire en php.J'ai recherché sur internet en vain.J'ai deux fichiers: insert.php et formulaire.phpVoilà le c
formulaire php-mysql avec bouton parcourir [ par iptys ]
Au secours... g besoin d'aide rapidement g fait un formulaire, je souhaite faire un champs avec un bouton parcourir et charger une image dan
formulaire Modifier BDD Mysql [ par ombrey20 ]
j suis debutant en php,j'ai deja creer un formulaire ajout d'enregistrement dans une BDD Mysql via php.. et j veux faire un autre pour la modification
formulaire php mysql [ par simon0000 ]
salut tous le monde j'ai créer un formulaire de 5 champ comment je peux enregistrer le contenu de ce formulaire dans une table sqlmerci d'av
formulaire php/mysql [ par g_marvin ]
bonjourj'ai fait un formulaire php ou j'ai plusieurs champs + les champs identifiant et nom qui sont des listes déroulante, et je voudrais s
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|