Nesta segunda parte do post sobre envio de e-mail no SQL Server, vamos mais alguns recursos.
Resultado de uma consulta
Podemos enviar o resultado de uma consulta por e-mail, para isso devemos utilizar a variável “@query”. No exemplo coloquei um “select” simples, mas você pode fazer o “select” que necessitar.
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'PerfilPadrão', @recipients = 'andrebtoe@gmail.com', @subject = 'Título', @query = 'SELECT "Maria" AS "Nome do cliente", 20 AS "Idade";';
A procedure acima adiciona um envio de e-mail na fila, para o e-mail “andrebtoe@gmail.com”, utilizando o profiler “PerfilPadrão”, e o conteúdo do e-mail é o resultado da consulta.
Por padrão o limite de caracteres de envio é de 256 caracteres, mas é possível alterar esse valor, passando como parâmetro a variável “@query_result_width” ao chamar a procedure. O valor deve estar entre 10 e 32767.
Também podemos alterar o separador de colunas que vai para o corpo do e-mail, utilizando a variável “@query_result_separator”, por padrão o valor é um espaço.
A variável “@query_no_truncate” define se o texto do corpo do e-mail deve ser truncado ou não, se o valor for “0” (valor padrão), o texto é truncado em 256 caracteres. Defina “1” para não truncar o texto do corpo do e-mail.
E-mail com anexo
Para enviar um anexo devemos utilizar a variável “@file_attachments” com o caminho físico do arquivo.
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'PerfilPadrão', @recipients = 'andrebtoe@gmail.com', @subject = 'E-mail com anexo', @body = 'Conteúdo aqui', @file_attachments = 'C:\texto.txt';
Acima estamos adicionando um envio de e-mail na fila, com um arquivo anexo. Certifique-se de que a extensão do arquivo é permitida (veja como adicionar uma extensão https://andrebtoe.com/2014/12/23/como-enviar-e-mail-no-sql-server-parte-1) e o tamanho máximo do arquivo anexo.
Configurando via T-SQL
Para configurar o Database Mail, execute:
-- Cria um conta no Database Mail EXEC msdb.dbo.sysmail_add_account_sp @account_name = 'ContaGmail', -- Nome da conta @description = 'Conta do Gmail', -- Descrição da conta @email_address = 'andrebtoe@gmail.com', -- Endereço de e-mail @display_name = 'André Btoe', -- Nome de exibição do e-mail @replyto_address = 'andrebtoe@gmail.com', -- Responder para @mailserver_type = 'SMTP', -- Tipo de envio @mailserver_name = 'smtp.gmail.com', -- Endereço do servidor de e-mail @port = 587, -- Porta de envio @use_default_credentials = 1, -- 0 para conexão não segura e 1 para conexão segura @username = 'email@gmail.com', -- E-mail para autenticação @password = 'senha aqui'; -- Senha para autenticação -- Cria o profiler EXEC msdb.dbo.sysmail_add_profile_sp @profile_name = 'PerfilPadrão', -- Nome do profiler @description = 'Perfil padrão'; -- Descrição do profiler -- Adiciona uma conta no profiler EXEC msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'PerfilPadrão', -- Nome do profiler criado @account_name = 'ContaGmail', -- Nome do conta criada @sequence_number = 1; -- Número sequencial para determinar a ordem em que as contas de e-mail podem ser utilizadas
Acima criamos as mesmas configurações do primeiro passo, porem via T-SQL.
Espero ter ajudado!
Até a próxima pessoal!
Muito bom!!!!
Muito bom! Excelente post. Me tira uma dúvida, tem como enviar o email com a coluna no tipo: FLOAT?
Pois estou tendo o seguinte erro:
Error converting data type varchar to float.
Valew, muito obrigado pela iniciativa….
Não funciona nem a pau comigo, o sql nao envia login e senha para o servidor
Muito bom, Mas fiquei com uma dúvida. É possível mandar uma imagem?
Boa tarde,
muito com o artigo, estou fazendo alguns testes aqui e estou gostando.
Pergunta: “Como que eu insiro uma lista de e-mail de destinatários”?