Enviar email anexando um executável

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Enviar email anexando um executável

Mensagem por asimoes »

O GMAIL não permite anexar esses tipos de arquivos:

.ade, .adp, .apk, .appx, .appxbundle, .bat, .cab, .chm, .cmd, .com, .cpl, .dll, .dmg, .exe, .hta, .ins, .isp, .iso, .jar, .js, .jse, .lib, .lnk, .mde, .msc, .msi, .msix, .msixbundle, .msp, .mst, .nsh, .pif, .ps1, .scr, .sct, .shb, .sys, .vb, .vbe, .vbs, .vxd, .wsc, .wsf, .wsh

Mas tem como "enganar" o gmail usando TipEncoderBase64()


oEncoder := TipEncoderBase64():New()

Hb_MemoWrit( "ASAPREV.TXT", oEncoder:Encode( Hb_MemoRead( [ASAPREV.EXE] ) ) ) //para encondar

Hb_MemoWrit( "ASA.EXE", oEncoder:Decode( Hb_MemoRead( [ASAPREV.TXT] ) ) ) //desencodar

O arquivo asaprev.txt pode ser anexando ao email, quando o arquivo for baixando ele pode ser desencodado usando o método Decode.

Um teste usando de recepção de email desanexando o arquivo encodado
Vai precisar da OPENSSL a última versão é 1.1.1G baixar a versão 32bits

Baixar aqui: https://bintray.com/vszakats/generic/openssl

Depois que baixar, copiar as DLL´s que ficam na raiz: libcrypto-1_1.dll e libssl-1_1.dll para a pasta onde for testar a recepção do email

Código: Selecionar todos

#if ! defined( __HBSCRIPT__HBSHELL )
   REQUEST __HBEXTERN__HBSSL__
#endif

   IF ! tip_SSL()
      RETURN Nil
   ENDIF
   
   cUser     := StrTran( "xhbsistemas", "@", "&at;" )
   
   cPassword := "1234567"
   
   oUrl1 := tUrl():New( "pops://" + cUser + ":" + cPassword + "@pop.gmail.com" )
      
   oUrl1:cUserid := Strtran( cUser, "&at;", "@" )

   oClient := TIPClientPOP():New( oUrl1, .F. )
 
   IF ! oClient:Open()
      ? "Connection error:", oClient:lastErrorMessage()
   ENDIF
   
   aMail = oClient:RetrieveAll( .T. ) //.t.  deleta os emails recuperados

   FOR i := 1 TO Len( aMail )

      cMsg := ""
   
      WHILE ( oAtt := aMail[ i ]:NextAttachment() ) != Nil

         IF ! EMPTY( oAtt:GetFileName() )

            cMsg += "Anexo: " + oAtt:GetFileName() + Hb_Eol()

            IF ! oAtt:DetachFile(); BREAK; ENDIF
            ENDIF

      ENDDO
   
   NEXT

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Enviar email anexando um executável

Mensagem por Vlademiro »

Obrigado pelas dicas.

Tenho uma dúvida: esse procedimento
já funciona no Harbour 3.2 ?

Valeu
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Enviar email anexando um executável

Mensagem por JoséQuintas »

Vlademiro escreveu:Tenho uma dúvida:
esse procedimento já funciona no Harbour 3.2 ?
Na prática não vai funcionar nem no Harbour 3.4, se o Harbour 3.4 não for gerado com as LIBs que precisa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Enviar email anexando um executável

Mensagem por asimoes »

JoséQuintas escreveu:Na prática não vai funcionar nem no Harbour 3.4, se o Harbour 3.4 não for gerado com as LIBs que precisa.
Não sou tão pessimista assim, eu tento:

Provavelmente não precisa compilar o harbour usando o pacote da OPENSSL no post acima, mas se precisar olhe o SET HB_WITH_OPENSSL

Apontar para a pasta onde baixou o OPENSSL

-L\openssl\1.1.1G\lib;

Se for gerar o habour usar

SET HB_WITH_OPENSSL=D:\OPENSSL\1.1.1G\include

O mais importante é ter as dll´s na pasta.

Para o GMAIL só por SSL

Isso serve para o Harbour 3.2
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Enviar email anexando um executável

Mensagem por lwinter »

Aproveitando que estamos falando de email. Alguem saberia me dizer se o harbour trabalha com criptografia SSL/TLS para email?
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Enviar email anexando um executável

Mensagem por lwinter »

Parabens asimoes, excelente dica.
Com o encode64 pode-se incluir campo em arquivo json e enviar audios, imagens, arquivos e etc... Basta fazer o encode64 e inclui-lo em um campo de string e empacotar no json.
Nao sabia que era possivel no harbour.

rgds,
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Enviar email anexando um executável

Mensagem por JoséQuintas »

asimoes escreveu:.ade, .adp, .apk, .appx, .appxbundle, .bat, .cab, .chm, .cmd, .com, .cpl, .dll, .dmg, .exe, .hta, .ins, .isp, .iso, .jar, .js, .jse, .lib, .lnk, .mde, .msc, .msi, .msix, .msixbundle, .msp, .mst, .nsh, .pif, .ps1, .scr, .sct, .shb, .sys, .vb, .vbe, .vbs, .vxd, .wsc, .wsf, .wsh
Mas tem como "enganar" o gmail usando TipEncoderBase64()
Mas pera aí....
por default os anexos já são convertidos pra base64 no email, então isso seria equivalente a converter duas vezes.
Se o problema é só a extensão, porque converter duas vezes com o base64?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Enviar email anexando um executável

Mensagem por lwinter »

Jose, acredito que sim. Mas esta solucao é para contornar o envio de EXE para nao ser barrado pelo provedor. De qualquer forma qualquer arquivo que voce enviar vai ter que passar pelo encode do provedor, portanto tanto faz se mandamos um txt ou exe. Mas sim, do outro lado a solucao do asimoes tera que decodifcar para base normal.
lucimauro
Usuário Nível 3
Usuário Nível 3
Mensagens: 465
Registrado em: 21 Set 2004 21:02
Localização: Sobral-CE

Enviar email anexando um executável

Mensagem por lucimauro »

Sobre trabalhar com TLS acredito que sim
Usando -> copiar as DLL´s que ficam na raiz: libcrypto-1_1.dll e libssl-1_1.dll para a pasta onde for testar a recepção do email
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Enviar email anexando um executável

Mensagem por tonicm »

E porque não enviar o ficheiro zipado?
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Enviar email anexando um executável

Mensagem por asimoes »

tonicm escreveu:E porque não enviar o ficheiro zipado?
GMAIL barra!

Agora pode encodar um zip que passa.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Enviar email anexando um executável

Mensagem por lwinter »

ola lucimauro

Me desculpe a ignorancia mas voce poderia me dar um exemplo de como usar estas funcoes? O certificado esta fixo dentro desta lib ou posso criar novos certificados? Caso afirmativo, como?

Obriagdo!

rgds,
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Enviar email anexando um executável

Mensagem por asimoes »

Exemplo para codificar um exectável e enviar por email usando GMAIL

oEncoder := TipEncoderBase64():New()

Hb_MemoWrit( "TESTE.TXT", oEncoder:Encode( Hb_MemoRead( [TESTE.EXE] ) ) )

Ponto para enviar o executável pelo GMAIL como TESTE.TXT

Hb_MemoWrit( "TESTE.EXE", oEncoder:Decode( Hb_MemoRead( [TESTE.TXT] ) ) )

Aqui retorna o executável ao seu binário original TESTE.EXE
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Enviar email anexando um executável

Mensagem por asimoes »

lwinter escreveu:ola lucimauro

Me desculpe a ignorancia mas voce poderia me dar um exemplo de como usar estas funcoes? O certificado esta fixo dentro desta lib ou posso criar novos certificados? Caso afirmativo, como?

Obriagdo!

rgds,
Não precisa de certificação, basta ter as dll´s na pasta do executável e usar o exemplo que eu postei
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Enviar email anexando um executável

Mensagem por asimoes »

Pode até zipar depois que encodar se o txt ficar grande. e enviar como zip o gmail não vai reclamar
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder