Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Si applica a:SQL Server
Istanza gestita di SQL di Azure
Questo articolo descrive come risolvere un problema in cui i messaggi di posta elettronica da Database Mail vengono accodati correttamente, ma non vengono recapitati.
Diagnosticare il problema
Il programma esterno Mail del database registra l'attività di posta elettronica nel database msdb.
Prima di tutto, per verificare che Database Mail sia abilitato, utilizzare l'opzione di configurazione Database Mail (server) della procedura di sistema memorizzata, come nell'esempio seguente:
EXEC sp_configure 'show advanced', 1; RECONFIGURE; EXEC sp_configure; GOEseguire quindi l'istruzione seguente nel
msdbdatabase per controllare lo stato della coda di posta:EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';Per una spiegazione dettagliata delle colonne, vedere sysmail_help_queue_sp (Transact-SQL).
Controlla l'attività nella visualizzazione
sysmail_event_log. La vista dovrebbe contenere una voce che specifica che il programma esterno Posta elettronica database è stato avviato. Se non è presente alcuna voce nellasysmail_event_logvisualizzazione, vedere il sintomo Messaggi in coda, Nessuna voce insysmail_event_log.Se sono presenti errori nella
sysmail_event_logvisualizzazione, risolvere il problema specifico. Controllare la visualizzazionesysmail_allitemsper lo stato dei messaggi.
Stato del messaggio non inviato
Lo stato non inviato indica che il Programma Esterno di posta del database non ha ancora elaborato il messaggio di posta elettronica.
Il programma esterno Posta elettronica database potrebbe essere stato in ritardo nell'elaborazione dei messaggi; la frequenza con cui il programma esterno elabora i messaggi dipende dalle condizioni di rete, dal timeout dei tentativi, dal volume di messaggi e dalla capacità del server SMTP. Se il problema persiste, è consigliabile utilizzare più di un profilo per la distribuzione di messaggi fra più server SMTP. Esaminare il caricamento di posta elettronica inviato da SQL Server per verificare che i messaggi di posta elettronica inviati siano validi e previsti.
Controllare la data dell'ultimo recapito senza errori. Se l'ultimo recapito riuscito si è verificato qualche tempo fa, controllare la sysmail_event_log visualizzazione per verificare che il programma esterno sia stato avviato correttamente da Service Broker. Se durante l'ultimo tentativo il programma esterno non è stato avviato, verificare che il programma esterno Posta elettronica database si trovi nella directory corretta e che l'account del servizio per SQL Server abbia l'autorizzazione per l'avvio dell'eseguibile. Controllare il registro eventi di Windows Application per individuare gli errori correlati a Posta elettronica database.
Nota
Per eliminare i vecchi messaggi non inviati, attendere che i messaggi non recapitabili siano i messaggi meno recenti nella coda e quindi usare la stored procedure di sistema msdb.dbo.sysmail_delete_mailitems_sp per eliminarli.
Stato del messaggio nuovo tentativo in corso
Uno stato di ritentativo indica che Database Mail ha cercato di recapitare il messaggio al server SMTP, ma non è riuscito. In genere, questo problema è causato da un'interruzione di rete, un errore sul server SMTP o un account di Posta elettronica database configurato in modo non corretto. Il messaggio dovrebbe avere esito positivo o negativo e inviare un messaggio al registro eventi dell'applicazione di Windows.
Stato del messaggio inviato
Lo stato inviato indica che il programma esterno Posta elettronica database ha recapitato correttamente il messaggio al server SMTP.
Se il messaggio non è giunto a destinazione, il server SMTP ha accettato il messaggio da Posta elettronica database, ma non lo ha recapitato al destinatario finale. Verificare i log del server SMTP, oppure rivolgersi all'amministratore del server SMTP. È inoltre possibile eseguire un test del server di posta elettronica SMTP utilizzando un altro client, ad esempio Outlook Express.
Stato del messaggio non riuscito
Lo stato non riuscito indica che il programma esterno Posta elettronica database non è stato in grado di recapitare il messaggio al server SMTP.
In questo caso, la msdb.dbo.sysmail_event_log visualizzazione di sistema contiene le informazioni dettagliate del programma esterno. Per una query di esempio che unisce sysmail_faileditems e sysmail_event_log per recuperare messaggi di errore dettagliati, vedere Controllare lo stato dei messaggi di posta elettronica inviati con Posta elettronica database. Le cause di errore più frequenti sono la presenza di un indirizzo di destinazione errato oppure problemi di rete che impediscono al programma esterno di raggiungere uno o più account di failover. È inoltre possibile che la posta venga respinta per problemi specifici a livello del server SMTP. Usando Configurazione guidata Posta elettronica database, modificare l'impostazione dell'opzione Livello di registrazione su Dettagliato e inviare un messaggio di prova per individuare il punto di errore.