Histórico da Página
...
Houve a necessidade de criar uma rotina automatizada para envio de e-mails, garantindo mais eficiência na comunicação e padronização das mensagens enviadas pelo sistema. Durante o processo, identificou-se a importância de permitir a configuração de eventos para disparo automático, assegurando que as notificações sejam enviadas de forma precisa e oportuna.
03. SOLUÇÃO
...
Gerenciador de E-mails
Personalização de Envio de E-mails
...
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.
8 - Assun. Email - Assunto que irá aparecer no E-mail que será enviado.
9 - Func. Dados - Função de dados para extrair informações da rotina para preencher o E-mail conforme tópico Função de Dados Exemplo.10 - 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 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 | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "Totvs.ch" function dados() Local cCompHtml := "" oJErrorData := 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>" oJErrorData["1"] := BA1->BA1_NOMUSR oJErrorData["2"] := BA1->(BA1_CODINT+BA1_CODEMP+BA1_MATRIC+BA1_TIPREG+BA1_DIGITO) oJErrorData["3"] := BA1->BA1_EMAIL oJErrorData["4"] := BA1->BA1_TELEFO oJErrorData["5"] := cCompHtml Return oJErrorData |
...
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
<!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 {
background-color: #6c9ebd;
color: #ffffff;
text-align: center;
padding: 10px;
border-radius: 8px 8px 0 0;
}
.footer {
border-radius: 0 0 8px 8px;
margin-top: 20px;
font-size: 14px;
}
h2 {
text-align: center;
color: #333;
}
.info {
padding: 10px 0;
font-size: 16px;
color: #555;
}
.info strong {
color: #222;
}
table {
width: 100%;
.info strong { border-collapse: collapse;
colormargin-top: #22220px;
}
tableth,
td {
widthborder: 1px solid 100%#ddd;
border-collapsepadding: collapse12px;
margintext-topalign: 20pxleft;
}
th,
{
background-color: #6c9ebd;
td {
color: #ffffff;
border: 1px solid #ddd;}
padding: 12px;tr:nth-child(even) {
textbackground-aligncolor: left#f9f9f9;
}
th.company-name {
background-font-size: 20px;
color: #6c9ebd#333;
colortext-align: #ffffffcenter;
}
tr:nth-child(even) {margin-bottom: 20px;
backgroundfont-colorweight: #f9f9f9bold;
}
</style>
.company-name {</head>
<body>
<div class="container">
font-size: 20px;<div class="header">
color: #333;<h2>Usuario Bloqueado</h2>
</div>
text-align: center;
<p class="info">
margin-bottom: 20px;
<strong>Prezado(a):</strong> ##1, portador da matrícula
font-weight: bold;
}<strong>##2</strong>
</style>
</head>p>
<body>
<div<p class="container">info">Esperamos que esta mensagem o(a) encontre bem.</p>
<div<p class="headerinfo">
<h2>Usuario Bloqueado</h2>
</div>
<p class="info">
Verificamos em nosso sistema que seu plano de saúde foi bloqueado devido
à inadimplência. Conforme <strong>Prezado(a):</strong> ##1, portador da matrícula
Resolução Normativa nº 593 da ANS (Agência
<strong>##2</strong>
Nacional de </p>
<p class="info">Esperamos que esta mensagem o(a) encontre bem.</p>
<p class="info">
Verificamos em nosso sistema que seu plano de saúde foi bloqueado devidoSaúde Suplementar), o contrato pode ser suspenso ou
rescindido caso haja atraso superior a 60 dias, consecutivos ou não.
</p>
<p class="info">
àPara inadimplência.restabelecer Conformeseus aserviços Resoluçãode Normativaassistência nºà 593saúde, da ANS (Agênciaé necessário
Nacionalregularizar deos Saúde Suplementar), o contrato pode ser suspenso oudébitos pendentes. Caso já tenha efetuado o pagamento,
rescindido caso haja atraso superior pedimos a 60gentileza dias,de consecutivosdesconsiderar ouesta nãomensagem.
</p>
<p class="info">
Para restabelecer seus serviços de assistência à saúde, é necessário
Estamos à disposição para auxiliá-lo(a) no que for necessário.
</p>
<table>
regularizar os<thead>
débitos pendentes. Caso já tenha efetuado o pagamento,
<tr>
pedimos a gentileza de desconsiderar esta mensagem.<th>Nome</th>
</p>
<th>Data <p class="info">
de Inclusão</th>
Estamos à disposição<th>Data para auxiliá-lo(a) no que for necessário.
de Bloqueio</th>
</p>tr>
<table></thead>
<thead><tbody>
<tr>##5
</tbody>
<th>Nome<</th>table>
<div class="footer">
<th>Data de Inclusão</th><p>
Entre em contato conosco <th>Data de Bloqueio</th>
para mais informações.<br />Email: ##3 |
Telefone: </tr>##4
</thead>p>
<tbody></div>
</div>
##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></body>
</html> |
Função de Configuração
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
//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 |
Testando funcionalidade conforme HTML e dados criados:
...

