Página 2 de 3

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 11:21
por JoséQuintas
Pois é...
Olhando esse fonte eu diria....

Que merd.... XHarbour de novo !!!!

cPort.... estranho.... que eu saiba porta é número
hDll.... estranho... parece coisa de XHarbour
CreateOject().... definitivamente XHarbour

Assim como a maioria das LIBs, pelo jeito fivewin também usa a XHB, de compatibilidade XHarbour, isso explicaria CreateObject()

win_OleCreateObject(), isso é Harbour

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 11:37
por Kapiaba
Mister Quintas, não vai com HARBOUR nem a pau. Veja mudança se estou correto. Ainda não vou dizer que o Harbour és una mierd... kkkkkkkkkkkk, Porquê, pode ser que falte uma LIB que eu não conheço. ô compilador xato do kpeta! kkkkkkkkk

Código: Selecionar todos

        #IFDEF __XHARBOUR__

           oCfg = CREATEOBJECT( "CDO.Configuration" )

	#ELSE

           oCfg = Win_OleCreateObject( "CDO.Configuration" )

	#ENDIF

Código: Selecionar todos

	#IFDEF __XHARBOUR__

           oMsg = CREATEOBJECT( "CDO.Message" )

	#ELSE

           oMsg = Win_OleCreateObject("CDO.Message" )

	#ENDIF
Abs.

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 12:01
por fladimir
Por não conseguir tb (vi q tinha q fazer o upgrade do meu Harbour), resolvi não mexer, criei um EXE externo em outra linguagem e no Harbour qdo a conta do e-mail for Hotmail/Outlook/Live (Yahoo não tive problema mas se tiver já ta no jeito) gero um TXT com as informações da conta e esse EXE manda...

Tipo gero o TXT e chamo o EXE q ve se tem o TXT na pasta já manda o e-mail

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 12:10
por rubens
Bom dia...

Joâo, uso assim em Harbour 3.2 e funciona... só mando Gmail...

Código: Selecionar todos

********************************************************************************
Function EMAIL_ORCAMENTO()
LOCAL cTela				:= SAVESCREEN(00,00,24,79)
LOCAL GetList			:= {}
LOCAL nRECNO			:= RECNO()
LOCAL cCOR				:= SETCOLOR()
LOCAL cAssunto			:= 'Orcamento '+Space(40)
PRIVATE cORCAME		:= cDIRORC+'OR'+RIGHT(ORC->NUMERO_,6)+'.PDF'
PRIVATE aQUEM  		:= SPACE(50)
PRIVATE cEMAIL 		:= ALLTRIM(PERS->EMAIL)+'@gmail.com'
PRIVATE cSENHAEMAIL 	:= ALLTRIM(PERS->SENHAEMAIL)
PRIVATE cMsgTela		:= 'Enviando Orcamento !!! Aguarde ...'

If ! File( cOrcame )
	ImpOrc_Email()
EndIf

DbSelectArea('CLI')
DbSetOrder(2)
DbGoTop()
IF DbSeek( ORC->CODCLI_ )
	aQUEM := CLI->EMAIL
ENDIF

DbSelectArea('ORC')

SetCursor(1)
WHILE (.T.)

	JANELA(11,05,21,76,"ENVIO DE EMAIL: ORCAMENTO")
	COR("GETS")
	cFROM	:= ALLTRIM(PERS->RAZAO) + ' <'+cEMAIL+'>'   // "MDV Informatica e papelaria <mdvinf@gmail.com>"
	
	cAssunto2 := Space(50)
	cAssunto3 := Space(50)
	cAssunto4 := Space(50)
	
	cMENSAGEM :=  ;
	   ''+HTML_EOL()+;
		'A'+HTML_EOL()+;
		ALLTRIM(CLI->NOME)+HTML_EOL()+;
		''+HTML_EOL()+;
		'Segue em anexo Orcamento solicitado'+HTML_EOL()+;
		''+HTML_EOL()+;
		''+HTML_EOL()
		
	@ 13,10 SAY 'Emitente:' GET cFROM		WHEN 1>2	
	@ 14,10 SAY 'Para....:' GET aQUEM		VALID !EMPTY( aQuem )
	@ 15,10 SAY 'Assunto.:' GET cASSUNTO 	VALID !EMPTY(cASSUNTO)
	@ 17,10 SAY 'Obs.....:' Get cAssunto2
	@ 18,10 SAY '         ' Get cAssunto3
	@ 19,10 SAY '         ' Get cAssunto4

	READ
	IF ESC()
		EXIT
	ENDIF
	
	cMensagem 	+= AllTrim(cAssunto2) +HTML_EOL()+ AllTrim(cAssunto3) + HTML_EOL()+AllTrim(cAssunto4)+HTML_EOL()+HTML_EOL() 
	cMensagem	+= 'Atenciosamente,'+HTML_EOL()+;
						''+HTML_EOL()+;
						+ALLTRIM(PERS->RAZAO)+HTML_EOL()
	
	aFILES 		:= { cORCAME }
	Envia_Email( aFILES, cASSUNTO, cMensagem,, .T.)	
	EXIT
	
ENDDO
SetCursor(0)
SETCOLOR( cCOR )
RESTSCREEN(0,0,24,79, cTELA )
RETURN NIL

Código: Selecionar todos

*****************************************************************************************
FUNCTION Envia_Email(aArquivo, cAssunto, cMensagem, cImagem, lInformaEnvio)
LOCAL lOk := .T.

	hb_Default(@aArquivo,{})
	hb_Default(@cAssunto, "XML e PDF de Nota Fiscal")
	hb_Default(@cMensagem, "Envio de Email")
	hb_Default(@cImagem, "")
	hb_Default(@lInformaEnvio, .T.)
	hb_Default(@cFrom,"MDV Informatica e papelaria <mdvinf@gmail.com>")
	hb_Default(@aQuem,"Rubens - MDV Informatica - Hotmail <mdvinf@gmail.com>")
	
	aFiles 	:= aArquivo // pode ser uma matriz com vários endereços
	cSubject := cAssunto
	cMsg  	:= cMENSAGEM
	cServerIp:= "smtp.gmail.com" 	// servidor smtp
	cUser  	:= cEMAIL 				//
	cPass  	:= cSENHAEMAIL 		// 
	vPORTSMTP:= 465 
	aCC   	:= "" 
	aBCC  	:= "" 
	lConf  	:= .F.
	lSSL  	:= .T.
	
	lOk := Config_Mail(aFiles,;
	        cSubject,;
	        aQuem,;
	        cMsg,;
	        cServerIp,;
	        cFrom,;
	        cUser,;
	        cPass,;
	        vPORTSMTP,;
	        aCC,;
	        aBCC,;
	        lConf,;
	        lSSL,;
	        cImagem,;
	        lInformaEnvio)

RETURN lOk

********************************************************************************
FUNCTION Config_Mail(aFiles, cSubject, aQuem, cMsg, cServerIp, cFrom, cUser, cPass, vPORTSMTP, aCC, aBCC, lConf, lSSL, cImagem, lInformaEnvio)
LOCAL lRet
LOCAL oCfg, oErroMail
LOCAL lAut := .T. 
 hb_Default(@cImagem, "")
 hb_Default(@lInformaEnvio, .T.)
 TRY
   oCfg := win_OleCreateObject( "CDO.Configuration" )
   WITH OBJECT oCfg:Fields
     :Item("http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value   	:= cServerIp
     :Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value:= vPORTSMTP
     :Item("http://schemas.microsoft.com/cdo/configuration/sendusing"):Value     := 2
     :Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"):Value := lAut
     :Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl"):Value    := lSSL
     :Item("http://schemas.microsoft.com/cdo/configuration/sendusername"):Value  := AllTrim(cUser)
     :Item("http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value  := AllTrim(cPass)
     :Update()
   END WITH
   lRet := .T.
 CATCH oErroMail
   IF lInformaEnvio
    HB_ALERT( WIN_OEMTOANSI("NÆo foi poss¡vel enviar o e-mail!"           +hb_EOL()+ ;
        "Error: "  + Transform(oErroMail:GenCode, nil) + ";" +hb_EOL()+ ;
        "SubC: "   + Transform(oErroMail:SubCode, nil) + ";" +hb_EOL()+ ;
        "OSCode: "  + Transform(oErroMail:OsCode,  nil) + ";" +hb_EOL()+ ;
        "SubSystem: " + Transform(oErroMail:SubSystem, nil) + ";" +hb_EOL()+ ;
        "Mensagem: " + oErroMail:Description), "Aten‡Æo", 150, 10000, 2, .T.)
   ENDIF
   lRet := .F.
 END
 //--> FIM DAS CONFIGURAÇOES.
 IF lRet
   lRet := Envia_Mail(oCfg,;
            cFrom,;
            aQuem,;
            aFiles,;
            cSubject,;
            cMsg,;
            aCC,;
            aBCC,;
            lConf,;
            lAut,;
            lSSL,;
            cServerIp,;
            cImagem,;
            lInformaEnvio)
 ENDIF
RETURN lRet

********************************************************************************
FUNCTION Envia_Mail(oCfg, cFrom, cDest, aFiles, cSubject, cMsg, aCC, aBCC, vEmaiL_Conf, lAut, lSSL, cServerIp, cImagem, lInformaEnvio )
LOCAL aTo
LOCAL lRet
LOCAL nEle, oErroMail
LOCAL cImagem1:=''

 hb_Default(@cImagem, "")
 hb_Default(@lInformaEnvio, .T.)
 hb_Default(@cMsgTela, 'Enviando Email !!! Aguarde ...')
 
 IF !Empty(cImagem)
  cImagem1:='' 
 ENDIF

 aTo	:= { cDest } //--> PARA
 
 nEle := 1

 FOR I:=1 TO Len(aTo)
   TRY
    MOSTRA_Email(cMsgTela)
    oMsg := win_OleCreateObject( "CDO.Message" )
    WITH OBJECT oMsg
       :Configuration := oCfg
       :From     := cFrom
       :To      := aTo[i]
       :Cc      := aCC
       :BCC     := aBCC
       :Subject   := cSubject
       
       * ---------------------------------------------------------
       * Aqui adiciona a imagem ao corpo da mensagem
       * ---------------------------------------------------------
       IF !Empty(cImagem)
        :AddRelatedBodyPart(hb_DirBase()+"img"+hb_PS()+cImagem, cImagem, 1)
        :Fields:Item("urn:schemas:mailheader:Content-ID"):Value := "<"+cImagem+">"
        :Fields:Item("urn:schemas:mailheader:Content-Disposition"):Value := "inline"
        :Fields:Update()
       ENDIF
       :HTMLBody := cMsg // + QuebraHTML + IF(!Empty(cImagem), cImagem1, "")
       * ------------------------------------------------------------------------------------------------
       */
       
       FOR X := 1 TO Len( aFiles )
        :AddAttachment(AllTrim(aFiles[x]))
        *DO EVENTS
       NEXT
       :Fields("urn:schemas:mailheader:disposition-notification-to"):Value := cFrom
       :Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"):Value := lAut
       :Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl"):Value := lSSL
       :Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value := cServerIp
       :Fields:update()
       *DO EVENTS
       :Send()
    END WITH
    IF lInformaEnvio
    	MOSTRA_Email("E-mail enviado com sucesso !!!")
    	millisec(500)
      * HB_ALERT("E-mail enviado com sucesso", "Aten‡Æo")
    ENDIF
    lRet := .T.
   CATCH oErroMail
    IF lInformaEnvio
      Alert( WIN_OEMTOANSI("NÆo foi poss¡vel enviar a mensagem: "+cSubject+hb_EOL()+;
            "para o email: " + aTo[i]+"."         +hb_EOL()+;
            "Erro: " +oErroMail:Description) , "Aten‡Æo")
    ENDIF
    lRet := .F.
   END
 NEXT
 
 oCfg := Nil
 oMsg := Nil

RETURN lRet

********************************************************************************
FUNCTION MENSAG( cTEXTO )
RETURN( ALERT( cTEXTO ) )

********************************************************************************
function StringToArray( cString, cSeparator )
   LOCAL nPos
   LOCAL aString := {}
   cSeparator := ";"
   cString := ALLTRIM( cString ) + cSeparator
   DO WHILE .T.
      nPos := AT( cSeparator, cString )
      IF nPos = 0
         EXIT
      ENDIF
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) )
      cString := SUBSTR( cString, nPos+1 )
   ENDDO
RETURN ( aString )
   
********************************************************************************   
function ArrayToString( aArray, cSeparator )
  LOCAL nPos
  cSeparator := ";"
  cString := ""
  FOR nPos = 1 TO LEN(aArray)
    cString := cString + aArray[nPos] + cSeparator
  NEXT
RETURN ( cString )
********************************************************************************
Rubens

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 12:15
por Kapiaba
Fladimir, qual é a versão do seu Harbour? A minha é:

Código: Selecionar todos

   Harbour 3.2.0dev (r1603082110)
Fladimir, que coisa xata, você compilar com xHarbour e funcionar tudo e com o Harbour, não conseguir é de morrer de raiva. To quase colocando todas as LIBS dele no BUILDH.BAT para ver.... kkkkkkkkkkkkk

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 12:45
por JoséQuintas
Com Harbour 3.4 é só o usar.

Código: Selecionar todos

   RETURN tip_MailSend( ::cServer, ::nPort, ::cFrom, ::acTo, ::acCc, ::acBcc, ::cFileBody, ::cSubject, ::acAttachment, ::cUser, ::cPassword, ;
      iif( Empty( ::cServerPop ), NIL, ::cServerPop ), ::nPriority, ::lConfirm, ::lTrace, ! Empty( ::cServerPop ), ;
      ::lNoAuth, ::nTimeOut, /* cReplyTo */, ::lTLS )
Também tem exemplo no próprio Harbour.

E meu aplicativo é público, pelo menos boa parte dele.
Criei uma classe pra ajudar, que pode usar tip_SendMail(), CDO, ou DLL do Blat.

https://github.com/JoseQuintas/JoseQuin ... lclass.prg

Uso Harbour puro.
Baixo os fontes do fork do Viktor, e crio usando win-make clean install
mingw ou msvc
Só esses fontes, nada mais.
Nem libmysql, nem libcurl, nem opensll, nada... por isso sem email de gmail,hotmail
Talvez esse tipo de email desapareça daqui há algum tempo, e eu precise algo mais, mas por enquanto é isso.

Se o email precisa comunicação que dependa de CURL/OPENSSL, o Harbour gerado assim não serve.

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 12:54
por JoséQuintas
No Harbour 3.2, e 3.4, sempre tem exemplos.

Exemplos usando hbtip
https://github.com/vszakats/harbour-cor ... btip/tests

Exemplo usando libcurl

https://github.com/vszakats/harbour-cor ... /email.prg

Sei lá, convém explicar: exemplo de libcurl só funciona se tiver sido gerada a libcurl

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 12:59
por JoséQuintas
Usando hbmk2, o exemplo não funciona porque falta libcurl

Código: Selecionar todos

d:\github\harbour34\contrib\hbcurl\tests>hbmk2 email
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing local make script: hbmk.hbm
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
hbmk2: Warning: Cannot find hbcurl.hbc (referenced from hbmk.hbm)
Harbour 3.4.0dev (fdf0681cf1) (2017-11-23 22:05)
Copyright (c) 1999-2017, https://github.com/vszakats/harbour-core/
Compiling 'email.prg'...
email.prg(16) Warning W0001  Ambiguous reference 'HB_CURLVERINFO_VERSION_NUM'
email.prg(26) Warning W0001  Ambiguous reference 'HB_CURLVERINFO_PROTOCOLS'
email.prg(92) Warning W0001  Ambiguous reference 'HB_CURLVERINFO_VERSION'
email.prg(104) Warning W0001  Ambiguous reference 'HB_CURLSSLBACKEND_SCHANNEL'
email.prg(104) Warning W0001  Ambiguous reference 'HB_CURLSSLBACKEND_SCHANNEL'
email.prg(104) Warning W0001  Ambiguous reference 'HB_CURLSSLSET_OK'
email.prg(120) Warning W0001  Ambiguous reference 'HB_CURLOPT_CAINFO'
email.prg(131) Warning W0001  Ambiguous reference 'HB_CURLOPT_USE_SSL'
email.prg(131) Warning W0001  Ambiguous reference 'HB_CURLUSESSL_ALL'
email.prg(131) Warning W0001  Ambiguous reference 'HB_CURLUSESSL_TRY'
email.prg(132) Warning W0001  Ambiguous reference 'HB_CURLOPT_UPLOAD'
email.prg(133) Warning W0001  Ambiguous reference 'HB_CURLOPT_URL'
email.prg(135) Warning W0001  Ambiguous reference 'HB_CURLOPT_PROTOCOLS'
email.prg(135) Warning W0001  Ambiguous reference 'HB_CURLPROTO_SMTPS'
email.prg(135) Warning W0001  Ambiguous reference 'HB_CURLPROTO_SMTP'
email.prg(136) Warning W0001  Ambiguous reference 'HB_CURLOPT_TIMEOUT_MS'
email.prg(137) Warning W0001  Ambiguous reference 'HB_CURLOPT_VERBOSE'
email.prg(138) Warning W0001  Ambiguous reference 'HB_CURLOPT_USERNAME'
email.prg(139) Warning W0001  Ambiguous reference 'HB_CURLOPT_PASSWORD'
email.prg(140) Warning W0001  Ambiguous reference 'HB_CURLOPT_MAIL_FROM'
E se for compilar a hbcurl....

Código: Selecionar todos

d:\github\harbour34\contrib\hbcurl>hbmk2 hbcurl
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
hbmk2 [hbcurl]: Warning: Missing dependency: curl
hbmk2 [hbcurl]: Hint: Point envvar HBMK_WITH_CURL or HB_WITH_CURL to the
                directory containing header 'curl\curl.h'
hbmk2 [hbcurl]: Hint: Project URL(s): https://curl.haxx.se/
                https://github.com/vszakats/harbour-deps
O HBMK2 avisa que depende da instalação de dependências.
Quem quiser/precisar, vai ter que instalar as dependências antes de gerar os arquivos e enviar e-mails que dependam disso.

Usando os BATs das LIBs, não tem esses avisos, porque fazem parte dos HBPs, HBCs existentes NO HARBOUR, e as LIBs não usam eles.

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 13:10
por JoséQuintas
Lógico... as LIBs não explicam isso, ainda mais a fivewin comercial.
Deixar os usuários presos a XHarbour e fivewin dá mais lucro pra elas.

E elas não devem saber dar suporte...
por isso nunca tem resposta pra problemas e os usuários que se virem, ou fiquem dependentes de fivewin comercial....

Mas pra XHarbour é fácil, como não tem atualização há muitos anos, fivewin só precisa continuar usando a mesma coisa de sempre.

Infelizmente, isso é uma realidade.
Copiar do Harbour sim, mas ajudar o Harbour não....
E cobram por isso, pelo que outros fizeram !!!

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 13:16
por JoséQuintas
Uia... faz parte da fivewin algumas LIBs existentes no Harbour....
Inclusive a LIBCURL usada pra esses tipos de e-mails...
Mas se faz parte da fivewin, porque não tem suporte???????

Mas será que são pra Harbour ou XHarbour?
Quando compila com Harbour, entram as LIBs do Harbour ou da fivewin que pode ou não ser pra Harbour?
fivewin.png

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 13:27
por JoséQuintas
Conclusão:

Só a fivewin pode ajudar, só ela sabe o que inventou !!!

O problema é Harbour ou XHarbour?

Se a LIB altera o Harbour... passou a ser problema da fivewin, por falta de suporte pra isso.

A saída??? talvez mudar pra XHarbour... e continuar pagando pra fivewin.... pelo problema que ela criou....

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 13:31
por Kapiaba
Boa Tarde Rubens, muito obrigado pelo aporte. Testei sua função, que é igual a do Mister Asimões,(se não me engano) e também não funciona com meu Harbour.

Eu acho que as minhas LIBs do Harbour não estão bem das pernas. Você por gentileza, poderia Zipar o seu Harbour completo e disponibilizar, e mostrar quais a LIBs do Harbour se usa para envio de email porfa?

Pode me enviar por email se desejar.


Obg. abs.

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 14:13
por JoséQuintas
Kapiaba:

Olhando o fonte, o processo todo depende disto:

Código: Selecionar todos

oMsg := win_OleCreateObject( "CDO.Message" )
A partir daí é essa variável.
E propriedades/métodos do CDO.
E sei lá se tem diferença entre versões de Windows.... tudo pode acontecer.

Eu começaria enviando um email simples, e acrescentando recursos aos poucos.

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 14:18
por fladimir
João, minha versão é Harbour 3.4.0dev (4541270) (2016-06-28)

Mandar pedido por E-MAIL

Enviado: 12 Dez 2017 14:48
por Kapiaba
Many Thanks Rubens!! Agora funcionou. Problema resolvido.
RUBENS.png

Abraços.