Página 1 de 1

BLAT: Usando a DLL para enviar email

Enviado: 23 Mar 2010 07:14
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.

Re: BLAT: Usando a DLL para enviar email

Enviado: 13 Abr 2010 11:30
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

Re: BLAT: Usando a DLL para enviar email

Enviado: 13 Abr 2010 22:08
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.

Re: BLAT: Usando a DLL para enviar email

Enviado: 28 Abr 2010 14:56
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!

Re: BLAT: Usando a DLL para enviar email

Enviado: 29 Abr 2010 01:33
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