Páginas

terça-feira, 24 de fevereiro de 2015

Email Via BANCO DE DADOS MSSQL

Email Via BANCO DE DADOS MSSQL

---------------------------------------------------------------------------------------------------------------------------SQL #

---------------------------------------------------------------------------------------------------------------------------
 Send Email in SQL Server Stored Procedure - Tutorial
  ---------------------------------------------------------------------------------------------------------------------------
Arquitetura do DataBaseMail 


---------------------------------------------------------------------------------------------------------------------------
 Send Email From SQL Server - SQL in Sixty Seconds #039


---------------------------------------------------------------------------------------------------------------------------
Solucionando problemas do Database Mail: email na fila, não entregue

---------------------------------------------------------------------------------------------------------------------------
Solucionando problemas de Database Mail

---------------------------------------------------------------------------------------------------------------------------
Journey to SQL Authority with Pinal Dave










---------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
                              Fonte fornecido por Adriano Boller
send email voucher eletronico

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[NG0006_Procedure_EnviaVoucherEletronico]

AS
BEGIN
    SET NOCOUNT ON;

        --Variaveis
        --//Empresa
        DECLARE    @Empresa varchar(255);
        DECLARE    @Endereco varchar(255);
        DECLARE    @nom_endere_instal     varchar(70);
        DECLARE    @num_endere_instal varchar(50);
        DECLARE    @des_comple_endere_instal varchar(50);
        DECLARE    @nom_bairro_instal     varchar(30);
        DECLARE    @nom_cidade_instal varchar(20);   
        DECLARE    @sig_uf_instal varchar(2);
        DECLARE    @num_cep_instal varchar(10);   
        DECLARE    @num_cgc_instal varchar(20);   
        DECLARE    @num_ie_instal varchar(20);
        --//Voucher
        DECLARE @Registros int;
        DECLARE @RegistrosProcessados int;
        DECLARE @num_ano_corrid int;
        DECLARE @num_corrid int;
        DECLARE @dat_hora_corrid datetime;
        DECLARE @cod_client int;
        DECLARE @nom_client varchar(70);       
        DECLARE @convenio varchar(255);   
        DECLARE @cliente varchar(255);                                  
        DECLARE @autorizador varchar(255);   
        DECLARE @setor varchar(255);   
        DECLARE @passageiro varchar(255);   
        DECLARE @corrida varchar(255);   
        DECLARE @datasolicitacao varchar(255);   
        DECLARE @dataatendimento varchar(255);   
        DECLARE @dataembarque varchar(255);   
        DECLARE @datadesembarque varchar(255);   
        DECLARE @valor varchar(255);   
        DECLARE @trajeto varchar(255);
        DECLARE @finalidade varchar(100);   
        DECLARE @latlonembarque varchar(50);
        DECLARE @latlondesembarque varchar(50);
        DECLARE @centrocusto varchar(255);   
        DECLARE @ID int;
        DECLARE @Assunto varchar(512);
        DECLARE @CorpoEmail nvarchar(max);
        DECLARE @emailccusto varchar(1024)
        DECLARE @emailconvenio varchar(1024);   
        DECLARE @emailscliente varchar(1024);
        DECLARE @emailcopia varchar(1024);
        DECLARE @des_email_vouche_eletro_notifi varchar(1024);
        DECLARE @Erro varchar(1024);
        --//


--Exemplo
--        set @num_corrid  = 92662
--        set @num_ano_corrid = 2015



        --Dados da Empresa
        SELECT
            @Empresa = SIS_INSTALACAO.nom_empres +' - '+ SIS_INSTALACAO.nom_grupo,   
            @nom_endere_instal = SIS_INSTALACAO.nom_endere_instal,   
            @num_endere_instal = SIS_INSTALACAO.num_endere_instal,   
            @des_comple_endere_instal = SIS_INSTALACAO.des_comple_endere_instal,   
            @nom_bairro_instal = SIS_INSTALACAO.nom_bairro_instal,   
            @nom_cidade_instal = SIS_INSTALACAO.nom_cidade_instal,   
            @sig_uf_instal = SIS_INSTALACAO.sig_uf_instal,   
            @num_cep_instal = SIS_INSTALACAO.num_cep_instal,   
            @num_cgc_instal = SIS_INSTALACAO.num_cgc_instal,   
            @num_ie_instal = SIS_INSTALACAO.num_ie_instal
        FROM
            SIS_INSTALACAO
        Order by 1

        --Retorno da Empresa
        --SELECT @Empresa as Empresa, @nom_endere_instal as Endereco, @num_endere_instal as Numero, @des_comple_endere_instal as Complemento, @nom_bairro_instal as Bairro, @nom_cidade_instal as Cidade, @sig_uf_instal as UF, @num_cep_instal as CEP, @num_cgc_instal as CNPJ, @num_ie_instal as IE;


        --Conta quantos registros tem pra processar
       
        execute NG0007_Procedure_VerificaEnvioVoucher
 
        Select            
                @Registros = count(*)
        FROM
            ACT263_CORRIDA_TRAJETO t with(nolock)                                   
                                        inner join  act263_corrida_autoriza_fatura ft
                                    on t.num_ano_corrid =  ft.num_ano_corrid and t.num_corrid =  ft.num_corrid                                   
                                        inner join ACT263_CORRIDA cor with(nolock)
                                    on t.num_ano_corrid =  cor.num_ano_corrid and t.num_corrid =  cor.num_corrid                                    
                                         left join  ACT263_CLIENTE_CONVENIO_AUTORI ca
                                    on ca.seq_autorz = cor.seq_autorz and ca.cod_client_conven = cor.cod_client
                                        left join ACT263_CLIENTE_CONVENIO_CCUSTO cc
                                    on   ca.cod_client_conven = cor.cod_client and ca.cod_centro_custo  = cc.cod_centro_custo and ca.cod_client_conven = cc.cod_client_conven
                                        left join CLIENTE cli
                                    on  cli.cod_client = cor.cod_client
                                        inner join ACT263_CLIENTE_CONVENIO clc
                                    on  clc.cod_client_conven = ca.cod_client_conven
         where ( clc.des_email_vouche_eletro_notifi is not null or cc.des_email_vouche_eletro_notifi is not null )
               and mailitem_id is null
               and motivo_nao_envio is null
               and email_status is null       
      
        --Resultado
        Select @Registros as 'Registros a ser processados';


      
    --Faz somente se tem registros a serem processados
    --set @Registros = 1;
   
    IF @Registros > 20
    BEGIN
     set @Registros =20

    END
    IF @Registros > 0
    BEGIN
         set @RegistrosProcessados = 0
        WHILE(@Registros > 0) -- LOOP
         BEGIN
        
               set @Registros = @Registros - 1;  
             --Limpa valores do Anterior:
               Select @convenio = '';
               Select @cliente = '';
               Select @autorizador = '';
               Select @setor = '';
               Select @centrocusto = '';
               Select @passageiro = '';
               Select @corrida = '';
               Select @datasolicitacao = '';
               Select @dataatendimento = '';
               Select @dataembarque = '';
               Select @datadesembarque = '';
               Select @valor = '';
               Select @trajeto = '';
               Select @latlonembarque = '';
               Select @latlondesembarque = '';
               Select @emailconvenio = '';
               Select @emailccusto = '';
               Select @CorpoEmail = '';
               Select @emailCopia ='';
               Select @finalidade = '';          
               set @num_ano_corrid  = 0;
               set @num_corrid      = 0;

     

            --Loop dos dados obtidos

                        --Busca os dados a serem enviados
                        --###############################
                          
                            Select     top 1
                                    @num_ano_corrid    = t.num_ano_corrid,
                                    @num_corrid        = t.num_corrid,                           
                                    @convenio          =  cor.cod_client,
                                    @cliente           =  cli.nom_client,
                                    @autorizador       =  ISNULL(ca.cod_matric_autorz,'')  + ' - '+ ISNULL(ca.nom_autorz,''),
                                    @setor             =  ISNULL(ca.cod_centro_custo,'')  + ' - ' + ISNULL(cc.des_centro_custo,''),
                                    @centrocusto       =  ISNULL(cc.des_centro_custo,''),
                                    @passageiro        =  ISNULL(cor.nom_usuari,''),
                                    @corrida           =  convert(Varchar(40),cor.num_corrid) + '/' +convert(Varchar(40),cor.num_ano_corrid),
                                    @datasolicitacao   = (convert(Varchar(40),cor.dat_hora_cadast,103)+' '+left(convert(Varchar(40),cor.dat_hora_cadast,8),5)),
                                    @dataatendimento   = (convert(Varchar(40),cor.dat_hora_atendi,103) +' '+left(convert(Varchar(40),cor.dat_hora_atendi,8),5)) + ' RT:'+    convert(Varchar(40),cor.num_unidad_atendi),
                                    @dataembarque      = (convert(Varchar(40),t.dat_hora_embarq,103) +' '+left(convert(Varchar(40),t.dat_hora_embarq,8),5)),
                                    @datadesembarque   = (convert(Varchar(40),t.dat_hora_desemb,103) +' '+left(convert(Varchar(40),t.dat_hora_desemb,8),5)),
                                    @valor             =  replace(convert(Varchar(40),ISNULL(t.val_total_corrid,'0.00')),'.',',') +' ('+ convert(Varchar(40),t.qtd_km_desemb-t.qtd_km_embarq) + 'km)',
                                    @trajeto           = 'Origem: '+(ISNULL(cor.nom_lograd_local,'')  + ', ' + convert(Varchar(40),ISNULL(cor.num_local,0))+' '+ ISNULL(cor. des_comple_local,''))+' - '+
                                                           'Destino: '+(ISNULL(ft.nom_lograd_local_desemb  + ', ' + convert(Varchar(40),ISNULL(ft.num_local_desemb,0)),'Não Informado')),
                                    @latlonembarque    = (convert(Varchar(15),ISNULL(t.val_latitu_embarq,0.0))) +','+ (convert(Varchar(15),ISNULL(t.val_longit_embarq,0.0))),
                                    @latlondesembarque = (convert(Varchar(15),ISNULL(t.val_latitu_desemb,0.0))) +','+ (convert(Varchar(15),ISNULL(t.val_longit_desemb,0.0))), 
                                    @emailconvenio     = ISNULL(clc.des_email_vouche_eletro_notifi,''),
                                    @emailccusto       = ISNULL(cc.des_email_vouche_eletro_notifi,''),
                                    @finalidade         = ISNULL(ft.des_observ_local_refere_desemb,'Não Informada')
                            from
                                    ACT263_CORRIDA_TRAJETO t with(nolock)                                   
                                        inner join  act263_corrida_autoriza_fatura ft
                                    on t.num_ano_corrid =  ft.num_ano_corrid and t.num_corrid =  ft.num_corrid                                   
                                        inner join ACT263_CORRIDA cor with(nolock)
                                    on t.num_ano_corrid =  cor.num_ano_corrid and t.num_corrid =  cor.num_corrid                                    
                                        left join  ACT263_CLIENTE_CONVENIO_AUTORI ca
                                    on ca.seq_autorz = cor.seq_autorz and ca.cod_client_conven = cor.cod_client
                                        left join ACT263_CLIENTE_CONVENIO_CCUSTO cc
                                    on   ca.cod_client_conven = cor.cod_client and ca.cod_centro_custo  = cc.cod_centro_custo and ca.cod_client_conven = cc.cod_client_conven
                                        left join CLIENTE cli
                                    on  cli.cod_client = cor.cod_client
                                        inner join ACT263_CLIENTE_CONVENIO clc
                                    on  clc.cod_client_conven = ca.cod_client_conven 
                                   
                            where  ( clc.des_email_vouche_eletro_notifi is not null or cc.des_email_vouche_eletro_notifi is not null )
                                    and mailitem_id is null
                                    and motivo_nao_envio is null
                                    and email_status is null   
                                  order by cor.dat_hora_atendi
                                 
                                   
                      IF  @num_ano_corrid  > 0  and @num_corrid > 0
                      BEGIN
                        --Resultado
                        /*
                        Select @convenio as convenio,
                               @cliente as cliente,
                               @autorizador as autorizador,
                               @setor as setor,
                               @centrocusto as centrocusto,
                               @passageiro as passageiro,
                               @corrida as corrida,
                               @datasolicitacao as datasolicitacao,
                               @dataatendimento as dataatendimento,
                               @dataembarque as dataembarque,
                               @datadesembarque as datadesembarque,
                               @valor as valor,
                               @trajeto as trajeto,
                               @latlonembarque as latlonembarque,
                               @latlondesembarque as latlondesembarque,
                               @emailconvenio as emailconvenio,
                               @emailccusto as emailccusto,
                               @num_ano_corrid as numerocorrida,
                               @num_corrid as anocorrida;
                               */ 

                        --Monta Html
                        --##############################################################################################
                          Select @assunto = 'Voucher Eletronico - Taxi Faixa Vermelha'

                          Select @CorpoEmail = '<!doctype html>
                                                <html>
                                                <head>
                                                <meta charset="utf-8">
                                                <title>Voucher Eletronico - Taxi Faixa Vermelha: '+@convenio+' - '+@corrida+' - '+@datasolicitacao+'</title>
                                                </head>
                                                <body>
                                                    <br>
                                                    <div>
                                                        <p style="font-size:10pt;font-family:"Arial","sans-serif"">
                                                        <h3>Associacao Radiotaxi Faixa Vermelha<br>
                                                        Rua Dr Goulin, 1661 - Bairro Hugo Lange - Curitiba - PR - CEP: 80040-280<br>
                                                        Telefone: (41) 3262 6262 - CNPJ: 77.522.225/0001-32 </h3> 
                                                        <br>  
                                                        Voucher Eletronico - Informe de utilizacao: '+@convenio+' - '+@corrida+' - '+@datasolicitacao+'
                                                        </p>
                                                        <table border=0 cellspacing=3 cellpadding=0 style="width:487.5pt;font-size:10pt;font-family:"Arial","sans-serif"">
                                                            <tr>
                                                                <td style="width:20.0%;padding:.75pt;text-align:right">Convenio:</td>
                                                                <td style="width:74.0%;padding:.75pt">'+@convenio+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Cliente:</td>
                                                                <td style="padding:.75pt;">'+@cliente+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Autorizador:</td>
                                                                <td style="padding:.75pt;">'+@autorizador+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Setor:</td>
                                                                <td style="padding:.75pt">'+@setor+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Centro de Custo:</td>
                                                                <td style="padding:.75pt">'+@centrocusto+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Passageiro:</td>
                                                                <td style="padding:.75pt">'+@passageiro+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Corrida:</td>
                                                                <td style="padding:.75pt">'+@corrida+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Solicitacao:</td>
                                                                <td style="padding:.75pt">'+@datasolicitacao+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Atendimento:</td>
                                                                <td style="padding:.75pt">'+@dataatendimento+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Embarque:</td>
                                                                <td style="padding:.75pt">'+@dataembarque+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Desembarque:</td>
                                                                <td style="padding:.75pt">'+@datadesembarque+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Valor R$:</td>
                                                                <td style="padding:.75pt">'+@valor+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Trajeto:</td>
                                                                <td style="padding:.75pt">'+@trajeto+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Finalidade:</td>
                                                                <td style="padding:.75pt">'+@finalidade+'</td>
                                                            </tr>                                                           
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Latitude/Longitude Embarque:</td>
                                                                <td style="padding:.75pt">'+@latlonembarque+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Latitude/Longitude Desembarque:</td>
                                                                <td style="padding:.75pt">'+@latlondesembarque+'</td>
                                                            </tr>
                                                            <tr>
                                                                <td style="padding:.75pt;text-align:right">Mapa:</td>
                                                                <td style="padding:.75pt"><a href="https://www.google.com.br/maps/dir/'+@latlonembarque+'/'+@latlondesembarque+'">Visualizar</a></td>
                                                            </tr>
                                                        </table>
                                                    </div>
                                                </body>
                                                </html>';
                       
                      --  Select @CorpoEmail as CorpoEmail01;                      
                      --  Select @CorpoEmail as CorpoEmail02;

                        --Envia Email
                        --##############################################################################################
                        IF @emailconvenio <> '' and @emailccusto <> ''                         
                           Select @emailscliente =  @emailconvenio +';'+ @emailccusto; 
                        ELSE
                            BEGIN      
                              IF @emailconvenio <> '' and @emailccusto = ''
                                  Select @emailscliente = @emailconvenio
                              ELSE IF @emailconvenio = '' and @emailccusto <> ''
                                  Select @emailscliente = @emailccusto
                              END;

                      
                        Select   @emailscliente  as emailcliente

                        Select   @emailcopia = 'comercial@taxifaixavermelha.com.br;adrianoboller@gmail.com;celio@girotron.com.br';
                       -- select   @emailscliente =  'adrianoboller@gmail.com;celio@girotron.com.br';      
                      --  Select   @emailcopia,@emailscliente 

                        IF (@emailscliente<> ''AND  @assunto <> '' AND @CorpoEmail <> '' AND @emailcopia<>'') 
                        BEGIN                        
                                                     
                             --Com Email                                                
                                EXEC msdb.dbo.sp_send_dbmail
                                    @profile_name = 'DBAMail',
                                    @recipients = @emailscliente,
                                    @copy_recipients = @emailcopia,
                                    @subject = @assunto,
                                    @body = @CorpoEmail,
                                    @body_format = 'HTML',
                                    @mailitem_id = @ID OUTPUT;
                                   
                                --Grava ID de envio no Corrida Trajeto
                            
                                IF (@ID is not null)AND @ID>0
                                BEGIN
                                   
                                   
                                    set  @RegistrosProcessados = @RegistrosProcessados + 1
                                   
                                    declare @tentativas int
                                   
                                    select  @tentativas = (ISNULL(num_tentativas,0) + 1)                                   
                                     from ACT263_CORRIDA_TRAJETO   
                                    Where
                                         num_ano_corrid = @num_ano_corrid and num_corrid = @num_corrid                                
                       
                                    Update
                                       ACT263_CORRIDA_TRAJETO                                             
                                         Set mailitem_id = @ID,  email_status = 'processando', num_tentativas = @tentativas
                                    Where
                                         num_ano_corrid = @num_ano_corrid and num_corrid = @num_corrid
                                    END
                        END
                       
                        ELSE
                       
                        BEGIN
                             --Sem email   
                             
                            --  select 'ERRO NOS CAMPOS @emailscliente @assunto @CorpoEmail @emailcopia', @emailscliente as a,@assunto as b, @CorpoEmail as c, @emailcopia as d
                             
                             
                                Select @emailcopia = 'comercial@taxifaixavermelha.com.br;adrianoboller@gmail.com;celio@girotron.com.br';                              
                                Select @Erro = 'Verificar o email da Corrida: '+@num_corrid +'/'+ @num_ano_corrid;                       
                                EXEC msdb.dbo.sp_send_dbmail
                                    @profile_name = 'DBAMailErro',
                                    @recipients = 'sac_vouchers_erro@faixavermelha.com.br',
                                    @copy_recipients = @emailcopia,
                                    @subject = 'Voucher sem email',
                                    @body = @Erro;
                                   
                                   
                     
                   END
                       
           
              END ELSE
                  BEGIN                                
                  
               --  Select 'Registro(s) processado(s) com sucesso'; 
                      set @Registros = 0;             
                  END ---    IF  @num_ano_corrid  > 0  and @num_corrid > 0
        END --WHILE(@Registros>0) Loop Fim
       
     Select  @RegistrosProcessados as 'Registro(s) processado(s) com sucesso'; 
    END  -- IF @Registros > 0
     ELSE
      Select  'Nenhum Registro processado'; 
   
    END


---------------------------------------------------------------------------------------------------------------------------







---------------------------------------------------------------------------------------------------------------------------

RESULTADO

CLIQUE AQUI PARA ASSISTIR AO VIDEO 

 





Nenhum comentário:

Postar um comentário