TOTVS 12 com versão 12.1.15 ou superior.
Servidor de e-mails com suporte a SMTP e uma conta válida para envio de e-mails.
O Datasul Mail Service é um serviço que permite que tanto aplicações Progress como HTML possam realizar de forma simples o envio de e-mails.
Por se tratar de um serviço a chamada para o envio do e-mail se dá através de chamadas REST. A imagem abaixo exemplifica a arquitetura do serviço:
Para utilização do serviço é preciso se atentar a algumas configurações no produto.
Através do contexto datasul-mail/resources estão disponíveis 3 serviços para envio de e-mails com as seguintes assinaturas:
Já o objeto Mail que é encaminhado no corpo das requisições possui a seguinte estrutura:
As mensagens de confirmação de entrega e falhas serão retornadas a caixa de e-mail do usuário que estiver sendo utilizado como sender pelo serviço de e-mail. Entretanto, quando informado um endereço de e-mail válido no atributo readNotificationTo este receberá o e-mail de confirmação de leitura. |
O envio de e-mail ocorre de forma assíncrona desta forma os erros ou retornos de falhas do envio propriamente dito não são resgatados no momento da execução. Isso se deve ao fato de que o Datasul Mail Service delega ao servidor SMTP o envio da mensagem, sendo que este pode não efetuar o envio no momento em que for solicitado, variando de acordo com a sua fila de despachos e parametrizações. |
A API a ser utilizada no progress é a utapi019.p. Esta API está preparada para enviar e-mails de acordo com a configuração indicada no programa 'Parâmetros Email Foundation' (btb962zb).
Para mais informações sobre como utilizar a API utapi019, utilize a documentação disponivel em Utilização de API de envio de e-mail.
Está é a API para utilização nos projetos com o THF.
A API está disposta em forma de um service através do nome: 'MailService'.
Sua principal função é abstrair a chamada REST (utilizando o Datasul Rest) para a API utapi019, que centraliza todo e qualquer envio de e-mail, tornando a configuração de envio de e-mails única. Ela possui apenas 2 métodos com as seguintes assinaturas:
var controller; controller = function ($rootScope, $scope, MailService) { this.sendEmail = funcion() { MailService.send({ reply: "[email protected]", alias: "[email protected]", to: "[email protected]", cc: "[email protected]", subject: "Datasul Mail Service", content: "Hello from the other side !" }, function(result) { console.info(result); }); }; }; controller.$inject = ['$rootScope', '$scope', 'MailService']; |
var controller; controller = function ($rootScope, $scope, MailService) { this.onSelectFiles = function(selectedFiles) { if (angular.isDefined(selectedFiles)) { this.sendEmail(selectedFiles); } }; this.sendEmail = funcion(files) { MailService.sendWithAttachment({ reply: "[email protected]", alias: "[email protected]", to: "[email protected]", cc: "[email protected]", subject: "Datasul Mail Service", content: "Hello from the other side !" }, files, function(result, mail) { console.info(result, mail); }, function(progress, evt, mail) { console.warn(progress, evt, mail); }, function(result, status, headers, config, email) { console.error(result, status, headers, config, email); }); }; }; controller.$inject = ['$rootScope', '$scope', 'MailService']; ------------------------------------------------------------------------------------ <html> <head></head> <body> <label class="btn btn-default pull-right" role="button" for="file-input"> Selecione os arquivos... </label> <span class="file-text"></span> <input id="file-input" type="file" style="position:fixed;top:-999px;" ngf-select ngf-change="controller.onSelectFiles($files);" ngf-multiple="true" ngf-allow-dir="false"/> </body> </html> |
{utp\utapi019.i2} RUN utp/utapi019.p PERSISTENT SET h-utapi019. create tt-envio2. assign tt-envio2.versao-integracao = 1 tt-envio2.exchange = NO tt-envio2.servidor = 'smtp.totvs.com.br' tt-envio2.porta = 587 tt-envio2.destino = "[email protected]" tt-envio2.remetente = "[email protected]" tt-envio2.assunto = "Datasul Mail Service" tt-envio2.mensagem = "Hello from the other side !" tt-envio2.importancia = 2 tt-envio2.log-enviada = NO tt-envio2.log-lida = NO tt-envio2.acomp = NO tt-envio2.formato = 'html'. CREATE tt-mensagem. ASSIGN tt-mensagem.mensagem = tt-envio2.mensagem. caso não sejam informados os campos da tabela tt-paramEmail2, serão utilizados as configurações dos parâmetros de email foundation */ CREATE tt-paramEmail2. ASSIGN tt-paramEmail2.caminhoEmail = 1 tt-paramEmail2.mailUser = '<user_email>' tt-paramEmail2.mailPass = '<senha_email>' tt-paramEmail2.TLS = NO tt-paramEmail2.SSL = NO tt-paramEmail2.DEBUG = YES. CREATE ttAttachment. ASSIGN ttAttachment.fileName = '<nome_arquivo>'. COPY-LOB FROM FILE ttAttachment.FILENAME TO ttAttachment.fileContent NO-CONVERT NO-ERROR. /* caso esteja disponível apenas o binário do arquivo, basta atribui-lo ao campo ttAttachment.fileContent */ RUN pi-execute4 IN h-utapi019 (INPUT Table tt-envio2, INPUT Table tt-mensagem, INPUT Table tt-paramEmail2, INPUT TABLE ttAttachment, OUTPUT Table tt-erros). if return-value = "NOK" then do: for each tt-erros: disp tt-erros with 1 column width 300. end. end. |