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
---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
Nenhum comentário:
Postar um comentário