hb_sendmail() com SSL em xHarbour 1.2.3

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

Moderador: Moderadores

fernando_volp
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 10 Nov 2020 15:47
Localização: São Paulo/SP

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por fernando_volp »

Boa tarde a todos!

Uso o xHarbour com o hb_sendmail() para enviar e-mails a muito tempo, sem problemas.

Porem a empresa que presto serviço mudou para o office365, e o mesmo utiliza autenticação SSL, e não estou conseguindo adaptar o hb_sendmail().

Pesquisei em alguns posts do grupo e muitos falam sobre linkar as libs do OpenSSL e TipSSL.lib, ssleay32.lib e libeay32.lib.

Tentei mas sem sucesso.

Alguém já teve essa necessidade e conseguiu fazer funcionar.

Desde já agradeço.

Segue um código de exemplo, com PRG e EXE.XBP

Código: Selecionar todos

FUNCTION MAIN
	cls
		
	**************
	** Funciona **
	**************
	mDe:="sistema@volp.com.br"+space(16)
	mPara:="fernando@volp.com.br"+space(23)
	mAssunto:="TESTE DE E-MAIL OFFICE 365"
	mSmtp:="smtp.volp.com.br"+space(34)
	mPop:="pop.volp.com.br"+space(35)
	mSenha:="senha"+space(40)
	mAutentica:="sistema@volp.com.br"+space(31)
	mPorta:=587
	mSSL:="N"
	
	lTestarSSl:=.F.

	******************
	** Não Funciona **
	******************
	if lTestarSSl
		mDe:="volpindustria01@gmail.com"+space(16)
		mPara:="fernando@volp.com.br"+space(23)
		mAssunto:="TESTE DE E-MAIL OFFICE 365"
		mSmtp:="smtp.gmail.com"+space(34)
		mPop:="pop.gmail.com"+space(35)
		mSenha:="senha"+space(40)
		mAutentica:="volpindustria01@gmail.com"+space(31)
		mPorta:=587
		mSSL:="S"
	endif
	
	do while .T.		
		@ 02,12 say "De     :" get mDe
		@ 03,12 say "Para   :" get mPara
		@ 04,12 say "Assunto:" get mAssunto
		
		@ 06,12 say "SMTP   :" get mSmtp
		@ 07,12 say "POP    :" get mPop
		@ 08,12 say "Usuario:" get mAutentica
		@ 09,12 say "Senha  :" get mSenha
		@ 10,12 say "Porta  :" get mPorta
		@ 11,12 say "SSL    :" get mSSl valid mSSl$"SN"
		@ 11,25 say "S=.T.       N=.F."
		
		@ 24,0 say "Digite os dados ou ESC para sair"+space(40)
		read
		
		if lastkey()==27 //ESC
			exit
		endif
		
		@ 24,0 say "Enviado e-mail para "+mPara
		
/*
		IF ! tip_SSL()
			alert( 'Require SSL support' )
			RETURN .F.
		ENDIF
*/
		
		if HB_SENDMAIL(allTrim(mSmtp),mPorta,allTrim(mDe),{mPara},,,"TESTE CORPO DO E-MAIL",allTrim(mAssunto),,alltrim(mAutentica),allTrim(mSenha),allTrim(mPop),,.F.,.T.,.T.,,,,if(mSSl=="S",.T.,.F.))
			alert("Email enviado para "+allTrim(mPara))
		else
			alert("FALHA AO ENVIAR E-MAIL PARA "+allTrim(mPara))
		endif
		
		loop
	enddo

	RETURN NIL

Código: Selecionar todos

CINI = 
C_OUTPUTFOLDER = 
DEFFILE = 
INCLUDEFOLDERS = 
LAUTORUN = 
LDEBUG = .F.
LGUI = .F.
LIBFOLDERS = 
LMT = .F.
LNOAUTOFWH = .F.
LPRG_CLASSICDEBUG = .F.
LPRG_DEBUG = .F.
LUSEDLL = .F.
MAPFILE = 
MYC_FLAGS = 
MYDEFINES = 
MYLINK_FLAGS = 
MYPRG_FLAGS = 
MYRC_FLAGS = 
MYSLY_FLAGS = 
OUTPUTFOLDER = 
PRG_OUTPUTFOLDER = 
RC_OUTPUTFOLDER = 
RUNARGUMENTS = 
SLY_OUTPUTFOLDER = 
STARTIN = 
TARGETFOLDER = 

[email.prg]
MYC_FLAGS = 
MYDEFINES = 
MYPRG_FLAGS = 

[C:\xHB\Lib\TipSSL.lib]
[C:\xHB\Lib\ssleay32.lib]
[C:\xHB\Lib\libeay32.lib]
[C:\xHB\OpenSSL-Win32\lib\libssl.lib]
[C:\xHB\OpenSSL-Win32\lib\openssl.lib]
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por sygecom »

Fernando,

O office365 usa o protocolo TLS em vez de SSL e, desconfio que o xharbour não de conta dessa opção, eu vi que o Harbour.

Particularmente aqui estou usando já faz alguns anos uma DLL que desenvolvemos em Lazarus, se quiser posso compartilhar a DLL e os fontes aqui para você, ou procure alguma solução em Harbour.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
fernando_volp
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 10 Nov 2020 15:47
Localização: São Paulo/SP

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por fernando_volp »

Leonardo,

Obrigado pela resposta, se puder compartilhar a dll e o fonte comigo ficarei muito grato.
Confesso que já estou a mais de 1 semana na peleja para resolver esse problema.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por sygecom »

Fernando,
Segue em anexo: DLL, FONTES DA DLL(.PAS), EXEMPLO EM XHARBOUR(.PRG)

Estou usando a versão 1.6.4 do Lazarus para compilar a DLL.
versao_lazarus.png
Anexos
email_delphi.rar
(1.37 MiB) Baixado 290 vezes
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
fernando_volp
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 10 Nov 2020 15:47
Localização: São Paulo/SP

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por fernando_volp »

Leonardo, boa noite!

Obrigado por compartilhar o fonte.
Compilei e o programa executam, mas em o ALERT('enviado com sucesso'), em coloquei uma informação errada para testar o if ! e o programa exibiu o ALERT('Erro ao conectar ao email, favor revisar').

Estou achando que o problema é em algumas das minhas libs.

No XBP você link como as:

[lib\tipssl.lib]
[lib\ssleay32.lib]
[lib\libeay32.lib]
[lib\tip.lib]
[lib\codepage.lib]

Você teria elas para me passar? Fiz um teste de baixar no xharbour.org mas com as de lá dá erro de compilação (lib corrompida).

Obrigado mais um vez.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por Kapiaba »

Leonardo, qual é a configurações para enviar email via app direto da minha conta de email da microsoft?

Sender(remetente):

Server(servidor):

User :

Password: xxxxxxxxxx

Port: 587

SSL yes or no ?

Obg. abs.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por Kapiaba »

Leonardo quando eu tenho um email da microsoft(Outlook) como configuro, igual este teu exemplo?

Código: Selecionar todos

FUNCTION Email_Office365()

   LOCAL nPORTSMTP:=587
   LOCAL cServerIP:='smtp.gmail.com'
   LOCAL cUSER:='seuemail@gmail.com'
   LOCAL cFROM:='seuemail@gmail.com'
   LOCAL cPASS:='sua_senha'
   LOCAL cMSG:='Descricao da mensagem', cASUNTO:='Descrição do assunto'
   LOCAL cBCC:='email_destino_copia_oculta@dominio.com.br'
   LOCAL cCC:='email_destino_copia@dominio.com.br'
   LOCAL cQUEM:='destino@nomedominio.com.br'

   LOCAL lSSL_EMAIL:=.T.  //.F.=NÃO USA SSL(ANTIGA PORTA 25) e .T.=USA SSL
   LOCAL lTLS_EMAIL:=.T.  //.F.=NÃO USA TLS e .T.=USA TSL( EX: OFICCE365 )
   LOCAL lEMAIL_CONF:=.F. // .F.=NÃO ENVIA CONFIRMAÇÃO DE LEITURA e .T.=ENVIA CONFIRMAÇÃO DE LEITURA
   LOCAL lHTML:=.T.       // .F.=MODO TEXTO e .T.=MODO

RETURN NIL
gmail.com, não tenho problemas de envio com xHarbour... Agora com conta microsoft....

Obg. abs.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por Kapiaba »

FiveWin, é o bicho... kkkkk, aparentemente, o outlook.com está dominado.

https://i.imgur.com/77PKeoJ.png

Imagem

Obg. abs.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por Kapiaba »

Funciona bem, mas o outlook.live.com, tem limitação de envio de mensagens. O meu é o grátis. Acho que o pago, deve ser ilimitado... Sei lá...
outlook365.png
Amanhã, continuo os testes, quando eles liberarem o envio novamente.

Abs.
Avatar do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por jairfab »

Joao disponibiliza o código aqui pra gente testar também!
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por Itamar M. Lins Jr. »

Olá!
Uso o Harbour com isso ai, SSL, TLS, faz tempo só o Harbour.(2009)
Fivewin não tem isso, nem nenhuma lib gráfica do Harbour, todos usam o que tem no contrib do Harbour.
Alias o Harbour 3.4 do Viktor que corrigiu muita coisa que estava bugada, depois desistiu e passou a usar CURL LIB, que é usada em praticamente todas as linguagens de programação Open Source.

Código: Selecionar todos

/* Copyright 2009 Viktor Szakats (vsz.me/hb) */

#require "hbssl"
#require "hbtip"

#if ! defined( __HBSCRIPT__HBSHELL )
REQUEST __HBEXTERN__HBSSL__
#endif

#include "simpleio.ch"

PROCEDURE Main( cFrom, cPassword, cTo, cHost )

   LOCAL nPort
   LOCAL lSTARTTLS := .F.

   IF ! tip_SSL()
      ? "Error: Requires SSL support"
      RETURN
   ENDIF

   hb_default( @cFrom    , "<from@example.net>" )
   hb_default( @cPassword, "password" )
   hb_default( @cTo      , "to@example.org" )
   hb_default( @cHost    , "localhost" )

   cHost := Lower( cHost )

   /* SMTPS works with SSL/TLS on port 465 and with STARTTLS
      on port 587. STARTTLS mode is fully automatic and requires
      SSL/TLS be disabled at first (it will be activated on
      request after STARTTLS command) */

   DO CASE
   CASE cHost == "apple" .OR. "@icloud.com" $ cFrom .OR. "@mac.com" $ cFrom .OR. "@me.com" $ cFrom
      cHost := "smtp.mail.me.com"; lSTARTTLS := .T.
   CASE cHost == "fastmail" .OR. "@fastmail.com" $ cFrom .OR. "@fastmail.fm" $ cFrom
      cHost := "smtp.fastmail.com"
   CASE cHost == "gmx.net" .OR. "@gmx.net" $ cFrom .OR. "@gmx.ch" $ cFrom .OR. "@gmx.de" $ cFrom
      cHost := "mail.gmx.net"
   CASE cHost == "google" .OR. "@gmail.com" $ cFrom .OR. "@googlemail.com" $ cFrom
      cHost := "smtp.gmail.com"
   CASE cHost == "mail.ru" .OR. "@mail.ru" $ cFrom
      cHost := "smtp.mail.ru"
   CASE cHost == "netease" .OR. "@163.com" $ cFrom
      cHost := "smtp.163.com"
   CASE cHost == "office365"
      cHost := "smtp.office365.com"; lSTARTTLS := .T.
   CASE cHost == "outlook" .OR. "@outlook.com" $ cFrom .OR. "@hotmail.com" $ cFrom
      cHost := "smtp-mail.outlook.com"; lSTARTTLS := .T.
   CASE cHost == "sina" .OR. "@sina.com" $ cFrom
      cHost := "smtp.vip.sina.com"
   CASE cHost == "uol" .OR. "@uol.com.br" $ cFrom
      cHost := "smtps.uol.com.br"
   CASE cHost == "yahoo" .OR. "@yahoo.com" $ cFrom
      cHost := "smtp.mail.yahoo.com"
   CASE ":" $ cHost
      IF TUrl():New( cHost ):nPort != -1
         nPort := TUrl():New( cHost ):nPort
      ENDIF
      lSTARTTLS := ( nPort == 587 )
      cHost := TUrl():New( cHost ):cServer
   ENDCASE

   hb_default( @nPort, iif( lSTARTTLS, 587, 465 ) )

   ? "Host:", cHost, hb_ntos( nPort ), iif( lSTARTTLS, "(STARTTLS)", "" )

   ? tip_MailSend( ;
      cHost, ;
      nPort, ;
      cFrom, ;
      cTo, ;
      /* CC */, ;
      {} /* BCC */, ;
      "test: body", ;
      "test: subject", ;
      { __FILE__ } /* attachment */, ;
      cFrom, ;
      cPassword, ;
      "", ;
      /* nPriority */, ;
      /* lRead */, ;
      .T. /* lTrace */, ;
      .F., ;
      /* lNoAuth */, ;
      /* nTimeOut */, ;
      /* cReplyTo */, ;
      nPort == 465 )

   RETURN
Detalhe, até pelo hbrun funciona. Harbour 3.4

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por Kapiaba »

Boa noite Jair, assim que eu finalizar a lógica, disponibilizarei todo o material gratuitamente para toda comunidade. Como estou fazendo em @SAY do FiveWin, e não sou lá grande coisa em @SAY, pois sou viciado em RECURSOS, vai demorar um pouquinho, pois é um pé no s... acertar coordenadas usando código em FiveWin. Já está 80% operacional. Aguarde e confie que eu não nego nada aos FiveWinners do Brasil. Forte abraço. I Love FiveWin. Obg. abs.

Jair, acredite se quiser, eu estou aprendendo a programar em @SAY... kkkkkkkkk, koisa horrorosa... kkkkkkk
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

hb_sendmail() com SSL em xHarbour 1.2.3

Mensagem por Kapiaba »

Pronto Jair, baixe e teste, se modificar, por favor post as mudanças, ou me envie no skype. Many thanks.

Download:

https://mega.nz/file/ZY0lCC4b#J087eB2aP ... ifxl_41Qco

Obg. abs.
Responder