Como enviar e-mail do servidor SQL?

Como posso enviar um e-mail usando T-SQL mas o endereço de E-mail está armazenado numa tabela? Quero fazer um loop através da mesa e ser capaz de enviar e-mail. Não encontro um bom exemplo disso até agora..

Obrigado pela ajuda.
Author: Bhugy, 2012-11-09

7 answers

Passo 1) Criar perfil e conta

Você precisa de criar um perfil e uma conta com o Assistente Configurar o Correio da Base de dados, que poderá ser acedido no menu Configurar o contexto de Correio da Base de dados do nó de Correio da Base de dados no nó de gestão. Este assistente é usado para gerenciar contas, perfis e configurações globais de E-Mail de banco de dados.

Passo 2)

Corra:

sp_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO
sp_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE
GO

Passo 3)

USE msdb
GO
EXEC sp_send_dbmail @profile_name='yourprofilename',
@recipients='[email protected]',
@subject='Test message',
@body='This is the body of the test message.
Congrates Database Mail Received By you Successfully.'

Para percorrer a tabela

DECLARE @email_id NVARCHAR(450), @id BIGINT, @max_id BIGINT, @query NVARCHAR(1000)

SELECT @id=MIN(id), @max_id=MAX(id) FROM [email_adresses]

WHILE @id<=@max_id
BEGIN
    SELECT @email_id=email_id 
    FROM [email_adresses]

    set @query='sp_send_dbmail @profile_name=''yourprofilename'',
                        @recipients='''+@email_id+''',
                        @subject=''Test message'',
                        @body=''This is the body of the test message.
                        Congrates Database Mail Received By you Successfully.'''

    EXEC @query
    SELECT @id=MIN(id) FROM [email_adresses] where id>@id

END

Postou isso no seguinte link http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

 62
Author: Ruzbeh Irani, 2016-05-20 01:16:27

Aqui está um exemplo de como você pode concatenar endereços de E-mail de uma tabela para um único parâmetro @recipients:

CREATE TABLE #emailAddresses (email VARCHAR(25))

INSERT #emailAddresses (email) VALUES ('[email protected]')
INSERT #emailAddresses (email) VALUES ('[email protected]')
INSERT #emailAddresses (email) VALUES ('[email protected]')

DECLARE @recipients VARCHAR(MAX)
SELECT @recipients = COALESCE(@recipients + ';', '') + email 
FROM #emailAddresses

SELECT @recipients

DROP TABLE #emailAddresses

Os @destinatários resultantes serão:

[email protected];[email protected];[email protected]

 3
Author: Lars, 2012-11-10 23:36:37

Você pode enviar e-mail nativamente a partir do servidor SQL usando o correio de Base de dados. Esta é uma grande ferramenta para notificar sysadmins sobre erros ou outros eventos de banco de dados. Você também pode usá-lo para enviar um relatório ou uma mensagem de E-mail para um usuário final. A sintaxe básica para isso é:

EXEC msdb.dbo.sp_send_dbmail  
@recipients='[email protected]',
@subject='Testing Email from SQL Server',
@body='<p>It Worked!</p><p>Email sent successfully</p>',
@body_format='HTML',
@from_address='Sender Name <[email protected]>',
@reply_to='[email protected]'

Antes de usar, o 'Database Mail' deverá estar activo com o Assistente de configuração do 'Database Mail' ou o 'sp_configure'. Uma base de dados ou um administrador de permuta poderá precisar de o ajudar a configurar isto. Ver http://msdn.microsoft.com/en-us/library/ms190307.aspx e http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server para mais informações.

 3
Author: Salman Lone, 2016-05-02 07:34:41

Para fazer com que o servidor de SQL envie uma notificação de E-mail, é necessário criar o perfil de E-mail a partir da Gestão, do E-mail da base de dados.

1) Carregue com o botão direito do utilizador para obter o menu perfil de E-mail e escolha Configurar o database mail

2)Escolha a primeira opção aberta (crie uma base de dados de E-mail seguindo as seguintes tarefas) e carregue em Seguinte Nota: Se o SMTP não estiver configurado, por favor consulte o URL abaixo de

Http://www.symantec.com/business/support/index?page=content&id=TECH86263

3) no segundo ecrã, preencha o nome do perfil e adicione a conta SMTP, Carregando depois em

4) Escolha o tipo de conta de correio (pública ou privada) e carregue em Seguinte

5) altere os parâmetros relacionados com as opções de envio de correio e carregue em Seguinte 6) press finish

Agora para fazer com que o servidor SQL envie um e-mail se a acção X tiver acontecido, poderá fazê-lo através do trigger ou do job ( Este é o caminho comum não os únicos).

1) pode criar emprego a partir do agente do servidor SQL, depois carregue com o botão direito nos operadores e verifique as mensagens (preencha o seu e-mail, por exemplo) e carregue em OK depois desse botão direito e escolha a nova tarefa e preencha as informações necessárias, bem como os passos, nome,...etc e na página de notificação seleccione o perfil que fez.

2) de gatilhos, por favor consulte o exemplo abaixo.

AS
declare @results varchar(max)
declare @subjectText varchar(max)
declare @databaseName VARCHAR(255)
SET @subjectText = 'your subject'
SET @results = 'your results'
-- write the Trigger JOB
EXEC msdb.dbo.sp_send_dbmail
 @profile_name = 'SQLAlerts',
 @recipients = '[email protected]',
 @body = @results,
 @subject = @subjectText,
 @exclude_query_output = 1 --Suppress 'Mail Queued' message
GO
 2
Author: Ahmad Abuhasna, 2014-04-10 13:50:14

Você também pode fazê-lo com um cursor. Assumindo que criou uma conta e um perfil, por exemplo, "perfil" e uma conta, e que tem a tabela que mantém os e-mails prontos, por exemplo, "EmailMessageTable", pode fazer o seguinte:

USE database_name
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE mass_email AS
declare @email nvarchar (50) 
declare @body nvarchar (255)  

declare test_cur cursor for             
SELECT email from [dbo].[EmailMessageTable]

open test_cur                                        

fetch next from test_cur into   
@email     
while @@fetch_status = 0       
begin                                    

set @body = (SELECT body from [dbo].[EmailMessageTable] where email = @email)
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'profile',
    @recipients = @email,
    @body = @body,
    @subject = 'Credentials for Web';
fetch next from test_cur into  
@email 
end    
close test_cur   
deallocate test_cur

Depois disso tudo o que tens de fazer é executar o procedimento armazenado

EXECUTE mass_email
GO
 2
Author: pancy1, 2016-10-30 20:55:48

Por vezes, enquanto não foi encontrado o sp_ send_ dbmail directamente. Pode usar o ' msdb.dbo.sp_send_dbmail' para tentar (Work fine on Windows Server 2008 R2 and is tested)

 1
Author: Marc Zeroc, 2014-03-04 02:15:58

Para enviar e-mail através do servidor SQL precisamos configurar o perfil de E-mail DB podemos usar a opção de E-mail de banco de dados T-SQl ou SQL no servidor sql para criar perfil. Após o código abaixo é usado para enviar e-mail através de consulta ou procedimento armazenado.

Usar abaixo da ligação para criar DB mail perfil

Http://www.freshcodehub.com/Article/42/configure-database-mail-in-sql-server-database

Http://www.freshcodehub.com/Article/43/create-a-database-mail-configuration-using-t-sql-script

--Sending Test Mail
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'TestProfile', 
@recipients = 'To Email Here', 
@copy_recipients ='CC Email Here',             --For CC Email if exists
@blind_copy_recipients= 'BCC Email Here',      --For BCC Email if exists
@subject = 'Mail Subject Here', 
@body = 'Mail Body Here',
@body_format='HTML',
@importance ='HIGH',
@file_attachments='C:\Test.pdf';               --For Attachments if exists
 0
Author: Kamal Pratap, 2018-05-25 09:45:26