diff --git a/.gitattributes b/.gitattributes
index 614cba7bc2e832d335668ba0dcd0319a491e1cbd..defcc95dd546ed58cbd4abc54873149bcf71a424 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -211,6 +211,8 @@ formulaires/inc-login_forum.html -text
 formulaires/inc-select-categories.html -text
 formulaires/inc/config_couleurs.html -text
 formulaires/inc/config_couleurs_fonctions.php -text
+formulaires/newsletter_subscribe.html -text
+formulaires/newsletter_subscribe.php -text
 formulaires/recherche.html -text
 /forum.html -text
 /identifiants.html -text
diff --git a/formulaires/newsletter_subscribe.html b/formulaires/newsletter_subscribe.html
new file mode 100644
index 0000000000000000000000000000000000000000..8ef4d945347d24c2ebd975060f7400639cf9cca0
--- /dev/null
+++ b/formulaires/newsletter_subscribe.html
@@ -0,0 +1,29 @@
+<div class='formulaire_spip formulaire_newsletter formulaire_[(#FORM)] ajax'>
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+
+	[(#ENV{editable})
+	<form method='post' action='#ENV{action}'><div>
+		#ACTION_FORMULAIRE{#ENV{action}}
+		<ul>
+			#SET{fl,mailsubscriber}
+			#SET{name,session_email}#SET{obli,'obligatoire'}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
+			<li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
+				<label for="#GET{name}"><:newsletter:label_email_subscribe:></label>[
+				<span class='erreur_message'>(#GET{erreurs})</span>
+				]<input type="email" name="#GET{name}" class="email text" value="#ENV*{#GET{name}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
+			</li>
+			#SET{name,listes}#SET{obli,'obligatoire'}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
+			<li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
+				<label>[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
+				<span class='erreur_message'>(#GET{erreurs})</span>
+				]
+				<INCLURE{fond=formulaires/inc-check-subscribinglists,name=#GET{name},choix_listes=#ENV{_listes_dispo},status=open,env} />
+			</li>
+		</ul>
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		<p class="boutons"><input type="submit" class="submit" value="<:newsletter:bouton_subscribe|attribut_html:>" /></p>
+	</div></form>
+	]
+</div>
diff --git a/formulaires/newsletter_subscribe.php b/formulaires/newsletter_subscribe.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd802dcd27e15fee495393091a304e91a6921194
--- /dev/null
+++ b/formulaires/newsletter_subscribe.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Plugin mailsubscribers
+ * (c) 2012 Cédric Morin
+ * Licence GNU/GPL v3
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS['formulaires_no_spam'][] = 'newsletter_subscribe';
+include_spip('inc/mailsubscribers');
+
+
+/**
+ * Declarer les champs postes et y integrer les valeurs par defaut
+ */
+function formulaires_newsletter_subscribe_charger_dist($listes=''){
+	$valeurs = array(
+		'session_email' => ''
+	);
+
+	$valeurs['listes'] = explode(',',$listes);
+	$valeurs['_listes_dispo'] = mailsubscribers_listes();
+
+	if (isset($GLOBALS['visiteur_session']['email']))
+		$valeurs['session_email'] = $GLOBALS['visiteur_session']['email'];
+	elseif (isset($GLOBALS['visiteur_session']['session_email']))
+		$valeurs['session_email'] = $GLOBALS['visiteur_session']['session_email'];
+	return $valeurs;
+}
+
+/**
+ * Verifier les champs postes et signaler d'eventuelles erreurs
+ */
+function formulaires_newsletter_subscribe_verifier_dist(){
+	$listes = _request('listes');
+	if ($listes AND is_array($listes))
+		set_request('listes',implode(',',$listes));
+	if (!$listes)
+		$listes = array();
+
+	$erreurs = array();
+	if (!$email = _request('session_email')){
+		$erreurs['session_email'] = _T('info_obligatoire');
+	}
+	else {
+		// verifier que l'email est valide
+		if (!email_valide($email))
+			$erreurs['session_email'] = _T('info_email_invalide');
+	}
+	if (count($erreurs))
+		set_request('listes',$listes);
+	return $erreurs;
+}
+
+/**
+ * Traiter les champs postes
+ */
+function formulaires_newsletter_subscribe_traiter_dist(){
+
+	// langue par defaut lors de l'inscription : la langue courante dans la page
+	$options = array('lang'=>$GLOBALS['spip_lang']);
+	$email = _request('session_email');
+	$listes = _request('listes');
+	if ($listes AND is_string($listes))
+		$listes = explode(',',$listes);
+	if ($listes AND is_array($listes) AND count($listes))
+		$options['listes'] = $listes;
+
+	$res = array(
+		'editable'=>true
+	);
+
+	$newsletter_subscribe = charger_fonction("subscribe","newsletter");
+	if ($newsletter_subscribe($email,$options)){
+		if (lire_config('mailsubscribers/double_optin',0))
+			$res['message_ok'] = _T('newsletter:subscribe_message_ok_confirm',array('email'=>"<b>$email</b>"));
+		else
+			$res['message_ok'] = _T('newsletter:subscribe_message_ok',array('email'=>"<b>$email</b>"));
+	}
+	else
+		$res['message_erreur'] = _T('mailsubscriber:erreur_technique_subscribe');
+	set_request('email');
+	return $res;
+}