diff --git a/application/modules/opac/controllers/AuthController.php b/application/modules/opac/controllers/AuthController.php
index 740c478b4a58b9afa148341602ab2ecc21aa8411..bd078d671c276a582ddde9b2f5bab81f42241b81 100644
--- a/application/modules/opac/controllers/AuthController.php
+++ b/application/modules/opac/controllers/AuthController.php
@@ -249,13 +249,13 @@ class AuthController extends ZendAfi_Controller_Action {
 
 	public function newsletterRegisterAction() {
 		if('' != $this->_request->getParam('emailCheck'))
-			$this->_redirect('/');
+			return $this->_redirect('/');
 		
-		if(!$id_newsletter = $this->_request->getParam('id'))
-			$this->_redirect('/');
+		if(!($id_newsletter = $this->_request->getParam('id')))
+			return $this->_redirect('/');
 
-		if(!$newsletter = Class_Newsletter::find($id_newsletter))
-			$this->_redirect('/');
+		if(!($newsletter = Class_Newsletter::find($id_newsletter)))
+			return $this->_redirect('/');
 
 		$this->view->titre = $this->view->_('Inscription à la newsletter: ') . $newsletter->getTitre();
 		$this->view->error = '';
@@ -291,6 +291,28 @@ class AuthController extends ZendAfi_Controller_Action {
 	}
 
 
+	public function newsletterActiveUserAction() {
+		if(!($key = $this->_request->getParam('c')) || !($id_newsletter = $this->_request->getParam('id')))
+			return $this->_redirect('/');
+
+		if(!$newsletter = Class_Newsletter::find($id_newsletter))
+			return $this->_redirect('/');
+
+		$this->view->titre = $this->view->_("Confirmation d'inscription à la newsletter: ").$newsletter->getTitre();
+		($user = Class_UsersNonValid::activateForNewsletterBy($key)) 
+			? $this->newsletterRegisterUser($newsletter, $user) 
+			: $this->view->message =  $this->view->_("Inscription à la newsletter invalide.");
+	}
+
+	
+	protected function newsletterRegisterUser($newsletter, $user) {
+		
+		Class_NewsletterSubscription::newWith($newsletter, $user) 
+			?	$this->view->message = $this->view->_('Vous avez bien été abonné à la newsletter: ').$newsletter->getTitre().$this->view->_(' avec l\'adresse suivante: ').$user->getMail()
+			: $this->view->message = $this->view->_('Erreur lors de l\inscription à la newsletter.');
+	}
+
+
 	public function generatecaptchaAction() {
 		$md5_hash = md5(rand(0,999));
 		$security_code = substr($md5_hash, 15, 5);
diff --git a/application/modules/opac/views/scripts/auth/newsletter-active-user.phtml b/application/modules/opac/views/scripts/auth/newsletter-active-user.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..e923bb9ac75cdd0a3d049020d909fa429b527eea
--- /dev/null
+++ b/application/modules/opac/views/scripts/auth/newsletter-active-user.phtml
@@ -0,0 +1,5 @@
+<?php	
+$this->openBoite($this->titre);
+echo $this->tag('p', $this->message);
+echo $this->closeBoite(); 
+?>
diff --git a/library/Class/Users.php b/library/Class/Users.php
index b97f56e47430ae11bbfe48fae167c22e7f349c50..6d758b066523481116b1bd6f1f871a7caf88fd33 100644
--- a/library/Class/Users.php
+++ b/library/Class/Users.php
@@ -960,7 +960,7 @@ class Class_Users extends Storm_Model_Abstract {
 		$message_mail=[];
 		$message_mail[]=$this->_("Bonjour,");
 		$message_mail[]=$this->_("Vous avez fait une demande d'inscription à la newsletter:").' '.$newsletter->getTitre();
-		$message_mail[]=$this->_("Pour valider inscription, merci de cliquer sur le lien suivant:")." http://".$_SERVER["SERVER_NAME"].BASE_URL.'/opac/auth/newsletter-activeuser/c/'.$non_valid_user->getCle().'/id/'.$newsletter->getId();
+		$message_mail[]=$this->_("Pour valider inscription, merci de cliquer sur le lien suivant:")." http://".$_SERVER["SERVER_NAME"].BASE_URL.'/opac/auth/newsletter-active-user/c/'.$non_valid_user->getCle().'/id/'.$newsletter->getId();
 		$message_mail[]=$this->_("Si vous n'êtes pas à l'origine de cette demande d'inscription, merci de ne pas tenir compte de cet e-mail, et l'inscription ne sera pas activée.");
 
 		// envoi du mail de confirmation
diff --git a/library/Class/UsersNonValid.php b/library/Class/UsersNonValid.php
index 15e734a1ac69f83ed05b78b3655c6bf586bf6e2b..a50cd8f0004838b2248e6dafa6a3219fbc2c529e 100644
--- a/library/Class/UsersNonValid.php
+++ b/library/Class/UsersNonValid.php
@@ -25,6 +25,13 @@ class UsersNonValidLoader extends Storm_Model_Loader {
 			return false;
 		return $model->activate();
 	}
+
+
+	public function activateForNewsletterBy($key) {
+		if (!$model = Class_UsersNonValid::findFirstBy(['cle' => $key]))
+			return '';
+		return $model->activateForNewsletter();
+	}
 }
 
 
@@ -33,6 +40,8 @@ class Class_UsersNonValid extends Storm_Model_Abstract {
 	protected $_table_primary = 'ID_USER';
 	protected $_loader_class = 'UsersNonValidLoader';
 
+	protected $_user;
+
 	public function activate() {
 		$user = new Class_Users();
 		if (!$user
@@ -42,8 +51,14 @@ class Class_UsersNonValid extends Storm_Model_Abstract {
 				->save())
 			return false;
 
+		$this->_user = $user;
 		$this->delete();
 		return true;
 	}
+
+	
+	public function activateForNewsletter() {
+		return $this->activate() ? $this->_user: '';
+	}
 }
 ?>
\ No newline at end of file
diff --git a/tests/application/modules/opac/controllers/AuthControllerTest.php b/tests/application/modules/opac/controllers/AuthControllerTest.php
index c4ca0a3a7671fdcb5a924607e295c542f8f371d6..7f1fcb292a501130d5720f1a0cba49e48f9ce38e 100644
--- a/tests/application/modules/opac/controllers/AuthControllerTest.php
+++ b/tests/application/modules/opac/controllers/AuthControllerTest.php
@@ -1637,7 +1637,7 @@ class AuthControllerPostRegisterNewsletterDailyNewsTest extends AuthControllerNo
 
 	/** @test */
 	public function validationUrlShouldBeAsExpected() {
-		$this->assertContains('/opac/auth/newsletter-activeuser/c/de153b3ccb38a85b82097ab2de58717e/id/5', $this->getSentMailContent(), $this->getSentMailContent());
+		$this->assertContains('/opac/auth/newsletter-active-user/c/de153b3ccb38a85b82097ab2de58717e/id/5', $this->getSentMailContent(), $this->getSentMailContent());
 	}
 
 
@@ -1691,4 +1691,92 @@ class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailTest extends
 	}
 }
 
+
+
+class AuthControllerNewsletterActiveUserWithWrongParamsTest extends AuthControllerNoBodyLoggedTestCase {
+	public function setUp() {
+		parent::setUp();
+	}
+
+
+	/** @test */
+	public function noParamsShouldRedirectToIndex() {
+		$this->dispatch('opac/auth/newsletter-active-user', true);
+		$this->assertRedirectTo('/');
+	}
+
+
+	/** @test */
+	public function noKeySshouldRedirectToIndex() {
+		$this->dispatch('opac/auth/newsletter-active-user/id/5', true);
+		$this->assertRedirectTo('/');
+	}
+
+	
+	/** @test */
+	public function noNewsletterShouldRedirectToIndex() {
+		$this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf', true);
+		$this->assertRedirectTo('/');
+	}
+
+
+	/** @test */
+	public function wrongNewsletterShouldRedirectedToIndex() {
+		Class_Newsletter::beVolatile();
+		$this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf/id/1', true);
+		$this->assertRedirectTo('/');
+	}
+
+
+	/** @test */
+	public function wrongKeyShouldDisplayExpectedMessage() {
+		$this->fixture('Class_Newsletter',
+		['id' => 1,
+		'titre' => 'News of the month']);
+		
+		$this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf/id/1', true);
+		$this->assertXPathContentContains('//p', 'Inscription à la newsletter invalide.', $this->_response->getBody());
+	}
+}
+
+
+
+class AuthControllerNewsletterActiveUserTest extends AuthControllerNoBodyLoggedTestCase {
+	public function setUp() {
+		parent::setUp();
+
+		Class_NewsletterSubscription::beVolatile();
+		
+		$this->fixture('Class_Newsletter',[
+			'id' => 1,
+			'titre' => 'News of the month']);
+
+		$this->fixture('Class_UsersNonValid', [
+			'id' => 1,
+			'login' => 'future@i.am',
+			'mail' => 'future@i.am',
+			'password' => 'random',
+			'cle' => '12345678']);
+		
+		$this->dispatch('opac/auth/newsletter-active-user/c/12345678/id/1', true);
+	}
+	
+
+	/** @test */
+	public function userFutureShouldExist() {
+		$this->assertEquals('future@i.am', Class_Users::findFirstBy(['login' => 'future@i.am'])->getMail());
+	}
+
+
+	/** @test */
+	public function newsletterShouldHaveFutureAsSubscriber() {
+		$this->assertEquals('future@i.am', Class_NewsletterSubscription::find(1)->getUser()->getMail());
+	}
+
+
+	/** @test */
+	public function successMessageShouldBeAsExpected() {
+		$this->assertXPathContentContains('//p', "Vous avez bien été abonné à la newsletter: News of the month avec l'adresse suivante: future@i.am");
+	}
+}
 ?>
\ No newline at end of file