Página 1 de 1

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 10 Nov 2020 16:21
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]

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 13 Nov 2020 09:48
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.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 13 Nov 2020 15:37
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.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 14 Nov 2020 16:59
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

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 16 Nov 2020 23:05
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.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 02 Dez 2020 15:44
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.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 02 Dez 2020 15:58
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.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 03 Dez 2020 13:15
por Kapiaba
FiveWin, é o bicho... kkkkk, aparentemente, o outlook.com está dominado.

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

Imagem

Obg. abs.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 03 Dez 2020 17:52
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.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 03 Dez 2020 18:57
por jairfab
Joao disponibiliza o código aqui pra gente testar também!

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 03 Dez 2020 19:15
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.

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 04 Dez 2020 00:27
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

hb_sendmail() com SSL em xHarbour 1.2.3

Enviado: 04 Dez 2020 14:23
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.