Á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

Introdução

O gerenciador de e-mails é uma ferramenta que permite configurar dados de e-mails utilizados como remetentes em diversas rotinas. Ideal para clientes que desejam personalizar e-mails.

Funcionalidades

Entre as principais funcionalidades do gerenciado 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 levando em consideração a operadora, empresa, contrato e subcontrato.

Personalização do Corpo do E-mail

...

O gerenciador de contas de 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:

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:

  • 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


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 - 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

Tela de configuração de e-mail:

Image Removed

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

2 - Usu. Conta / Senha - Dados do e-mail remetente que irá enviar o E-mail.

3 - Autentica? - ComboBox que se marcado com Sim  deverá ter os dados do Passo 4 como obrigatório.

...

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

6 - SMTP / Porta - SMTP do E-mail que está sendo configurado como Rementente (No exemplo estamos utilizando Gmail) e a Porta que deve ser usada conforme seleção do Passo 7 (No exemplo, utilizamos a porta SSL).

7 - Utiliza TLS? / Utiliza SSL? - Uma das duas deve estar como Sim para poder fazer a conexão com o SMTP  e deverá ser configurado conforme informações do Passo 6.

Image Removed

8 - Assun. Email - Assunto que irá aparecer no E-mail que será enviado.

9 - Corpo E-mail - Dados do HTML e CSS para personalizar o E-mail que será enviado conforme tópico Código exemplo de HTML para geração do E-mail.

       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 {
        fontmax-familywidth: Arial, sans-serif600px;
        margin: 40px 0auto;
        padding: 020px;
        backgroundborder-colorradius: #f4f4f48px;
       } background-color: #ffffff;
      .container {
 box-shadow: 0 4px 8px rgba(0, 0,  max-width: 600px0, 0.05);
      }
  margin: 40px auto;
  .header,
      padding: 20px;.footer {
        borderbackground-radiuscolor: 8px#6c9ebd;
        background-color: #ffffff;
        boxtext-shadow: 0 4px 8px rgba(0, 0, 0, 0.05)align: center;
        padding: 10px;
      }  border-radius: 8px 8px 0 0;
      .header,}
      .footer {
        backgroundborder-color: #6c9ebdradius: 0 0 8px 8px;
        colormargin-top: #ffffff20px;
        textfont-alignsize: center14px;
      }
      padding:h2 10px;{
        bordertext-radius: 8px 8px 0 0align: center;
        color: #333;
      }
      .footerinfo {
        border-radiuspadding: 010px 0 8px 8px;
        marginfont-topsize: 20px16px;
        font-sizecolor: 14px#555;
      }
      h2 {
        text-align: center;.info strong {
        color: #333#222;
      }
      .infotable {
        paddingwidth: 10px 0100%;
        fontborder-sizecollapse: 16pxcollapse;
        colormargin-top: #55520px;
      }
      th,
    .info  strongtd {
        colorborder: 1px solid #222#ddd;
      }
  padding: 12px;
   table {
    text-align: left;
   width: 100%;
  }
      border-collapse: collapse;th {
        marginbackground-topcolor: 20px#6c9ebd;
      }  color: #ffffff;
      th,}
      tdtr:nth-child(even) {
        borderbackground-color: 1px solid #ddd#f9f9f9;
      }
  padding: 12px;    .company-name {
        textfont-alignsize: left20px;
      }
  color: #333;
        th {text-align: center;
        backgroundmargin-colorbottom: #6c9ebd20px;
        colorfont-weight: #ffffffbold;
      }
      tr:nth-child(even) {</style>
  </head>
  <body>
    <div  background-color: #f9f9f9;
class="container">
        }<div class="header">
      .company-name {
 <h2>Usuario Bloqueado</h2>
      font-size: 20px;</div>

        color: #333;<p class="info">
        text-align: center;
   <strong>Prezado(a):</strong> ##1, portador da matrícula
     margin-bottom: 20px;
  <strong>##2</strong>
      font-weight: bold;
</p>

       }
    </style>
  </head>
  <body>
<p class="info">Esperamos que esta mensagem o(a) encontre bem.</p>
      <div<p class="containerinfo">
      <div class="header">
 Verificamos em nosso sistema que seu plano <h2>Usuario Bloqueado</h2>
   de saúde foi bloqueado devido
   </div>

     à <p class="info">
        <strong>Prezado(a):</strong> ##1, portador da matrícula
inadimplência. Conforme a Resolução Normativa nº 593 da ANS (Agência
        Nacional de Saúde  <strong>##2</strong>
      </p>

Suplementar), o contrato pode ser suspenso ou
        <p class="info">Esperamos que esta mensagem o(a) encontre bem.rescindido caso haja atraso superior a 60 dias, consecutivos ou não.
      </p>
      <p class="info">
        VerificamosPara emrestabelecer nossoseus sistemaserviços quede seuassistência planoà de saúde, foié bloqueado devidonecessário
        àregularizar inadimplência.os Conformedébitos apendentes. ResoluçãoCaso Normativa tenha 593efetuado da ANS (Agênciao pagamento,
        Nacionalpedimos dea Saúdegentileza Suplementar),de odesconsiderar contratoesta podemensagem.
 ser suspenso ou
   </p>
     rescindido caso haja atraso superior a 60 dias, consecutivos ou não<p class="info">
        Estamos à disposição para 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>
        regularizar os débitos pendentes. Caso já tenha efetuado o pagamento,
  <th>Nome</th>
            <th>Data de Inclusão</th>
          pedimos a gentileza<th>Data de desconsiderar esta mensagem.
Bloqueio</th>
          </p>tr>
       <p class="info">
 </thead>
        <tbody>
 Estamos à disposição para auxiliá-lo(a) no que for necessário.      ##5
        </tbody>
      </p>table>

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

...

</p>
      </div>
    </div>
  </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:

...

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

...