Exchange Online: come risolvere l’errore “Exception has been thrown by the target of an invocation” nella configurazione dei messaggi Fuori sede (OOO)

Da gennaio 2024 molti amministratori vedono l’errore “Exception has been thrown by the target of an invocation” quando provano a impostare o modificare i messaggi Fuori sede (OOO) di altri utenti in Exchange Online. Questa guida spiega cause, stato, workaround affidabili e script pronti all’uso.

Indice

Panoramica del problema

Dall’inizio di gennaio 2024, su più tenant Microsoft 365 è stato osservato un malfunzionamento lato servizio che impedisce agli amministratori di impostare o cambiare i messaggi Fuori sede (OOO) per conto degli utenti tramite alcune interfacce legacy. La procedura si interrompe con l’errore generico:

Exception has been thrown by the target of an invocation

L’anomalia si verifica in particolare quando si agisce attraverso:

  • Outlook on the Web (OWA)
  • Classic Exchange Control Panel (ECP)
  • “Visualizza un’altra cassetta postale” in Security & Compliance / EOP

Poiché lo stesso comportamento è stato riscontrato su tenant diversi, la causa è da attribuire a una service degradation del back‑end di Exchange Online combinata con la deprecazione della console classica ECP.

Perché compare proprio questo errore?

Il messaggio “Exception has been thrown by the target of an invocation” è un’eccezione .NET generica che spesso indica un’eccezione non gestita emersa durante una chiamata indiretta (reflection) a un’API di servizio. In scenari Exchange Online, può emergere quando l’UI tenta di invocare un’operazione (es. aggiornamento di MailboxAutoReplyConfiguration) su componenti legacy o percorsi API che non riescono a completare correttamente per cambiamenti lato servizio, permessi incompleti, o dipendenze deprecate.

In questo specifico incidente, gli indizi operativi convergono su due fattori:

  1. Service degradation su componenti back‑end che gestiscono l’OOO in modalità delegata o cross‑mailbox.
  2. Deprecazione del Classic ECP: richieste inviate tramite superfici non più supportate possono essere rigettate o fallire in modo non deterministico.

Stato della correzione e impatto sul supporto

  • Microsoft è a conoscenza del problema e lavora a una risoluzione definitiva lato servizio.
  • Classic ECP è deprecato: i ticket aperti su quella superficie possono essere chiusi come “fuori ambito” o indirizzati verso piani di supporto diversi (Unified o a pagamento) per analisi approfondite.
  • Sulle superfici moderne (Modern EAC, cmdlet EXO v3.4.0) l’operazione è risultata consistente e affidabile.

Soluzioni e workaround consigliati

<div class="table-wrapper">
  <table>
    <thead>
      <tr>
        <th>Metodo</th>
        <th>Funziona?</th>
        <th>Note operative</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><strong>Modern Exchange Admin Center (EAC)</strong> → Recipients ► Mailboxes ► <em>seleziona utente</em> ► Others ► <em>Manage automatic replies</em></td>
        <td>✅</td>
        <td>Confermato funzionare su tutti i tenant testati.</td>
      </tr>
      <tr>
        <td><strong>Microsoft 365 Admin Center</strong> → Utenti attivi ► <em>seleziona utente</em> ► Scheda <em>Mail</em> ► <em>Gestisci risposte automatiche</em></td>
        <td>✅*</td>
        <td>Funziona se <u>non</u> è già presente un OOO. Se esiste un OOO pregresso, può restituire lo stesso errore.</td>
      </tr>
      <tr>
        <td><strong>PowerShell</strong> (Exchange Online Management v3.4.0)</td>
        <td>✅</td>
        <td>Metodo più flessibile e affidabile, anche per operazioni massive.</td>
      </tr>
      <tr>
        <td><strong>Classic ECP / OWA</strong> (incl. “Visualizza un’altra cassetta postale”)</td>
        <td>❌</td>
        <td>Inaffidabile: genera l’eccezione. Evitare finché Microsoft non completa il ripristino.</td>
      </tr>
    </tbody>
  </table>
</div>

<p><small>* Se l’errore persiste dal M365 Admin Center, passare al Modern EAC o a PowerShell.</small></p>

Guida passo‑passo: Modern EAC

  1. Apri il Modern Exchange Admin Center.
  2. Vai su Recipients > Mailboxes.
  3. Seleziona la cassetta postale dell’utente.
  4. Apri la scheda Others (o dettagli equivalenti) e scegli Manage automatic replies.
  5. Imposta Internal message e External message, decidi l’audience esterna (All o Known contacts) e valuta se pianificare un intervallo con orario di inizio/fine.
  6. Salva. Verifica con un invio di prova da un account esterno/interno.

Nota: molte interfacce moderne non impostano una data di fine di default. Se vuoi evitare OOO “perpetui”, definisci sempre un periodo, oppure pianifica un’attività di disattivazione al rientro dell’utente.

PowerShell: comandi rapidi e sicuri

<h3>Prerequisiti</h3>
<ul>
  <li>Modulo <strong>ExchangeOnlineManagement</strong> versione <strong>3.4.0</strong> o successiva consigliata.</li>
  <li>Permessi adeguati (Exchange Administrator o un ruolo personalizzato che includa la gestione delle opzioni utente).</li>
</ul>

<h3>Connessione ed attivazione OOO di base</h3>
<pre><code>Install-Module ExchangeOnlineManagement -ReqVersion 3.4.0

Connect-ExchangeOnline -UserPrincipalName [admin@tenant.com](mailto:admin@tenant.com) Set-MailboxAutoReplyConfiguration ` -Identity utente@contoso.com` -AutoReplyState Enabled ` -InternalMessage “Messaggio interno”` -ExternalMessage “Messaggio esterno” ` -ExternalAudience All

<h3>Impostare una finestra temporale (start/end)</h3>
<pre><code>$start = Get-Date "2024-08-05 18:00"

$end = Get-Date “2024-08-26 09:00” Set-MailboxAutoReplyConfiguration ` -Identity utente@contoso.com` -AutoReplyState Scheduled ` -StartTime $start` -EndTime $end ` -InternalMessage “Sarò assente fino al 26/08. Per urgenze: <strong>helpdesk@contoso.com</strong>.”` -ExternalMessage “Out of office fino al 26/08. Contattare [info@contoso.com](mailto:info@contoso.com).” ` -ExternalAudience All

<h3>Disattivare rapidamente le risposte automatiche</h3>
Set-MailboxAutoReplyConfiguration -Identity utente@contoso.com -AutoReplyState Disabled
```

Messaggi con HTML

Sia -InternalMessage sia -ExternalMessage accettano HTML di base. Incapsula il testo tra virgolette doppie e usa tag standard come <p>, <br>, <strong>.

Set-MailboxAutoReplyConfiguration `-Identity [utente@contoso.com](mailto:utente@contoso.com) `  -AutoReplyState Enabled`
-InternalMessage "<p>Ciao! <strong>Sono in ferie</strong>.<br/>Tornerò il 26/08.</p>" `  -ExternalMessage "&lt;p&gt;Grazie per il messaggio.&lt;br/&gt;Rientro il 26/08.&lt;/p&gt;"`
-ExternalAudience All </code></pre>
Operazioni massive da CSV (ferie collettive, filiali, team)
Prepara un file users.csv con intestazioni: UPN,Start,End,Internal,External,Audience. Esempio:
UPN,Start,End,Internal,External,Audience[m.rossi@contoso.com](mailto:m.rossi@contoso.com),2024-08-05 18:00,2024-08-26 09:00,"<p>Interno</p>","<p>Esterno</p>",All
[l.verdi@contoso.com](mailto:l.verdi@contoso.com),2024-08-08 18:00,2024-08-19 09:00,"<p>Interno</p>","<p>Esterno</p>",Known </code></pre>
Script di applicazione con log e gestione errori:
#requires -Modules ExchangeOnlineManagementparam(
[Parameter(Mandatory=$true)]
[string]$CsvPath = ".\users.csv"
)

Import-Module ExchangeOnlineManagement -ErrorAction Stop
Connect-ExchangeOnline

$results = @()

Import-Csv -Path $CsvPath | ForEach-Object {
$upn = $*.UPN
try {
$start = if ([string]::IsNullOrWhiteSpace($.Start)) { $null } else { Get-Date $.Start }
$end   = if ([string]::IsNullOrWhiteSpace($*.End))   { $null } else { Get-Date $_.End   }
$state = if ($start -and $end) { "Scheduled" } else { "Enabled" }
$aud   = if ($_.Audience) { $_.Audience } else { "All" }

Set-MailboxAutoReplyConfiguration -Identity $upn `
  -AutoReplyState $state `
  -StartTime $start -EndTime $end `
  -InternalMessage $_.Internal `
  -ExternalMessage $_.External `
  -ExternalAudience $aud

$status = "OK"
$note   = "OOO impostato ($state)"}
catch {
$status = "ERROR"
$note   = $_.Exception.Message
}

$results += [PSCustomObject]@{
UPN    = $upn
State  = $state
Start  = $start
End    = $end
Status = $status
Note   = $note
When   = (Get-Date)
}
}

$results | Export-Csv -NoTypeInformation -Path ".\ooo-results.csv"
Disconnect-ExchangeOnline </code></pre>
Audit rapido dello stato OOO
Per verificare lo stato corrente di un insieme di utenti:
Import-Csv .\users.csv | ForEach-Object {Get-MailboxAutoReplyConfiguration -Identity $_.UPN |
Select-Object Identity, AutoReplyState, StartTime, EndTime, ExternalAudience
} | Export-Csv .\ooo-status.csv -NoTypeInformation </code></pre>

  </section>

  <section>
    <h2>Procedure di verifica e test</h2>
    <ol>
      <li><strong>Verifica interna</strong>: invia una mail dal tuo account (o da un account di test) all’utente; controlla la ricezione della risposta automatica con il testo previsto.</li>
      <li><strong>Verifica esterna</strong>: invia una mail da un account esterno al tenant (es. una casella personale) per verificare l’<em>ExternalAudience</em> e il corpo del messaggio.</li>
      <li><strong>Controlli di formattazione</strong>: se usi HTML, valida che i tag base vengano renderizzati correttamente e che non ci siano link o immagini bloccate.</li>
      <li><strong>Programmazione temporale</strong>: testa che il passaggio da “Enabled/Scheduled” a “Disabled” avvenga all’ora configurata (fuso orario della mailbox).</li>
    </ol>
  </section>

  <section>
    <h2>Ruoli e permessi minimi</h2>
    <p>Per gestire OOO di altri utenti servono privilegi amministrativi in Exchange Online. Le opzioni comunemente utilizzate sono:</p>
    <ul>
      <li><strong>Exchange Administrator</strong> (o Global Administrator) per pieno accesso alle funzioni del Modern EAC.</li>
      <li><strong>Ruoli personalizzati</strong> che includano la gestione delle opzioni degli utenti (ad esempio la possibilità di eseguire <code>Set-MailboxAutoReplyConfiguration</code> a livello organizzativo). In contesti a privilegio minimo, crea un <em>Role Group</em> ad hoc che limiti le attività ai soli comandi necessari.</li>
    </ul>
    <p><em>Suggerimento</em>: se manager o HR devono attivare OOO per i propri team senza accesso completo al portale, valuta un processo mediato (richiesta IT) o la pubblicazione controllata di uno script PowerShell con parametri precompilati e audit.</p>
  </section>

  <section>
    <h2>Raccomandazioni pratiche</h2>
    <ol>
      <li><strong>Sposta la gestione OOO su Modern EAC o PowerShell</strong>, evitando strumenti deprecati (Classic ECP) o percorsi noti per l’errore.</li>
      <li><strong>Limita le deleghe</strong>: accesso completo al Modern EAC solo all’IT. Per manager o assistenti, preferisci script o portali interni con controlli di sicurezza e tracciamento.</li>
      <li><strong>Tieni aperto il ticket con Microsoft</strong>: il problema è lato servizio; fornire esempi di tenant/account affetti e orari d’insorgenza accelera l’analisi.</li>
      <li><strong>Monitora l’Health center</strong> di Microsoft 365 e, quando il fix è annunciato, riprova OWA/ECP; se tornano stabili, ritira i workaround temporanei.</li>
    </ol>
  </section>

  <section>
    <h2>Note importanti e buone pratiche</h2>
    <ul>
      <li>I metodi alternativi non impostano una data di fine per default: <strong>definisci sempre un periodo</strong> o pianifica la disattivazione al rientro.</li>
      <li>Per messaggi con HTML, racchiudi il testo tra virgolette doppie e usa tag semplici (<code>&lt;p&gt;</code>, <code>&lt;br/&gt;</code>, <code>&lt;strong&gt;</code>).</li>
      <li>Per modifiche massive (ferie collettive) sfrutta un <strong>CSV + ciclo PowerShell</strong> con logging e gestione errori (vedi script sopra).</li>
      <li>In ambienti ibridi, verifica che la casella sia effettivamente in Exchange Online e che <em>RemoteRoutingAddress</em> e sincronizzazione siano coerenti.</li>
      <li>Se automatizzi, considera <strong>runbooks</strong> o <strong>GitHub Actions/DevOps pipeline</strong> con segreti protetti e output di audit.</li>
    </ul>
  </section>

  <section>
    <h2>Diagnostica: errori comuni e come risolverli</h2>
    <div class="table-wrapper">
      <table>
        <thead>
          <tr>
            <th>Errore</th>
            <th>Causa probabile</th>
            <th>Risoluzione</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Exception has been thrown by the target of an invocation</td>
            <td>Chiamata a percorsi legacy (ECP/OWA delegato) o service degradation</td>
            <td>Usa Modern EAC o PowerShell con EXO v3.4.0; evita superfici deprecate</td>
          </tr>
          <tr>
            <td>The term 'Set-MailboxAutoReplyConfiguration' is not recognized</td>
            <td>Modulo non importato o sessione sbagliata</td>
            <td>Install/Import di <code>ExchangeOnlineManagement</code> e <code>Connect-ExchangeOnline</code></td>
          </tr>
          <tr>
            <td>The operation couldn't be performed because object 'utente@contoso.com' couldn't be found</td>
            <td>UPN errato o cassetta non esistente/in attesa di provisioning</td>
            <td>Verifica UPN e stato della cassetta con <code>Get-Mailbox</code></td>
          </tr>
          <tr>
            <td>Access denied / insufficient privileges</td>
            <td>Ruolo carente</td>
            <td>Aggiungi l’utente a un gruppo con i permessi necessari o usa un account Exchange Admin</td>
          </tr>
          <tr>
            <td>Formato data/ora non valido</td>
            <td>Locale e formati non coerenti</td>
            <td>Usa <code>Get-Date "yyyy-MM-dd HH:mm"</code> o converte con <code>[datetime]</code></td>
          </tr>
        </tbody>
      </table>
    </div>
  </section>

  <section>
    <h2>Esempi di messaggi OOO efficaci</h2>
    <h3>Interno (dipendenti)</h3>
    <pre><code>&lt;p&gt;Ciao, sono fuori ufficio fino al 26/08.&lt;br/&gt;
Per urgenze &lt;strong&gt;Team IT&lt;/strong&gt; su Teams o helpdesk@contoso.com.&lt;/p&gt;</code></pre>
Esterno (clienti/fornitori)
<p>Grazie per averci contattato. Non sono disponibile fino al 26/08.<br/>Per assistenza: <strong>[support@contoso.com](mailto:support@contoso.com)</strong>.</p></code></pre>
Consiglio: mantieni il messaggio conciso, indica un contatto alternativo e — se utile — un link a un form di assistenza interno (se accessibile pubblicamente).
```

Playbook operativo (riutilizzabile) Conferma il perimetro: il problema riguarda ECP/OWA delegato? Se sì, non insistere su quelle superfici. Seleziona workaround: Modern EAC per singoli utenti, PowerShell per serie o casi ricorrenti. Prepara i contenuti: messaggi interno/esterno, audience esterna, finestra temporale. Esegui e registra: per modifiche multiple, usa lo script con log CSV. Verifica: invii di test da interno ed esterno; controlla formattazione. Comunica: informa gli stakeholder che ECP/OWA delegato è temporaneamente inaffidabile. Monitora: Health center e canali interni; quando il servizio è ripristinato, aggiorna le procedure. FAQ Posso continuare a usare il Microsoft 365 Admin Center per OOO? Sì, ma è affidabile soprattutto quando non esiste già un OOO configurato. Se ricevi l’errore, passa subito a Modern EAC o PowerShell. È meglio attivare OOO “Enabled” o “Scheduled”? Scheduled è preferibile: evita dimenticanze e riduce il rischio di risposte automatiche inviate oltre il necessario. Quale audience esterna scegliere? All massimizza la copertura ma può inviare risposte anche a mailing list. Known limita ai contatti noti; valuta normativa privacy e policy interne. Come gestire i team con OOO differenziati? Prepara un CSV con UPN e messaggi personalizzati per ciascun cluster (vendite, supporto, dirigenza) e applica lo script massivo. Come ripristinare rapidamente la normalità post‑ferie? Conserva il CSV e riesegui uno script “disable” su tutti gli utenti interessati il giorno del rientro. Checklist di controllo ✅ Ho usato Modern EAC o PowerShell (EXO v3.4.0)? ✅ Ho impostato StartTime e EndTime se necessario? ✅ Ho definito messaggi separati per interno/esterno? ✅ Ho scelto l’audience esterna corretta (All/Known)? ✅ Ho eseguito verifiche da un account interno ed esterno? ✅ Ho registrato le modifiche (log CSV / ticket)? Conclusioni L’errore “Exception has been thrown by the target of an invocation” che blocca la gestione dei messaggi Fuori sede su strumenti legacy (ECP/OWA delegato) è dovuto a una degradazione lato servizio e all’obsolescenza della console classica. Nel quotidiano, il percorso più efficace è migrare le attività su Modern EAC o PowerShell (EXO v3.4.0), applicando le best practice descritte: periodi programmati, messaggi separati interno/esterno, audience adeguata, log e verifiche. Finché Microsoft non completerà il ripristino dei componenti legacy, questi workaround permettono di garantire continuità operativa e standardizzare la gestione OOO su basi più moderne, sicure e governabili. Riepilogo operativo immediato Evita Classic ECP e l’uso delegato di OWA per OOO: generano l’eccezione. Usa Modern EAC per casi singoli; PowerShell per bulk e automazione. Imposta sempre una finestra temporale o pianifica la disattivazione. Limita permessi, traccia le modifiche e mantieni aggiornati runbook e script.

Indice