Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Enviar e-mails com anexos no SQL Server (T-SQL)


O SQL Server nos oferece a capacidade de enviar e-mails por meio de sua solução Database Mail. Isso inclui vários procedimentos armazenados que facilitam a configuração e o envio de e-mails.

Para enviar um e-mail, use o sp_send_dbmail procedimento armazenado. Este procedimento aceita vários argumentos opcionais, um dos quais permite enviar anexos.

Na verdade, existem dois argumentos que permitem enviar anexos. O que você usar dependerá do contexto.

Eles estão:
  • @file_attachments – Permite especificar um arquivo para anexar ao e-mail.
  • @attach_query_result_as_file – Isso só é aplicável se você também estiver usando @query para enviar por e-mail os resultados de uma consulta.

Exemplos abaixo.

Anexar um arquivo


Os @file_attachments O argumento permite que você especifique um arquivo para anexar ao e-mail.

Aqui está um exemplo:
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'The attached file contains all required data.',
    @file_attachments = '/var/opt/mssql/bak/Nature.bak',
    @subject = 'File attached as discussed';

O valor deve incluir o caminho absoluto para o arquivo.

Por padrão, o tamanho máximo do arquivo é de 1 MB por arquivo, mas você pode alterar isso com o sysmail_configure_sp procedimento armazenado.

Anexar vários arquivos


Você pode anexar vários arquivos separando cada nome de arquivo com um ponto e vírgula:
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'The attached files contain all required data.',
    @file_attachments = '/var/opt/mssql/bak/Nature.bak;/var/opt/mssql/bak/World.bak',
    @subject = 'Files attached as discussed';

Conforme mencionado, o limite de tamanho de arquivo se aplica a cada arquivo. Portanto, se o limite de tamanho do arquivo for 1 MB, cada arquivo neste exemplo pode ter até 1 MB (resultando em um tamanho total de 2 MB para ambos os anexos combinados).

Anexar resultados de uma consulta


Você também pode usar o Database Mail para enviar por email o resultado de uma consulta. Isso é feito com o @query argumento. Por padrão, os resultados são listados no corpo do e-mail, mas você pode adicioná-los como anexo, se preferir.

Para adicioná-los como um anexo, defina o @attach_query_result_as_file argumento com um valor de 1 .

Aqui está um exemplo de envio de resultados de consulta como um anexo:
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Potential candidates for an Admin job, perhaps?',
    @query = 'SELECT TOP(5) * FROM Artists;',
    @execute_query_database = 'Music',
    @attach_query_result_as_file = 1,
    @subject = 'Query results as discussed';

Existem algumas opções disponíveis para você enviar os resultados da consulta em um e-mail.

Por exemplo, você pode usar @query_attachment_filename para especificar o nome do arquivo (se não for especificado, o Database Mail criará um). Você também pode usar o @query_result_header argumento para especificar se os cabeçalhos estão ou não incluídos na consulta, e você pode usar o @query_result_no_padding argumento para remover qualquer preenchimento aplicado automaticamente aos resultados.