Rendere compatibili script php5 in php7

Può essere comune trovarsi nella condizione di eseguire software od in generale script php5 in php7 non avendo possibilità di aggiornare il codice, eseguire un refactoring o comunque intervenire in qualche modo. Sebbene PHP introduca con la versione 7 nuovi operatori, razionalizzazioni e miglioramenti, le caratteristiche che più si notano sicuramente fanno riferimento a funzioni od estensioni deprecate.

Usare script php5 in php7

Punti essenziali per usare script php5 in php7

Non esistono motivi specifici secondo i quali un software php scritto diversi anni fa non debba funzionare con un interprete recente, anzi in molti casi (es. utilizzo intensivo di tabelle hash) si riscontrano solo miglioramenti su tempi ed utilizzo di cicli.
In linea generale uno script php5 in php7 non dovrebbe avere problemi ad essere eseguito: probabilmente gli unici casi che si verificano in merito ad interruzioni ed errori riguardano script che utilizzano funzioni deprecate, in particolare quelle originate dalle estensioni mysql ed ereg.
Un comune caso è quello della presenza di collegamento a database senza utilizzare PDO, quindi già alla prima chiamata mysql_connect si incontra il primo ostacolo.

Possibili soluzioni con minimo impatto

L’ideale sarebbe potersi sbarazzare in modo definitivo delle chiamate alle funzioni superate, inefficienti e deprecate: nell’esempio preso in considerazione passare dalle chiamate alle funzioni di connessione MySQL alle funzioni o meglio classi disponibili attraverso PDO.

Se tuttavia non sia possibile o conveniente revisionare il codice od installare aggiornamenti, possono tornare utili due repository disponibili su github utili per “colmare la distanza” facendo da tatto di unione tra software legacy e versioni recenti degli interpreti.

Per le funzioni derivate da ereg, Björn Brala ha pubblicato php7-ereg-shim.

Nel caso di intervento su codice che utilizza funzioni di connessione instaurate direttamente con l’estensione MySQL Davey Shafik ha reso disponibile il pacchetto php7-mysql-shim, questo ultimo disponibile anche in composer integrabile con il classico comando

composer require dshafik/php7-mysql-shim

Column count of mysql user is wrong: soluzione al problema

Sebbene la comparsa di nuove versioni MySQL è sempre stata contenuta, non è possibile contenere completamente disagi e comparsa di errori come Column count of mysql user is wrong o simili successivi a necessari aggiornamenti al software di database ed alle dipendenze.
L’aspetto da tenere in ulteriore considerazione è anche quello dell’esistenza di configurazioni non omogenee, quindi la libertà di poter raggiungere la propria configurazione di riferimento significa dover fare scelte differenti al momento dell’installazione e in occasione degli aggiornamenti.

Column count of mysql user is wrong: cosa fare quando compare questo errore

Perché compare l’errore Column count of mysql user is wrong

Come citato, la configurazione MySQL di un sistema è il risultato di scelte di installazione ed aggiornamento del software di database, di librerie e dipendenze, attività di migrazione da sistemi ereditati. È proprio questo ultimo scenario la combinazione più probabile che espone all’errore focalizzato in questo articolo: versioni differenti del motore MySQL introducono meccanismi diversi di privilegi e permessi, specialmente tra generazioni major distanti.

Questo problema si riesce per esempio a replicare quando dati storici non vengono esportati in uscita con mysqldump, oppure il lancio di un comando GRANT produce un errore.

Sistemare le tabelle dei privilegi per la versione corrente

MySQL mette a disposizione il programma mysql_upgrade (già mysql_fix_privileges_table ) per questo scopo.

Dopo aver salvaguardato i dati con una copia di sicurezza, è possibile lanciare tale comando come se si trattasse del programma “client” mysql ovvero:

mysql_upgrade -uroot -p

ottenendo un risultato simile al seguente

[root@carbonio ~]# mysql_upgrade -uroot -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck'...
bh1.categorie OK
bh1.contact_requests OK
bh1.origine_dati OK
bh1.sotto_categorie OK
bh1.super_categorie OK
impiego.dump OK
impiego.offerte OK
mysql.columns_priv OK
mysql.db OK
mysql.func OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.proc OK
mysql.procs_priv OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
web.config OK
Running 'mysql_fix_privilege_tables'...
OK
[root@carbonio ~]#

Sono disponibili alcune direttive ulteriori per un utilizzo avanzato, consultabili attraverso il man del comando.

Usare l’adattatore Gigabit USB AmazonBasics in macOS

Avendolo acquistato da un po’ di tempo e volendolo comunque utilizzare, l’adattatore Gigabit USB AmazonBasics in macOS Sierra rispetto alle versioni OSX precedenti non mi veniva più riconosciuto correttamente.

Seppur il prodotto non manca di essere spedito con materiale cartaceo e media di supporto essenziali, il software ed i driver presenti non sembrano consentirti di poter utilizzare l’adattatore correttamente, ed è come se il dispositivo nemmeno si alimentasse.

Ho cercato di trovare una soluzione ed ho raccolto in questo articolo il metodo per poter tornare ad utilizzarlo su un sistema macOS.

L'adattatore gigabit usb AmazonBasics in macOS non viene identificato con il software in dotazione

Identificare l’adattatore Gigabit USB AmazonBasics in macOS

La strada per la soluzione  percorsa è stata quella di cercare intanto del software aggiornato, ma partendo dalla scheda dell’adattatore Gigabit USB AmazonBasics non ho avuto molta fortuna.

Analizzando meglio le informazioni stampate anche sulla superficie del dispositivo, si può leggere che questa versione è basata sul semiconduttore AX88179 prodotto dall’azienda taiwanese ASIX.

Quindi è necessario prelevare il software direttamente dall’azienda produttrice del chipset, che oltre ad elencare le caratteristiche dei propri prodotti, consente il download dei software di supporto direttamente dal proprio sito: il driver disponibile è compatibile dalla versione di sistema operativo 10.6 a 10.12 quindi Sierra.

AX88179 — USB3.0 to 10/100/1000M Gigabit Ethernet Controller

L’archivio include un PDF che indica i passaggi da seguire ed il DMG con il volume contenente l’installazione, che si è svolta senza intoppi.

Bonus: ottenere una lista dei dispositivi USB, come lsusb su Linux

Per una verifica piuttosto veloce, ho cercato di capire inizialmente se l’adattatore fosse disponibile all’interno del sistema operativo a basso livello, ed essendo abituato a lavorare con Linux ho da subito pensato ad eseguire lsusb da terminale, ma in macOS non esiste.

Ed ovviamente qualcuno della comunità ci ha già pensato ed ha realizzato un programma equivalente, installabile attraverso homebrew, disponibile in github all’indirizzo https://github.com/jlhonora/lsusb.

Acquistare un nuovo switch di rete / Cronaca di un aggiornamento EP1

Suggerimento: lo switch Netgear GSS116E è disponibile su Amazon.it

Nonostante la buona qualità e l’affidabilità degli apparati presenti, ho avuto la necessità di effettuare l’acquisto di un nuovo switch di rete per una postazione di lavoro. L’apparato presente è uno switch a 5 porte Fast Ethernet  10/100 auto MDI-X  Allied Telesyn (adesso Allies Telesys) FS705.

Pro e Contro del FS705 e motivi dell’acquisto del nuovo switch di rete

Seppur funzionante da oltre 15 anni, ho avvertito la necessità di un upgrade nel tempo principalmente  per via del numero ridotto di porte: infatti l’affiancamento anche temporaneo di nuove macchine con necessità di collegamento LAN ha richiesto permutazioni di cavi o l’introduzione di switch a cascata, sottratti da altri utilizzi; secondariamente la velocità ridotta delle porte rappresenta un debito durante i backup e i trasferimenti di file che chiedono tempi elevati.

Tuttavia l’interesse è poter mantenere molti degli altri pregi tra i quali alimentatore integrato, silenziosità, rivestimento metallico, montaggio su parete da individuare nella scelta dell’acquisto di un nuovo prodotto.

Il nuovo switch di rete: Netgear GSS116E

La scelta del GSS116E

Per la sostituzione, ho individuato come candidato il Netgear GSS116E che si rivela avere tutte le opzioni che stavo cercando ed addirittura altri vantaggi principalmente di carattere pratico.

Il passaggio generazionale da porte Fast Ethernet a Gigabit e l’aumento da 5 unità a 16 è stato davvero una svolta, con l’unico “sacrificio” visibile del raddoppio dell’ingombro.

Le altre caratteristiche che l’installazione mantiene sono il corpo esterno in metallo, l’assenza di ventoline e l’alimentatore interno: come primo bonus il cordone di alimentazione è frontale e posizionabile sia in asse che ortogonalmente rispetto  alla vista anteriore dello switch.

Un’altra qualità che ha condizionato la scelta dell’acquisto del nuovo switch di rete Netgear è quella relativa alla tecnologia di installazione che l’azienda identifica come Virtually Anywhere, che combinabile in 8 diversi scenari permette una estrema versatilità di installazione sia su superficie che attorno a cilindri tipo pali o torrette.

Il GSS116E prevede anche una gestione via web per configurare caratteristiche evolute tipo VLAN, QOS e trunking: se per il momento la configurazione di provenienza non le stava utilizzando, sicuramente potranno essere utili in una futura ottimizzazione di configurazione.

Attivare VPN per siti specifici su Windows e macOS

Nel caso di utilizzo di servizi tipo Hide My Ass può giungere ad un momento la necessità di attivare VPN per siti specifici, lasciando che il traffico rimanente non sia influenzato dall’instradamento.

È possibile intervenire sui file di configurazione delle singole connessioni per ottenere facilmente questo comportamento.

Gli scenari sono applicati utilizzando un’account Hide My Ass, ma valgono per qualsiasi altro servizio VPN compatibile.

Come attivare VPN per siti specifici

Attivare VPN per siti specifici su Windows

Prima di poter personalizzare le configurazioni, è necessario installare OpenVPN; il software è disponibile all’indirizzo seguente

http://swupdate.openvpn.net/privatetunnel/client/privatetunnel-win-2.8.exe

pertanto la procedura è quella di un setup tradizionale (che include un riavvio in quanto viene aggiunta una interfaccia di rete).

Terminata l’installazione, è necessario raggiungere la cartella che conserva gli script di configurazione *.ovpn per poter modificare quelli oggetto dell’intervento di questo articolo.

Se nel caso di Hide My Ass non è ancora stato utilizzato alcuno script, sul sito sono disponibili gli script di configurazione da poter importare nel vostro setup.

Il triggering che consente l’instradamento verso la VPN per indirizzi specifici è attivato con l’inserimento delle seguenti direttive

route-nopull
route 1.2.3.4

dove al posto di 1.2.3.4 va indicato l’indirizzo IP del server da raggiungere via VPN; la seconda direttiva può essere ripetuta per indicare valori multipli.

Attivare VPN per siti specifici su macOS

In macOS per connettersi a VPN via script si può utilizzare Tunnelblick disponibile all’indirizzo seguente

https://tunnelblick.net/release/Tunnelblick_3.7.0_build_4790.dmg

ed allo stesso modo di OpenVPN c’è un setup completo da effettuare prima di poter connettersi a Hide My Ass. In questo caso i file *.ovpn possono essere gli stessi, ma Tunnelblick li deve prima processare; per reimpostare un file di configurazione, si può trascinare sopra l’icona del programma presente nella barra di stato.

In modo simile a quanto scritto per Windows, anche in macOS vanno inserite le direttive

route-nopull
route 1.2.3.4

e rinfrescate le configurazioni in Tunnelblick.

Se compare l’avviso che l’IP pubblico non cambia

Se il client avvisa che dopo essersi connessi alla VPN l’indirizzo IP pubblico non è cambiato, è “normale”.

Ovvero: l’instradamento è avvenuto solamente verso gli indirizzi IP inclusi nello script. Infatti se possibile effettuare un monitoraggio verso un servizio che si controlla ed inserito nelle direttive, si vedrà che le connessioni provengono effettivamente dall’indirizzo IP del network VPN.

Attivare l’interfaccia classica di Firebug in Firefox

Gli aggiornamenti software sono sempre fondamentali, anche se qualche volta ci sono alcune interruzioni drastiche come quando l’interfaccia classica di Firebug in Firefox è stata incorporata per via di una maggiore integrazione degli strumenti all’interno del programma principale.

Inoltre, alcuni moduli aggiuntivi di Firebug se utili nel quotidiano, non sono più disponibili e di conseguenza utilizzabili: lasciamo da parte i capricci (da come si può vedere dai commenti negativi sulla sezione componenti aggiuntivi di Firefox al limite della frustrazione ci sono grandi talenti in arte drammatica tra gli utenti di Firebug) e ripristiniamo la situazione con dei consigli pratici applicabili facilmente.

L'interfaccia classica di Firebug in Firefox si recupera modificando about:config

Recuperare l’interfaccia classica di Firebug in Firefox modificando la configurazione

Evitate di effettuare tentativi di rimozione e di reinstallazione di Firebuo o peggio di Firefox.

La strada percorribile per ottenere il ripristino dell’interfaccia classica di Firebug in Firefox è la modifica della configurazione attraverso l’accesso ad about:config.

Le chiavi da individuare sono le seguenti

browser.tabs.remote.autostart
browser.tabs.remote.autostart.1
browser.tabs.remote.autostart.2

e vanno reimpostate a false per tornare ad utilizzare Firebug come prima.

Conviene continuare ad utilizzare Firebug?

Risposta breve: no.

Lo sviluppo del progetto Firebug è arrestato, e la versione attuale non supporta i processi multipli, pertanto l’utilizzo è fortemente scoraggiato e Mozilla promuove l’utilizzo dei DevTools in sostituzione (anche se non si ottengono proprio le funzionalità identiche di Firebug).

La previsione è quella di far convergere l’utenza verso l’adozione degli strumenti integrati, visto anche i numerosi sforzi di porting anche dei moduli aggiuntivi che hanno contribuito al successo di Firebug.

Questo stato di grazia arriverà comunque ad una fine, fino a che la modalità di multi processo potrà forzatamente essere disattivata.

Versioni multiple di Node.js: installazione e gestione

Per postazioni dedicate allo sviluppo od ambienti di staging, o più semplicemente riuscire ad utilizzare versioni multiple di Node.js su una macchina o si crea una soluzione personale oppure si adotta un approccio condiviso dalla comunità. Essendo l’argomento di esigenza diffusa, sono già presenti delle proposte che possiamo utilizzare per le nostre esigenze, potendo ulteriormente dare un contributo comunicando la nostra esperienza e pubblicare le nostre migliorie se riusciamo ad ottimizzare il software che abbiamo adottato.

Gestire versioni multiple di Node.js con nvm

Node Version Manager è un software scritto in Bash che semplifica la gestione di versioni multiple di Node.js in modo minimale su Linux ed OSX. L’installazione e l’aggiornamento possono essere lanciati con

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash

verificando l’esito in una nuova sessione, che renderà disponibile nvm come funzione di shell (ed in background recupererà i file dal repository di origine per utilizzarli in ~/.nvm).

Per conoscere l’elenco delle versioni installabili, si può lanciare la sintassi

nvm ls-remote

e vedere la vasità delle diverse versioni disponibili.

versioni multiple di node.js disponibili in remoto

Ad esempio, se sulla macchina voglia installare la versione LTS più recente (al momento della prima stesura dell’articolo v4.6.0) è possibile lanciare il comando

nvm install 4.6.0

che si preoccuperà di recuperare la versione richiesta, ed in caso di prima installazione, di creare anche l’alias predefinito. Quindi lanciando node -v sarà tornata il codice di versione appena installata; con nvm ls saranno tornate le versioni e gli alias disponibili globalmente e gestibili attraverso nvm.

Per attivare versioni differenti, l’opzione da usare è use: se quindi nel frattempo abbiamo installato la versione v6.7.0 contenente delle funzionalità più recenti rispetto alla precedente, in comando da utilizzare è

nvm use 6.7.0

dato che il supporto è anche valido per alias e visto che per questo scenario la versione v4.6.0 è l’ultima stabile, si può tornare alla versione precedente lanciando

nvm use stable

Essendo un prodotto opensource, è possibile contribuire al miglioramento di nvm attraverso GitHub.

Aggiornamento di UCM6102 Grandstream IPPBX

La procedura di aggiornamento di UCM6102 (un IPPBX prodotto da Grandstream idoneo per la fascia aziendale medio-piccola) è come ogni operazione di aggiornamento di sistemi, consigliata da eseguire per motivi di sicurezza ed utile in quanto aggiunge nuove funzioni rispetto alla versione di base soprattutto per sistemi entrati in funzione da diversi mesi.

Aggiornamento di UCM6102: preparazione

Preparazione all’aggiornamento di UCM6102

Tra i primi consigli propedeutici all’attività, inserirei la pianificazione per l’esecuzione delle procedure durante orari con la minima attività telefonica (dipendente dalla tipologia di industria di riferimento dell’azienda), disporre di una penna USB per la copia delle configurazioni durante l’aggiornamento di UCM6102 ed il recupero delle immagini firmware dal sito del produttore.
Il sistema utilizzato per la supervisione può indifferentemente essere Linux/OSX/Windows, consiglio tuttavia l’impiego di un portatile ed una connessione via rame allo stesso segmento di rete dell’IPPBX: anche se superfluo scriverlo, non sono previsti riavvii da avviare manualmente durante i passaggi se non quando indicato.

Dal momento che i passaggi sono dipendenti dallo stato attuale, per l’appliance in esame la versione di partenza è la 1.0.6.10: l’informazione è visibile dalla vista di stato generale del sistema, raggiungibile dalla schermata di amministrazione.

L'aggiornamento di UCM6102 dipende dalla versione attuale

Infatti questo UCM6102 andrà aggiornato per versioni rilasciate in successione come pietre miliari; la prima verso la versione 1.0.9.97 (file Release_UCM61xx_1.0.9.97/ucm6100fw.bin).

Poi si passa alla versione 1.0.10.44 con l’uso della chiave USB, divisa tra repository vergine (prima Release_UCM61xx_1.0.10.44/ucm6100dpt.bin) in modalità di ricovero e firmware effettivo (file Release_UCM61xx_1.0.10.44/ucm6100fw.bin). Si noterà infatti nel frattempo la versione di boot incrementata rispetto al firmware.

Il recovery mode durante l'aggiornamento di UCM6102

Per individuare l’indirizzo a cui accedere per l’interfaccia di ricovero, aiutatevi leggendo l’informazione direttamente sul display dell’UCM6102.

Il firmware 1.0.10.44 caricato prima del riavvio

Solamente una volta notificato il caricamento del firmware 1.0.10.44, si può lanciare reboot.

Il passaggio verso 1.0.11.27 è ancora una volta più semplice, quindi si va a caricare il firmware (file Release_UCM61xx_1.0.11.27/ucm6100fw.bin) da Manutenzione > Aggiorna > Aggiornamento locale ed a procedura conclusa il UCM6102 sarà aggiornato all’ultima versione e con nuove funzionalità disponibili per il vostro lavoro e migliorare il servizio per i vostri clienti.

Spostare posta POP3 in IMAP con script Perl

Quando non si può scegliere IMAP per alcuni scenari di migrazione, e l’accesso per spostare posta POP3 è l’unica opzione, le informazioni dell’articolo Migrare posta tra server, via IMAP e POP3 possono essere integrate utilizzando un ulteriore software.

spostare posta pop3 con script perl

Spostare posta POP3 con pop3toimap.pl

Prendiamo in esame il kit fornito da IMAP Tools che consiste di una raccolta di programmi in Perl per la gestione della posta elettronica.

Tra i software messi a disposizione, quello da dover utilizzare è pop3toimap.pl che accetta da linea di comando le opzioni dove specificare direttamente le credenziali della casella POP3 e quelle per l’accesso IMAP:

pop3toimap.pl -p pop.server.com/utente@server.com/passPOP3 -i imap.server.com/utente@server.com/passIMAP

La sintassi alternativa da utilizzare è prevista attraverso il supporto di un file contenenti una coppia o più di credenziali, indicata in righe separate all’interno di un file di testo semplice con una sintassi fissa

popUsername password imapUsername password

che ovviamente è utile in caso di migrazioni multi utenza, con gli stessi server

pop3toimap.pl -p pop.server.com -i imap.server.com -u file_credenziali_utenti

Alcune versioni precedenti possono presentare un errore logico del codice Perl (correggibile mediante un piccolo fix a parte del codice che cicla la lettura delle mailbox), ma potendo contare sulla versione aggiornata del team di sviluppo il problema non si presenta.

Oltre il singolo script, può essere interessante consultare la guida completa all’uso: infatti visto i diversi software disponibili può essere interessante richiedere la suite completa nel caso durante la propria attività quotidiana si possa avere bisogno di soluzioni già messe a disposizione e pronte per l’utilizzo.

Errore 550 di outlook.com: soluzione al problema SC-001

A seguito di monitoraggio proattivo di una infrastruttura dedicata al servizio di posta elettronica, si presentano eventi aggressivi di blocco in invio di messaggi di posta elettronica ed è comune trovarsi di fronte ad un errore 550 di outlook.com che si presenta come un rifiuto a prendere in carico email indirizzate ai clienti Microsoft.

Essendo assolutamente legittimo per l’azienda tutelare l’efficenza della consegna di posta elettronica privilegiando fonti con la migliore reputazione possibile, sembra che in alcune occasioni sia davvero restrittiva. Infatti la tecnologia SmartScreen oltre ad effettuare controlli comuni verso dominio, indirizzo IP, DNS, SPF, DKIM, DMARC, oggetto, contenuto, liste di reputazione condivise, valutazione dei reclami mette in campo altre azioni proprietarie. Sebbene nella sezione di risoluzione dei problemi del sito Postmaster di oulook.com presenti delle opzioni comuni da poter verificare, non aiuta nella soluzione del caso particolare.

errore 550 di outlook.com visibile come estratto ritornato da postfix

Errore 550 di outlook.com del tipo SC-001

Nell’estratto di una email d’esempio, il tentativo di inoltrare ad outlook.com qualsiasi messaggio viene bloccato ed il MAILER DAEMON in questo caso presenziato da un setup Postfix comunica il fallimento. Il dettaglio del codice richiamato riporta:

550 SC-001 Messaggio rifiutato da Outlook.com per conformità ai criteri. I motivi del rifiuto possono essere correlati a contenuti con caratteristiche di posta indesiderata o alla reputazione dell’IP o del dominio. Se non sei l’amministratore della rete o della posta elettronica, contatta il tuo provider di servizi Internet o di posta elettronica per assistenza.

Il prossimo passo è stato quindi della richiesta di un accesso allo strumento Smart Network Data Service che consente praticamente di vedere il punto di vista interno ad outlook.com per specifici domini/IP/utenti che intendono comunicare con la loro rete. Compilando il modulo dentro Request Access si ottiene il privilegio di poter consultare, anche in modalità automatica, i dati in View Data per avere già indicazioni di complaints e catture delle spamtrap.

errore 550 di outlook.com non dipendente da spam trap

Va detto che la procedura è riservata a chi ha in carico una rete di indirizzamento assegnata via RIPE o attraverso LIR e la procedura interrogherà il database per l’indirizzo IP, CIDR o ASN quindi per esempio tra i destinatari possibili si troveranno i contatti di postmaster e di abuse.

Contattare il team Outlook.com Deliverability

Visto che lo scenario specifico per l’errore 550 di outlook.com non è aggredibile con queste informazioni, si passa alla sezione View IP Status che putroppo segnala la rete “Blocked due to user complaints or other evidence of spamming”: visto che il filtro SmartScreen è attivo anche per indirizzi IP che non gestiscono posta, è evidente un’opzione aggressiva che si presume attivato per una rete CIDR che intercetta anche la nostra (e magari le lamentele provengono da indirizzi contigui non a nostro carico).

A questo punto è importante chiedere assistenza al team Outlook.com Deliverability Support fornendo maggiori dettagli possibile sull’attuale situazione presentando la vostra disponibilità alla collaborazione ed i ringraziamenti di rito.

Per l’ultimo evento esaminato, vista la bontà dello stack tecnologico gestito e la mancanza di motivazioni oggettive che giustificasse il filtro, la segnalazione è stata subito gestita da Microsoft che ha pianificato l’inserimento della classe in stato Conditionally mitigated.

Il risultato è stato apprezzabile in 4 ore, dopo le quali gli invii di posta elettronica destinati ai clienti outlook.com sono stati nuovamente gestiti da Microsoft.