locked
Enviando email SQL para lista usuarios.. RRS feed

  • Pergunta

  • boa tarde, tenho um SP que envia email do sql para utilizadores... dessa forma:

    EXEC msdb.dbo.sp_send_dbmail 
    		@profile_name='Nome Perfil',
    		@recipients='usuarioA@email.teste',

    no profile name posso adicionar um ou muito usuarios para receberem o email. mas o que eu quero é pegar os receptores através de uma tabela onde eu guardo os emails de destino..

    a minha tabela tem apenas os seguintes campos:

    id_tabela  int,
    nome_cliente  varchar(80),
    email_cliente  varchar (150)
    a minha tabela está alimentado com alguns dados, e quero passar esses users para o receptor do email... sendo assim posso controlar as pessoas que recebem o email, apagando ou inserindo mais na tabela, sem mexer no meu SP.


    segunda-feira, 3 de novembro de 2014 17:45

Respostas

  • Boa Noite Flaviodantas!

    Eu tenho um processo parecido na empresa, e uso o seguinte script:

    CREATE TABLE emails(
    	id_tabela  int,
    	nome_cliente  varchar(80),
    	email_cliente  varchar (150)
    )
    
    INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br')
    INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br')
    INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br')
    INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br')
    INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br')
    INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br')
    INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br')
    
    DECLARE @lista_emails VARCHAR(MAX)
    
    SELECT  DISTINCT 
    		@lista_emails = STUFF((
    			SELECT ';' + email_cliente
    				FROM emails
    			FOR XML PATH('')),1,1,''
    			) --AS Lista_Emails
    			FROM emails 
    
    	SELECT @lista_emails 
    
    	EXEC msdb.dbo.sp_send_dbmail 
    		@profile_name = 'Nome Perfil',
    		@recipients = @lista_emails
    
    GO
    


    terça-feira, 4 de novembro de 2014 20:02
  • Boa Noite Flaviodantas!

    Eu tenho um processo parecido na empresa, e uso o seguinte script:

    CREATE TABLE emails(
    	id_tabela  int,
    	nome_cliente  varchar(80),
    	email_cliente  varchar (150)
    )
    
    INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br')
    INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br')
    INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br')
    INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br')
    INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br')
    INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br')
    INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br')
    
    DECLARE @lista_emails VARCHAR(MAX)
    
    SELECT  DISTINCT 
    		@lista_emails = STUFF((
    			SELECT ';' + email_cliente
    				FROM emails
    			FOR XML PATH('')),1,1,''
    			) --AS Lista_Emails
    			FROM emails 
    
    	SELECT @lista_emails 
    
    	EXEC msdb.dbo.sp_send_dbmail 
    		@profile_name = 'Nome Perfil',
    		@recipients = @lista_emails
    
    GO
    


    Pedro,

    Muito legal esta sua sugestão, o melhor é que não precisamos fazer uso de While ou Cursor, com isso, o processamento fica mais simples e dinâmico.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    quarta-feira, 5 de novembro de 2014 15:39

Todas as Respostas

  • Flavio,

    Se o envio do e-mail está funcionando bem, então você poderá fazer um loop para ler os registros de sua tabela utilizando um CURSOR.

    Segue abaixo um exemplo para você adaptar à sua necessidade:

    DECLARE @id    int
    DECLARE @nome  varchar(80)
    DECLARE @mail  varchar(150)
    
    DECLARE SeuCursor CURSOR FOR 
    SELECT id_tabela,nome_cliente,email_cliente FROM TB_SuaTabela
    OPEN SeuCursor
    FETCH NEXT FROM SeuCursor INTO @id,@nome,@mail
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
      PRINT 'DISPARA E-MAIL PARA ' + @nome + ' (' + @mail + ')'
    
      FETCH NEXT FROM SeuCursor INTO @id,@nome,@mail
    END
    CLOSE SeuCursor;
    DEALLOCATE SeuCursor
    GO
    
    
    

    Para maiores informações veja:

    http://msdn.microsoft.com/pt-br/library/ms180169.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    segunda-feira, 3 de novembro de 2014 20:48
    Moderador
  • Boa Noite Flaviodantas!

    Eu tenho um processo parecido na empresa, e uso o seguinte script:

    CREATE TABLE emails(
    	id_tabela  int,
    	nome_cliente  varchar(80),
    	email_cliente  varchar (150)
    )
    
    INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br')
    INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br')
    INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br')
    INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br')
    INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br')
    INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br')
    INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br')
    
    DECLARE @lista_emails VARCHAR(MAX)
    
    SELECT  DISTINCT 
    		@lista_emails = STUFF((
    			SELECT ';' + email_cliente
    				FROM emails
    			FOR XML PATH('')),1,1,''
    			) --AS Lista_Emails
    			FROM emails 
    
    	SELECT @lista_emails 
    
    	EXEC msdb.dbo.sp_send_dbmail 
    		@profile_name = 'Nome Perfil',
    		@recipients = @lista_emails
    
    GO
    


    terça-feira, 4 de novembro de 2014 20:02
  • Boa Noite Flaviodantas!

    Eu tenho um processo parecido na empresa, e uso o seguinte script:

    CREATE TABLE emails(
    	id_tabela  int,
    	nome_cliente  varchar(80),
    	email_cliente  varchar (150)
    )
    
    INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br')
    INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br')
    INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br')
    INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br')
    INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br')
    INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br')
    INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br')
    
    DECLARE @lista_emails VARCHAR(MAX)
    
    SELECT  DISTINCT 
    		@lista_emails = STUFF((
    			SELECT ';' + email_cliente
    				FROM emails
    			FOR XML PATH('')),1,1,''
    			) --AS Lista_Emails
    			FROM emails 
    
    	SELECT @lista_emails 
    
    	EXEC msdb.dbo.sp_send_dbmail 
    		@profile_name = 'Nome Perfil',
    		@recipients = @lista_emails
    
    GO
    


    Pedro,

    Muito legal esta sua sugestão, o melhor é que não precisamos fazer uso de While ou Cursor, com isso, o processamento fica mais simples e dinâmico.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    quarta-feira, 5 de novembro de 2014 15:39
  • Flavio segue um exemplo

    declare @Destinatarios varchar(max)
    SELECT @Destinatarios = Coalesce(@Destinatarios+';','') + colEmail from TabEmail;

    EXEC msdb.dbo.sp_send_dbmail
                                                    @profile_name = 'SGBD Send Mail',
                                                    @recipients =@Destinatarios,
    @body = 'Teste de envio de mensagem',
    @subject = 'Erro na Replicação';

    quarta-feira, 5 de novembro de 2014 16:37
  • muito obrigado pessoal. agradeço pelas ajudas cá disponibilizado..

    Pedro o teu exemplo foi simples e de facil compreençao e de aplicação também. funciona perfeitamente. agradeço.

    quinta-feira, 13 de novembro de 2014 15:51