diff --git a/modules/liste_newsletter/widgets/opt-out.php b/modules/liste_newsletter/widgets/opt-out.php
new file mode 100644
index 000000000..9066f5f62
--- /dev/null
+++ b/modules/liste_newsletter/widgets/opt-out.php
@@ -0,0 +1,121 @@
+.
+ */
+
+include_once __DIR__.'/../../../core.php';
+
+use API\Services;
+use Carbon\Carbon;
+use Models\Module;
+use Modules\Anagrafiche\Anagrafica;
+use Modules\Anagrafiche\Referente;
+use Modules\Anagrafiche\Sede;
+
+$servizio_abilitato = Services::isEnabled() && Services::verificaRisorsaAttiva('Servizio Newsletter');
+
+if (!empty($is_title_request)) {
+ echo tr('Notifiche interne');
+
+ return;
+}
+
+if (!empty($is_number_request)) {
+ echo '
+ '.(
+ $servizio_abilitato ?
+ tr('Clicca qui per avviare la sincronizzazione con il servizio esterno la gestione dei dsiscritti') :
+ tr('Servizio non abilitato')
+ ).'
+ ';
+
+ return;
+}
+
+// Avviso di servizio non abilitato
+if (!$servizio_abilitato){
+ echo '
+
+ '.tr('Servizio non abilitato: contatta gli sviluppatori ufficiali per la gestione delle Newsletter tramite servizio esterno').'.
+
';
+
+ return;
+}
+
+$response = Services::request('GET', 'opt-out');
+$response = Services::responseBody($response);
+
+// Individuazione email interessate
+$email_disiscritte = collect($response['emails']);
+
+// Ricerca dei riferimenti locali collegati alle email
+$anagrafiche = Anagrafica::whereIn('email', $email_disiscritte)
+ ->where('enable_newsletter', '=', true)
+ ->get();
+
+$sedi = Sede::whereIn('email', $email_disiscritte)
+ ->where('enable_newsletter', '=', true)
+ ->get();
+
+$referenti = Referente::whereIn('email', $email_disiscritte)
+ ->where('enable_newsletter', '=', true)
+ ->get();
+
+$destinatari = $anagrafiche
+ ->concat($sedi)
+ ->concat($referenti);
+
+// Messaggio informativo di nessun utente disiscritto rispetto alla sincronizzazione precedente
+if ($destinatari->count() == 0) {
+ echo '
+'.tr('Non ci sono nuovi utenti disiscritti dal servizio di newsletter').'.
';
+
+ return;
+}
+
+// Elenco dei nuovi utenti disiscritti
+echo '
+'.tr("I seguenti utenti si sono disiscritti dalla newsletter dall'ultima sincronizzazione").'
+
+
+ '.tr('Anagrafica').' |
+ '.tr('Email').' |
+
';
+
+ foreach ($destinatari as $destinatario) {
+ // Aggiornamento iscrizione locale
+ $destinatario->enable_newsletter = false;
+ $destinatario->save();
+
+ $anagrafica = $destinatario instanceof Anagrafica ? $destinatario : $destinatario->anagrafica;
+ $descrizione = $anagrafica->ragione_sociale;
+
+ if ($destinatario instanceof Sede) {
+ $descrizione .= ' ['.$destinatario->nomesede.']';
+ } elseif ($destinatario instanceof Referente) {
+ $descrizione .= ' ['.$destinatario->nome.']';
+ }
+
+ echo '
+
+ '.$descrizione.' |
+ '.$destinatario->email.' |
+
';
+}
+
+echo '
+
';
diff --git a/update/2_4_27.sql b/update/2_4_27.sql
index 94326e26a..92e83a30d 100644
--- a/update/2_4_27.sql
+++ b/update/2_4_27.sql
@@ -13,3 +13,6 @@ UPDATE `zz_cache` SET `valid_time` = '1 day' WHERE `zz_cache`.`name` = 'Informaz
-- Ordinamento righe intervento
ALTER TABLE `in_righe_interventi` ADD `order` INT NOT NULL AFTER `idsede_partenza`;
+
+-- Aggiunta widget per la sincronizzazione esterna delle liste newsletter
+INSERT INTO `zz_widgets` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`) VALUES (NULL, 'Sincronizzazione disiscritti', 'custom', (SELECT `id` FROM `zz_modules` WHERE `name` = 'Liste newsletter'), 'controller_top', 'col-md-12', NULL, '#4ccc4c', 'fa fa-envelope ', '', './modules/liste_newsletter/widgets/opt-out.php', 'popup', './modules/liste_newsletter/widgets/opt-out.php', 'Sincronizza disiscritti dal servizio esterno', '0', '1');