BLAT: Usando a DLL para enviar email

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

BLAT: Usando a DLL para enviar email

Mensagem por rochinha »

Amiguinhos,

Provavelmente já exista algo aqui no forum falando sobre isto, mas aqui vai minha experiência.

Eu uso o Blat a muito tempo em minha aplicação, mas sempre usei sua parte commandline, ou seja, o Blat.EXE.

Minha aplicação gerava um arquivo .TXT contendo o conteúdo do email e um .BAT que era executado via WinEXEC().

Mas o recurso interessante é via .DLL, desta forma não faço escritas excessivas no HD e torno o envio mais rápido, podendo até enviar muitos emails em pouco tempo.

O exemplo é simples e vou ilustrá-lo com pouco texto:

Código: Selecionar todos

#include "fivewin.ch"
#Include "dll.ch"

function main( cbody ,;
               cserver ,;
               cto ,;
               cf ,;
               csubject ,;
               cu ,;
               cpw ,;
               cattach, lHtml )
     lHtml := .t. // Saida em formato HTML

     // Sequencia de comandos formatados com dados passados nos parâmetros
     BlatCMD := [ blat.txt] + ;
                [ -server ]   + alltrim(cserver) + ;
                [ -to ]       + alltrim(cto) + ;
                [ -f ]        + alltrim(cf) + ;
                [ -mailfrom ] + alltrim(cf) + ;
                [ -subject "] + alltrim(csubject) + ["] + ;
                [ -r ]        + ;
                [ -u ]        + alltrim(cu) + ;
                [ -pw ]       + alltrim(cpw) + ;
                [ -log "email.log" -debug ] + ;
                iif( lHtml, [ -html ], [] ) + ;
                iif( empty( cAttach ),[],[ -attach "] + alltrim(cattach) + ["])

     if lHtml // Se SIM formato o corpo do email em HTML
        cBody := FormHtml( cSubject, cBody )
     endif

     // Salvo o texto formatado
     memowrit( "blat.txt", cbody )

     // Faço o envio efetivo
     BlatSend( BlatCMD )

     // Ao gerar o arquivo de .LOG verifico se houve erros
     if file( "email.log" )
        BlatLOG := memoread( "email.log" )
        if "ERROR" $ Upper(BlatLOG)
           Mensagem( "Erro: arquivo de BLAT.LOG foi criado" )
           return .f.
        endif
     endif
     RETURN .T.
Para auxiliar esta função faço uso da função FormHtml() que formata o conteúdo dentro de tags HTML.

Código: Selecionar todos

Function FormHtml( cSubject, cBody )
   Local cOpen  := '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">' + CRLF 
         cClose := CRLF + 'Nossa empresa envia email somente para pessoas e empresas cadastradas em nosso sistema.' + CRLF + ;
                          'Caso tenha duvidas favor entrar em contato com nossa central de atendimento ao cliente.'
   cHTML := ;
      '<html>'  + CRLF + ;
      '<head>'  + CRLF + ;
      '   <meta http-equiv="Content-Type"' + CRLF + ;
      '         content="text/html; charset=iso-8859-1">' + CRLF + ;
      '</head>' + CRLF + ;
      '<body>'  + CRLF + ;
      '<pre>'   + CRLF + ;
       cBody    + CRLF + ;
      '</pre>'  + CRLF + ;
      '</body>' + CRLF + ;
      '</html>'
   Return cOpen + cHTML + cClose
Para completar faço a chamada a função existente na Blat.DLL que executa o envio:

Código: Selecionar todos

DLL32 FUNCTION BlatSend( BlatCMD AS STRING ) AS LONG PASCAL;
   FROM "Send" LIB "Blat.dll" 
Um exemplo da string de comandos:

Código: Selecionar todos

blat.txt -server mail.5volution.com.br -to contato@5volution.com.br -f contato@5volution.com.br -mailfrom contato@5volution.com.br -subject "Confirmacao de Pedido" -r  -u contato@5volution.com.br -pw 0123456 -log "email.log" -debug -html -attach "csimg1.gif"
OBS: Para enviar imagens EMBED basta trocar -attach por -embed.

Fiz o teste com a versão 2.6.2 desta .DLL que acompanha o Blat.EXE.
Editado pela última vez por Toledo em 03 Jun 2010 22:37, em um total de 1 vez.
Razão: O presente tópico foi movido da seção Fivewin, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com a Fivewin.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: BLAT: Usando a DLL para enviar email

Mensagem por Mário Isa »

olá!
Eu usava SMTPSEND para enviar
Mas alguns dos clientes passaram a não enviar.
Então troquei pro BLAT e continuam não enviando.
Eu acho que é porque a partir de algum tempo é preciso habilitar SSL.
E nem no SMTPSEND e nem no BLAT tem estas opções
Na internet alguns disseram que poderia utilizar o GMAIL para autenticar.
Mas ele também tá exigindo.

Vc sabe dizer de algum programa, tipo SMTPSEND ou BLAT, que faz a autenticação SSL ?
Mário
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: BLAT: Usando a DLL para enviar email

Mensagem por rochinha »

Amiguinho,

Baixe a versão mais atualizada do BLAT e verifique com BLAT -h quais comandos este suporta para passar por estes bloqueios.

Eu uso BLAT.DLL, faço autenticação para envio e estou enviando inclusive para HOTMAILs.

Esta sessão não é dedicada a respostas, abra um tópico para resolvermos seu problema.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
trooper7
Usuário Nível 2
Usuário Nível 2
Mensagens: 53
Registrado em: 19 Fev 2010 12:22
Localização: Ribeirão Preto/SP

Re: BLAT: Usando a DLL para enviar email

Mensagem por trooper7 »

Olá rochinha!

É possível usar este método no Clipper DOS, sem Xharbour?
Se sim, você poderia me mostrar algum exemplo ou algo do tipo?

Enviei um tópico perguntando como faria para enviar emails diretamente do sistema (https://pctoledo.org/forum/viewto ... =1&t=10587), mas eu creio que usando o Blat desta maneira, eu consiga resolver meu problema...

Agradeço desde já pela resposta!

Grande abraço!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: BLAT: Usando a DLL para enviar email

Mensagem por rochinha »

Amiguinho,

DLLs no Clipper não tem como, talvez no (x)Harbour isto seja possivel pois a DLL retorna mensagens e erros por string, numeros, etc.

Mas no seguinte tópico além de ser abordado este tema eu postei um código com função para usar uma série de aplicativos para este intuito:

Veja aqui
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder