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.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
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:
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.
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
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
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)
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