Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DADOS GERAIS

Produto:

TOTVS Saúde Planos

Solucoes_totvs
Solucao

Solucoes_totvs_cross
SolucaoCross

Solucoes_totvs_parceiros
SolucaoParceiros

Solucoes_totvs_parceirosexptotvs
SolucaoParcsExpsTOTVS

Linha de Produto:

Linha Protheus 

Linhas_totvs

Segmento:

Saúde

Segmentos_totvs
Segmento

Módulo:GESTÃO DE CONTRATOS / FAMÍLIAS
Função:GERENCIADOR DE EMAILCONTAS DE E-MAIL
Issue :DSAUBE-26611

02.

...

SITUAÇÃO/REQUISITO

Houve a necessidade de Foi necessário criar uma rotina automatizada para o envio de e-mails, garantindo mais eficiência na comunicação e padronização das mensagens enviadas com o objetivo de tornar a comunicação mais eficiente e padronizar as mensagens geradas pelo sistema.

Durante o esse processo, identificou-se a importância de permitir a configuração de eventos para disparo automático, assegurando garantindo que as notificações sejam enviadas de forma precisa e oportunano momento adequado.

03. SOLUÇÃO

Gerenciador de Contas de E-

...

mail

...

O gerenciador de

...

contas de

...

Introdução

...

e-mail foi desenvolvido para otimizar e automatizar o envio de e-mails

...

de forma rápida, segura e personalizada.

Introdução

Com uma interface intuitiva, o gerenciador de contas de e-mail permite a personalização de mensagens com campos dinâmicos. Além disso, pode ser utilizado em customizações das mais simples as mais complexas.

O gerenciador de contas de e-mail também prioriza a segurança, utilizando protocolos de envio confiáveis (como SMTP com autenticação TLS).

Funcionalidades

Entre as principais funcionalidades do gerenciado de e-mails, destacam-se:

...

Funcionalidades

Entre as principais funcionalidades do configurador de e-mails, destacam-se:

Layouts em HTML e CSS

    • Criação de layouts específicos em HTML e CSS para cada configuração.

Configuração de Remetentes

    • Permite configurar diferentes remetentes para rotinas diferentes ou para uma mesma rotina

...

    • .

Personalização do Corpo do E-mail

...

    • Personalize o

...

    • corpo do e-

...

    • mail de acordo com diferentes rotinas

...

    • , utilizando a mesma conta de e-mail ou contas distintas, conforme a necessidade sem precisar alterar código-fonte.

Como Acessar a Rotina

  1. Para acessar o gerenciador de contas de e-mail, digite no campo que está na parte superior do lado esquerdo a seguinte informação: PLMNG001.
  2. Voce também pode acessar a rotina navegando pelo menu:Miscelanea > Configurações > Gerenciador de Contas de E-mail. 

Tela de configuração de e-mail:

Tela de configuração de e-mail:

Image Removed

1 - Título Conf. - Título de identificação do Gerenciador de E-mail.

...

  • Título Conf. - Título de identificação do objetivo da configuração.
  • Usu. Conta / Senha - Dados do e-mail remetente que irá enviar o

...

  • e-mail.

...

  • Autentica? -

...

  • Define se a conta utiliza fator de autenticação. Ao selecionar a opção 1 - Sim, é obrigatório preencher os campos Usuário Aut. e Senha Aut. Caso contrário, o preenchimento desses campos não é necessário.
  • Usuario Aut. / Senha Aut. - Usuário de e-mail com dados de autenticação e token de autenticação para liberar o envio de

...

  • e-mail.


Image Added

...

5 - Remetente - Remetente que será enviado o E-mail.

...


Nota

Em alguns provedores de serviços de e-mail, a senha de acesso à conta e a senha de autenticação para aplicativos externos são diferentes. Além disso, pode ser necessário autorizar o uso da conta por aplicativos de terceiros para o envio de e-mails. Recomenda-se consultar o provedor de e-mail utilizado para verificar se as configurações e credenciais estão corretas.


  • Remetente - Endereço do remetente que será utilizado para o envio do e-mail.
  • SMTP - SMTP do E-mail que está sendo configurado como

...

  • remetente  (

...

  • no exemplo estamos utilizando Gmail)

...

  • .
  • Porta - Porta do SMTP.
  • Utiliza TLS? / Utiliza SSL? -

...

  • A configuração pode variar de acordo com o provedor de serviços de e-mail utilizado, consulte o provedor de e-mail utilizado para verificar.

Image Added


  • Assun. E-mail

Image Removed

...

  • - Assunto que irá aparecer no E-mail que será enviado.

...

  • Corpo E-mail - Dados do HTML e CSS para personalizar o

...

  • corpo do e-mail que será enviado

...

  • . Exemplo disponível no tópico Exemplo de Código HTML Para o Corpo do E-mail.

...

Image Added


Exemplo de Código HTML Para o Corpo do E-mail

Bloco de código
languagexml
themeRDark
titleExemplo
linenumberstrue
<!DOCTYPE html>
<html lang="pt-BR">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <style>
      body {
        font-family: Arial, sans-serif;
        margin: 0;
        padding: 0;
        background-color: #f4f4f4;
      }
      .container {
        max-width: 600px;
        margin: 40px auto;
        padding: 20px;
        border-radius: 8px;
        background-color: #ffffff;
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
      }
      .header,
      .footer {

       OBS: Esta função recebe alguns ## que será substituídos por dados dinamicos que serão retornados da Função de Dados.

10 - Func. Dados - Função de dados para extrair informações da rotina para preencher o E-mail.

       OBS: A função de dados deve retornar um objeto JSON onde os atributos devem ser um sequencial de numeral conforme o exemplo no tópico Função de Dados Exemplo.

11 - Funcao Conf. - Função que chamará esse Gerenciador de E-mail (No Exemplo está sendo chamado ao Bloquear um Beneficiário).

       OBS: Esta função não pode ser do tipo static e deverá fazer a chamada da função conforme tópico Função de Configuração

Função de Dados Exemplo:

Bloco de código
languagec#
themeRDark
titleExemplo
linenumberstrue
#INCLUDE "Totvs.ch"

function dados()

	Local cCompHtml   := ""
	Local oJEmailData := JsonObject():New()

	cCompHtml += "<tr>"
	cCompHtml += "	<td>" + AllTrim(BA1->BA1_NOMUSR) + "</td>"
	cCompHtml += "	<td>" + DTOC(BA1->BA1_DATINC) + "</td>"
	cCompHtml += "	<td>" + DTOC(BA1->BA1_DATBLO) + "</td>"
	cCompHtml += "</tr>"    

    oJEmailData["1"] := BA1->BA1_NOMUSR  
	oJEmailData["2"] := BA1->(BA1_CODINT+BA1_CODEMP+BA1_MATRIC+BA1_TIPREG+BA1_DIGITO)  
	oJEmailData["3"] := BA1->BA1_EMAIL  
	oJEmailData["4"] := BA1->BA1_TELEFO  
	oJEmailData["5"] := cCompHtml

Return oJEmailData

Código exemplo de HTML para geração do E-mail

Bloco de código
languagexml
themeRDark
titleExemplo
linenumberstrue
<!DOCTYPE html>
<html lang="pt-BR">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <style>
      body {
        font-family: Arial, sans-serif;
        margin: 0;
        padding: 0;
        background-color: #f4f4f4#6c9ebd;
      }
      .container {
        max-widthcolor: 600px#ffffff;
        margintext-align: 40px autocenter;
        padding: 20px10px;
        border-radius: 8px 8px 0 0;
      }
     background-color: #ffffff; .footer {
        boxborder-shadowradius: 0 0 4px8px 8px rgba(0, 0, 0, 0.05);
        margin-top: 20px;
      }  font-size: 14px;
      .header,}
      .footerh2 {
        backgroundtext-coloralign: #6c9ebdcenter;
        color: #ffffff#333;
      }
  text-align: center;    .info {
        padding: 10px 0;
        borderfont-radiussize: 8px 8px 0 016px;
        color: #555;
      }
      .footerinfo strong {
        border-radius: 0 0 8px 8px;
  color: #222;
      }
      margin-top: 20px;table {
        font-sizewidth: 14px100%;
      }
      h2 {border-collapse: collapse;
        textmargin-aligntop: center20px;
        color: #333;}
      }th,
      .infotd {
        paddingborder: 1px 10pxsolid 0#ddd;
        font-sizepadding: 16px12px;
        colortext-align: #555left;
      }
      .info strongth {
        background-color: #222#6c9ebd;
      }
      table {color: #ffffff;
        width: 100%;}
        border-collapse: collapse;tr:nth-child(even) {
        marginbackground-topcolor: 20px#f9f9f9;
      }
      th,
.company-name {
       td { font-size: 20px;
        bordercolor: 1px solid #ddd#333;
        paddingtext-align: 12pxcenter;
        textmargin-alignbottom: left20px;
         }font-weight: bold;
      th {}
    </style>
  </head>
  background-color: #6c9ebd;<body>
    <div class="container">
   color: #ffffff;
  <div class="header">
   }
      tr:nth-child(even) {<h2>Usuario Bloqueado</h2>
      </div>

  background-color: #f9f9f9;
   <p class="info">
  }
      .company-name {
   <strong>Prezado(a):</strong> ##1, portador da matrícula
     font-size: 20px;
  <strong>##2</strong>
      color: #333;</p>

      <p  text-align: center;
    class="info">Esperamos que esta mensagem o(a) encontre bem.</p>
    margin-bottom: 20px;
 <p class="info">
      font-weight: bold;
 Verificamos em nosso sistema que }
seu plano de saúde </style>
foi bloqueado </head>devido
  <body>
    <div class="container">
 à inadimplência. Conforme a Resolução <div class="header">
    Normativa nº 593 da ANS (Agência
    <h2>Usuario Bloqueado</h2>
   Nacional de  </div>

      <p class="info">
Saúde Suplementar), o contrato pode ser suspenso ou
         <strong>Prezado(a):</strong> ##1, portador da matrícula
        <strong>##2</strong>rescindido caso haja atraso superior a 60 dias, consecutivos ou não.
      </p>

      <p class="info">Esperamos>
  que esta mensagem o(a) encontre bem.</p>
 Para restabelecer seus serviços de <p class="info">
  assistência à saúde, é necessário
      Verificamos em nossoregularizar sistemaos quedébitos seupendentes. planoCaso de saúdetenha foiefetuado bloqueadoo devidopagamento,
        àpedimos inadimplência. Conforme a Resoluçãogentileza Normativade desconsiderar 593esta damensagem.
 ANS (Agência
    </p>
    Nacional de Saúde Suplementar), o contrato pode ser suspenso ou<p class="info">
        rescindidoEstamos casoà hajadisposição atraso superior a 60 dias, consecutivos ou nãopara auxiliá-lo(a) no que for necessário.
      </p>

      <p class="info"><table>
        Para<thead>
 restabelecer seus serviços de assistência à saúde,  é necessário<tr>
            <th>Nome</th>
     regularizar os débitos pendentes. Caso  tenha efetuado<th>Data o pagamento,de Inclusão</th>
        pedimos   a gentileza<th>Data de desconsiderar esta mensagem.
Bloqueio</th>
          </p>tr>
       <p class="info"> </thead>
        Estamos<tbody>
 à   disposição para auxiliá-lo(a) no que for necessário.##5
        </p>
tbody>
      <table></table>

        <thead><div class="footer">
          <tr><p>
          Entre em <th>Nome</th>
contato conosco para mais informações.<br />Email: ##3 |
     <th>Data de Inclusão</th>
   Telefone: ##4
        <th>Data de Bloqueio</th>
    </p>
      </tr>div>
        </thead>div>
        <tbody>
          ##5
        </tbody>
      </table>

      <div class="footer">
        <p>
          Entre em contato conosco para mais informações.<br />Email: ##3 |
          Telefone: ##4
        </p>
      </div>
    </div>
  </body>
</html>

Função de Configuração

Bloco de código
languagec#
themeRDark
titleExemplo
linenumberstrue
//Código acima

// instanciando a classe Gerenciadora de E-mail
oemail := totvs.protheus.health.plan.configurator.EmailConfigurator():New()

// Chamada do método responsável por fazer todo o processamento de envio de E-mail.
// param1 = Cod. do ID do gerenciador,
// param2 = email destinatário,
// param3 = Diretório de anexos que deseja enviar no email (Pode receber um array de diretórios),
// param4 = email que você deseja enviar como cópia
ojson := oemail:SendEmailUsingConfigurator(, "[email protected]",, )

//Código abaixo

...

body>
</html>


  • Func. Dados - Função que retorna os dados que por sua vez irão substituir as marcações no HTML com o ##Número.
    • Para função de usuário, deve-se inserir a chamada completa U_FuncaoUsuario sem parênteses.
    • A função de dados deve retornar um objeto JSON onde os atributos devem ser um sequencial de numeral conforme o exemplo no tópico Exemplo de Função de Dados.

Exemplo de Função de Dados:

Bloco de código
languagec#
themeRDark
titleExemplo
linenumberstrue
#INCLUDE "Totvs.ch"

function dados()

	Local cCompHtml   as character
	Local oJEmailData := JsonObject():New()

	cCompHtml += "<tr>"
	cCompHtml += "	<td>" + AllTrim(BA1->BA1_NOMUSR) + "</td>"
	cCompHtml += "	<td>" + DTOC(BA1->BA1_DATINC) + "</td>"
	cCompHtml += "	<td>" + DTOC(BA1->BA1_DATBLO) + "</td>"
	cCompHtml += "</tr>"    

    oJEmailData["1"] := BA1->BA1_NOMUSR  
	oJEmailData["2"] := BA1->(BA1_CODINT+BA1_CODEMP+BA1_MATRIC+BA1_TIPREG+BA1_DIGITO)  
	oJEmailData["3"] := BA1->BA1_EMAIL  
	oJEmailData["4"] := BA1->BA1_TELEFO  
	oJEmailData["5"] := cCompHtml

Return oJEmailData


  • Funcao Conf. - Campo destinado ao nome da função ou método que utilizará a configuração de e-mail. Cada função ou método deve ser inserido em uma nova linha no grid, permitindo o uso compartilhado da configuração por diferentes pontos do sistema.
    • A função inseridano campo Funcao Conf. não pode ser do tipo static e deverá fazer a chamada da função conforme tópico Função de Configuração.
    • Para função de usuário, deve-se inserir a chamada completa U_FuncaoUsuario sem parênteses.

Envio de E-mail Utilizando a Configuração do Gerenciador de Contas de E-mail

Após configurar uma conta no Gerenciador de Contas de E-mail, essa configuração poderá ser utilizada para o envio de mensagens, considerando os dados do remetente e o layout em HTML definidos. Para isso, basta utilizar o método SendEmailUsingConfigurator da classe EmailConfigurator. Com apenas alguns parâmetros, a classe identifica automaticamente a configuração apropriada, executa a função de retorno de dados, realiza a substituição das marcações no conteúdo e efetua o envio do e-mail.

Sintaxe

EmailManager:SendEmailUsingManager(< cConfigCode >, < cRecipient >, < aAttachments >, < cCopOcult >)

Parâmetros

Nome

Tipo

Descrição

Obrigatório

cConfigCodecaractereCódigo sequencial criado pelo gerenciador de contas de e-mail no campo ID Config. 
cRecipientcaractereEndereço de e-mail do destinatário que receberá o e-mail.X
aAttachmentsArrayArray contendo em cada posição o caminho completo do arquivo com a extensão que será enviado junto ao e-mail.
cCopOcultcaractere

Endereços de e-mail dos destinatários que receberão a mensagem como cópia oculta (CCO), separados por vírgula.


Retorno

Nome

Tipo

Descrição

oJSendmail

json

Retorna um objeto do tipo json com dois atributos.  

oJSendmail["sendMail"] - Retorna .T. caso o e-mail tenha sido enviado com sucesso, ou retorna .F. caso tenha ocorrido algum erro no envio.

oJSendmail["message"] - Mensagem de sucesso ou de erro.

Nota

O parâmetro cConfigCode deve ser utilizado apenas quando for necessário informar diretamente o código de uma configuração de e-mail, dispensando o preenchimento do campo "Função Conf." na configuração. Nesse caso, não é preciso vincular a função ou método de origem ao envio do e-mail. No entanto, vale destacar que, ao utilizar esse parâmetro, qualquer alteração de layout exigirá a modificação direta no código-fonte, o que reduz a flexibilidade e dificulta a manutenção. Por esse motivo, recomenda-se evitar o uso do parâmetro cConfigCode e, sempre que possível, preencher o campo "Função Conf." com o nome da função responsável pelo envio do e-mail.

Função de Configuração

Primeiro identifique a função (não pode ser static) ou método que irá realizar o processo de envio do e-mail.

No exemplo abaixo a função de usuário MailTste irá utilizar uma das configurações do gerenciador de contas de e-mail para enviar o e-mail. 

Bloco de código
languagec#
themeRDark
titleExemplo
linenumberstrue
User Function MailTste()
	Local oemail as object
	Local ojson  as object 

	// instanciando a classe Gerenciadora de E-mail
	oemail := totvs.protheus.health.plan.manager.EmailManager():New()

	// Chamada do método responsável por fazer todo o processamento de envio de e-mail
	// param1 = ID do gerenciador
	// param2 = e-mail destinatário
	// param3 = Diretório de anexos que deseja enviar no e-mail (Pode receber um array de diretórios)
	// param4 = e-mail que você deseja enviar como cópia
	ojson := oemail:SendEmailUsingManager(NIL,"[email protected]")
	
	If  ojson["sendMail"] //.T. = enviado com sucesso
		FWAlertSuccess(ojson["message"])
	Else	
		 FWAlertError(ojson["message"])
	EndIf
 
Return


Após a implementação da classe de envio de e-mail, acesse o Gerenciador de Contas de E-mail, localize a configuração que será utilizada e insira o nome da função no campo "Função Conf." do grid que no caso será U_MAILTSTE. É possível adicionar quantas linhas forem necessárias para registrar diferentes funções ou métodos que utilizarão essa configuração.

Log de Erros

A maioria dos erros relacionados ao envio de e-mails utilizando o Gerenciador de Contas de E-mail pode ser analisada em maior detalhe no arquivo LogConfigEmail.log, localizado no diretório LOGPLS, dentro da pasta PROTHEUS_DATA.

Vídeo com o resultado das configurações acima:

View file
nameTeste de E-mail.mp4
height250

04. DEMAIS INFORMAÇÕES

Atualização do Dicionário de Dados

inclusão de itens da tabela BZD no Arquivo SX3:

Campo

Tipo

Tamanho

Decimal

Titulo

Descrição

Relação

Usado

Obrigatório

Exibe Browser

Visual

Contexto

VLDUSR

CBox

Help

BZD_FILIALCaracter80

Filial    

Filial do Sistema
NãoNãoNão



Filial do Sistema  

BZD_IDCaracter60

ID Config.

ID Config.NextNumero("BZD", 1, "BZD_ID", .T.)SimSimNãoVisualReal

ID do configuradorgerenciador

BZD_TITCFGCaracter1000

Titulo Conf.  

Titulo da configuracao
SimSimSimAlterarReal

Titulo da configuracao

BZD_REMTNTCaracter2540

Remetente

Remetente
SimSimSimAlterarRealVAZIO() .OR. ValidMail(M->BZD_REMTNT)

Remetente

BZD_SMTPCaracter2540

SMTP

SMTP
SimSimSimAlterarReal

SMTP

BZD_USUARICaracter2540

Usu. Conta

Usuario
SimSimNãoAlterarRealVAZIO() .OR. ValidMail(M->BZD_USUARIO)

Usuario

BZD_SENHACaracter2540

Senha

Senha
SimSimNãoAlterarReal

Senha

BZD_PORTANúmeral60

Porta

Porta
SimSimSimAlterarReal

Porta

BZD_AUTENTCaracter10

Autentica?

Autentica?"1"SimSimNãoAlterarReal
0=Nao;1=Sim

Autentica?

BZD_USUAUTCaracter2540

Usuario Aut.

Usuario Aut.
SimNãoNãoAlterarRealVAZIO() .OR. ValidMail(M->BZD_USUAUT)

Usuario Autenticador

BZD_SENAUTCaracter2540

Senha Aut.

Senha Aut.
SimNãoNãoAlterarReal

Senha Aut.

BZD_ASSUNTCaracter2540

Assun. Email

Assun. Email
SimSimNãoAlterarReal

Assun. Email

BZD_FUNCAOCaracter200

Func. Dados

Func. Dados
SimNãoNãoAlterarReal

Func. Dados

BZD_HTMLMemo100

Corpo E-mail

Corpo E-mail
SimSimNãoAlterarReal

Corpo E-mail

BZD_USERGACaracter170

Log de Alter

Log de Alteracao
NãoNãoNãoVisualReal

Log de Alteração

BZD_USERGICaracter170

Log de Inclu

Log de Inclusao
NãoNãoNãoVisualReal


BZD_TLSCaracter10

Utiliza TLS?

Utiliza TLS?
SimSimNãoAlterarReal
0=Nao;1=Sim

Utiliza TLS?

BZD_SSLCaracter10

Utiliza SSL?

Utiliza SSL?
SimSimNãoAlterarReal
0=Nao;1=Sim

Utiliza SSL?

...

TabelaBZF
ModoCompartilhado
Modo UnidadeExclusivo
Modo EmpresaExclusivo
Chave ÚnicaBZF_FILIAL + BZF_IDBZD + BZF_FUNCFG
Nome 

Funcoes do Config. de email

Card documentos
InformacaoAs alterações de dicionário referente a essa implementação estarão disponíveis através de pacote de expedição contínua do plano de saúde com data igual ou superior

...

30/05/2025.
TituloImportante

05. ASSUNTOS RELACIONADOS

        Não se aplica



Templatedocumentos

...