Envio de e-mails via fila de e-mails
Esta instrução mostra como utilizar a fila de e-mails para enviar mensagens de e-mail, ao invés do componente nativo Enviar e-mail.
O problema do componente nativo é que ele bloqueia a execução do processo até a conclusão do envio da mensagem. Assim, por exemplo, caso esse componente seja utilizado em uma fórmula visual disparada automaticamente por um gatilho do sistema ao salvar um registro, o processo de salvamento fica bloqueado até o envio do e-mail concluir. Caso o envio do e-mail falhe momentaneamente, o processo de salvamento do registro falha. Se essa falha for uma indisponibilidade do servidor de e-mails, o processo irá levar vários segundos para falhar (até atingir o timeout da conexão). Para processos executados em lote ainda há a situação de que uma das mensagens "do meio" da lista pode falhar durante o envio, interrompendo a execução do processo pela metade, levando à situações em que algumas mensagens são enviadas e outras não.
O uso da fila de e-mails visa evitar esse tipo de situação. A inclusão do e-mail na fila é uma operação rápida, que envolve apenas o banco de dados, e nenhum recurso extra de rede. As mensagens existentes na fila são coletadas e enviadas posteriormente pela execução da fórmula visual 452 - Envia e-mails na fila de e-mails, que está agendada para ser executada automaticamente a cada minuto e a sua execução é monitorada pelo Dude. Assim, caso o processo de envio das mensagens da fila de e-mails pare por algum motivo (trancamento do sistema ou erro de rede que impeça o envio das mensagens), um alerta é gerado para que possamos atuar nele. De qualquer forma, as mensagens existentes na fila não são perdidas; no máximo elas serão enviadas um pouco mais tarde, quando a fila de e-mails for reprocessada.
O processo
Em resumo, o que precisa ser feito é incluir o registro com os campos que compõe a mensagem na tabela CFJLFAHOR_FILAEMAILS. Há 2 formas de fazer isso, conforme descrito abaixo.
Inclusão manual
Insira o registro manualmente na tabela CFJLFAHOR_FILAEMAILS, utilizando os componentes SQLActivity ou o componente de execução de SQLs nativo da Totvs. A tabela possui a seguinte estrutura:
- ID int identity not null,
- DESTINATARIO varchar(1024),
- CC varchar(1024),
- CCO varchar(1024),
- ASSUNTO varchar(1024) not null,
- MENSAGEM varchar(max) not null,
- HTML varchar(5) not null,
- DATAHORAINCLUSAO datetime not null,
- PROCESSOORIGEM varchar(1024),
- ENVIADO bit not null
Detalhamento
- Campo HTML: aceita os valores True ou False. Quando preenchido como True, indica que o conteúdo da mensagem (campo MENSAGEM) deve ser interpretado como um HTML e não como texto puro.
- Campo DATAHORAINCLUSAO: informe a data/hora atual, do momento da inserção.
- Campo PROCESSOORIGEM: texto livre, que permite identificar mais facilmente qual o processo que incluiu a mensagem na fila.
- Uma sugestão, para fórmulas visuais, é incluir o texto Fórmula visual IDXXX - NOME DA FÓRMULA VISUAL.
- Campo ENVIADO: informe 0 ao inserir um registro novo. Ele será alterado para 1 quando o processo de envio efetivamente fizer o envio da mensagem.
Inclusão via fórmula visual, a partir dos resultados de uma SQL
Com frequência ocorre a situação em que existe uma consulta SQL que retorna os dados que precisam ser enviados por e-mail. Assim, foi criado uma fórmula visual que pega o resultado de uma SQL e, automaticamente, faz a inserção destes na tabela CFJLFAHOR_FILAEMAILS. Para isso, estruture a fórmula visual da seguinte forma:
- Inclua o componente nativo Executar consulta SQL.
- Vincule ele em uma consulta que retorne os seguintes campos: DESTINATARIO, CC, CCO, ASSUNTO, MENSAGEM, HTML (com os valores True ou False) e PROCESSOORIGEM. Esses campos precisam existir no resultado (podem ser incluídos campos extras, mas estes são os campos mínimos que devem estar contidos no resultset produzido ao executar a consulta). Campos não utilizados devem estar preenchidos com NULL.
- Inclua o componente nativo Executar fórmula visual.
- Propriedade Código da coligada: defina como 1
- Propriedade ID da fórmula visual: defina como 453 (que é a fórmula visual Inclui e-mail na fila de envio a partir de dataset)
- Propriedade Conjunto de dados: ligue ela à propriedade DataSet do componente Executar consulta SQL inserido no passo anterior.
Durante a execução, o sistema irá executar a consulta SQL e o resultado será transferido para a fórmula visual 453 - Inclui e-mail na fila de envio a partir de dataset. A fórmula visual irá se encarregar de inserir os dados na tabela CFJLFAHOR_FILAEMAILS.