Partilhar via


Verificar o status das mensagens de email enviadas com o Database Mail

Aplica-se a:SQL ServerAzure SQL Managed Instance

Este artigo descreve como verificar o status da mensagem de email enviada usando o Database Mail no SQL Server usando o Transact-SQL.

  • O Database Mail mantém cópias das mensagens de e-mail de saída e exibe-as nas visualizações sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems da base de dados msdb.
  • O programa externo do Database Mail regista a atividade e exibe o registo através do Registo de Eventos da Aplicação do Windows e da vista sysmail_event_logmsdb no banco de dados.
  • As mensagens de email têm um dos quatro status possíveis: enviadas, não enviadas , de nova tentativa e com falha .

Para verificar o estado de uma mensagem de correio eletrónico, execute uma consulta na vista do msdb.dbo.sysmail_event_log sistema.

Use o Transact-SQL para exibir o status do email enviado usando o Database Mail

  • Selecione na tabela sysmail_allitems, especificando as mensagens de interesse por mailitem_id ou sent_status.

  • Para verificar o estado retornado do programa externo para as mensagens de email, juntem sysmail_allitems a sysmail_event_log para ver na coluna mailitem_id.

    Por padrão, o programa externo não registra informações sobre mensagens que foram enviadas com êxito. Para registar todas as mensagens, defina o nível de registo como detalhado, utilizando a página Configurar Parâmetros do Sistema do Assistente de Configuração do Database Mail.

O exemplo a seguir lista informações sobre quaisquer mensagens de email enviadas para danw que o programa externo não pôde enviar com êxito. A instrução lista o assunto, a data e a hora em que o programa externo não conseguiu enviar a mensagem e a mensagem de erro do log do Database Mail.

USE msdb ;  
GO  

-- Show the subject, the time that the mail item row was last  
-- modified, and the log information.  
-- Join sysmail_faileditems to sysmail_event_log   
-- on the mailitem_id column.  
-- In the WHERE clause list items where danw was in the recipients,  
-- copy_recipients, or blind_copy_recipients.  
-- These are the items that would have been sent  
-- to danw.  

SELECT items.subject,  
    items.last_mod_date  
    ,l.description 
FROM dbo.sysmail_faileditems AS items  
INNER JOIN dbo.sysmail_event_log AS l  
    ON items.mailitem_id = l.mailitem_id  
WHERE items.recipients LIKE '%danw%'    
    OR items.copy_recipients LIKE '%danw%'   
    OR items.blind_copy_recipients LIKE '%danw%';
GO