Email pelo Harbour

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

Moderador: Moderadores

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

Email pelo Harbour

Mensagem por Itamar M. Lins Jr. »

Ola!
Outra coisa somente as dll : libeay32.dll tem que estar presente na pasta onde roda o executável.
Basta está no path!
Ou colocar lá na pasta do \windows\system32
Ou deixar na pasta onde está o EXE. Melhor assim porque não esquece de copiar p/ outra cpu, se for o caso.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Email pelo Harbour

Mensagem por Softwhouse »

Itamar,

Eu baixei o harbour de onde vc indicou, a lib está presente e dá erro igual.
Fernando
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Email pelo Harbour

Mensagem por asimoes »

Para mandar o corpo da mensagem formatado como html
PUBLIC AzulHTML :='<span style="color:#0000FF">'
PUBLIC VermelhoHTML:='<span style="color:#FF0000">'
PUBLIC QuebraHTML :="<br>"

cBody:=AzulHTML +"Log de confirma‡Æo de atualiza‡Æo de sistema em: "+HB_DtoC(Date(),"DD/MM/YYYY")+QuebraHTML+;
VermelhoHTML+"Feito pelo Monitor de Email."

nFileHandle:=FCreate("C:\TEMP\BODY.HTML")
FWrite(nFileHandle,cBody)
FClose(nFileHandle)
cBody:="C:\TEMP\BODY.HTML"
►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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Email pelo Harbour

Mensagem por Itamar M. Lins Jr. »

Ola!
Eu baixei o harbour de onde vc indicou, a lib está presente e dá erro igual.
Pois é, né. Aqui funciona normal em XP/Win7 32 ou 64.
Vc deve verificar quantas versões desta lib está no seu CPU. E se está ou não no PATH outras versões desta LIB.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Email pelo Harbour

Mensagem por Softwhouse »

A todos que encontram problemas com o envio de e-mail pelo harbour, informo que resolví o problema baixando a dll libeay32.dll do site que o colega ASimoes informou no tópico acima e substituí pela que consta em C:\HB34\Bin. Funcionou perfeitamente, o problema está na dll do Harbour.
Fernando
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Email pelo Harbour

Mensagem por Softwhouse »

Alguém conseguiu fazer funcionar no Windows 8 ?
Fernando
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Email pelo Harbour

Mensagem por asimoes »

Funciona no 7, 8.1 e 10
►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)
ConcentraInformatica
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 11 Set 2015 11:05
Localização: Piracicaba/SP

Email pelo Harbour

Mensagem por ConcentraInformatica »

Boa tarde!
Em minha aplicação (utilizo Harbour 3.4 e Mingw.), consigo fazer os envios de emails com SSL normalmente, porém utilizando a LIBEAY32.DLL.
Consultando o OPENSSL, notei que existem bibliotecas para desenvolvedores que, se não entendi errado, substituiriam o uso do LIBEAY32.DLL por funções da própria lib e que ficariam "estáticas" no executável da aplicação.
Alguém já desenvolveu envio de email sem necessitar da LIBEAY32.DLL?
Adianto que fiz algumas tentativas, mas sem sucesso.
O motivo de eu estar buscando o desenvolvimento sem a DLL é para que eu consiga rodar em terminais com Win XP SP2. Atualmente, quando insiro o "REQUEST __HBEXTERN__HBSSL__", as máquinas com WinXP SP2 acusam a falta do "GetLogicalProcessorInformation" no KERNEL32.DLL e "imagino" que, ao desvincular da DLL, isso não vá mais acontecer.
Agradeço desde já a ajuda e parabenizo os colaboradores do forum.
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

Email pelo Harbour

Mensagem por Itamar M. Lins Jr. »

Ola!
No XP com SP3 vai fácil.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Email pelo Harbour

Mensagem por janio »

Pelo CDO não funciona?

Eu uso CDO e envio sem problemas e-mail com gmail, hotmail, ig, yahoo... inclusive com arquivo anexo de mais de 20mb. Nunca deu problema, pelo menos pra mim!

viewtopic.php?f=4&t=9345&p=87557&hilit=cdo+email#p87557

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
ConcentraInformatica
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 11 Set 2015 11:05
Localização: Piracicaba/SP

Email pelo Harbour

Mensagem por ConcentraInformatica »

Itamar M. Lins Jr. escreveu:No XP com SP3 vai fácil.
Você sabe como é né Itamar, fazer os clientes atualizarem o SO e, de repende, também o hardware pode ser uma tarefa difícil.
janio escreveu:Pelo CDO não funciona?
Ótimo Janio! Fiz pelo CDO e funcionou bem. Assim consegui desvincular da DLL. Depois vou ver o que faço no Linux. Tarefa pra mais tarde...

Obrigado também ao Rochinha.

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

Email pelo Harbour

Mensagem por asimoes »

CDO é Microsoft talvez não funcione no Linux.
►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
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Email pelo Harbour

Mensagem por filizola »

fui compilar a função do rochinha apareceu este erro.
Anexos
erro.png
"Um passo a frente, e já não estará mais no mesmo lugar..."
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Email pelo Harbour

Mensagem por microvolution »

olá pessoal boa tarde!
é a primeira vez que entro neste ou noutros tópicos a respeito de envio/recebimento de email via clipper/harbour.
é uma coisa que deixaria mais para frente, mas, como adiantei aqui uma alteração no meu sistema e hoje é feriado do "festival da carne", estou aqui, a trabalhar.
Bom, como nunca tinha feito algum tipo de procedimento de envio/recebimento de emails dentro do meu sistema. Aliás, nunca, "nunquinha" mesmo mexi com email, a não ser via provedores gratuitos.
Para um futuro (espero ser bem próximo) pretendo colocar no meu sistema (que já está no meu site), atualizações automáticas que todos os futuros clientes possam baixar.
Mas, como o cliente saberá que tem atualizações?
R= são várias as respostas que quero implantar. vejam:
R1 = através de nós enviarmos um email para cada um desses futuros clientes saberem que tem algo para atualizar;
R2 = o nosso próprio sistema (lá no cliente se tiver internet banda lagar) estar sempre de tempos em tempos "pingando" em nosso site e aparecer uma mensagem no "rodapé" do sistema, para que o cliente/usuário ative/atualize para uma nova versão do nosso sistema;
R3 = etc...
Mas, isso é depois que eu aprender o básico do básico.
Bom, vi, aqui os códigos exemplos que os prezados professores implantaram e estão funcionando em seus respectivos aplicativos.
Estou usando o harbour 3.4 e mingW para compilar/linkar o meu sistema, em conjunto com 2 libs gráficas GTWV"g" e "w".
Então, quero que no meu sistema, quando aparecer uma mensagem de erro lá no cliente "fulano de tal" ele tenha a opção de enviar para mim o email com o arquivo HB_OUT.LOG.

Não testei ainda, mas 2 dos códigos que vi aqui repito logo abaixo, os achei bem interessantes. Um mais simples e outro mais complexo:
1 - código simples:

Código: Selecionar todos

Function envia_email_pos
local cSubject  := hb_oemtoansi("PàS VENDA - ")+usuario
local aTo          := { endereco@provedor.com.br }
local cServerIp := smtp.gmail.com
local cFrom     := fulanodetal@gmail.com
local cUser     := fulanodetal@gmail.com
local cMsg      := memoread("carta1.txt")
cPass           := alltrim(cdpar000->mpswd)
porta           := 25
pop3            := imap.gmail.com:993
// if hb_SendMail(cServerIP,porta,cFrom,aTo,,,cMsg,cSubject,,cUser,cPass,pop3,1,.F.,.T.,.T.,.F.)=.T.
if Tip_MailSend(cServerIP,porta,cFrom,aTo,,,cMsg,cSubject,,cUser,cPass,pop3,1,.F.,.T.,.T.,.F.)=.T.
2 - código mais complexo:

Código: Selecionar todos

FUNCTION envia_email(yarq)
Local yyarq:= curdrive()+":\"+curdir()+"\"+yarq // yarq no meu caso é um arquivo que mando em anexo
aFiles   := {yyarq} // pode ser uma matriz com vários endereços
cSubject := alltrim(assunto)
aQuem    := alltrim(destino)
cMsg     := alltrim(obs)
cServerIp:= alltrim(cdpar000->msmtp) // servidor smtp
cFrom    := alltrim(cdpar000->mfrom) 
cUser    := alltrim(cdpar000->muser)
cPass    := hb_decrypt(alltrim(cdpar000->mpswd),"lkjhlkhdlkjhkjh") // senha, eu pego de um dbf criptografado
vPORTSMTP:= val(alltrim(cdpar000->mport))
aCC      := "" // caracteres entre aspas
aBCC     := "" // caracteres entre aspas
lCONF    := .F.
lSSL     := cdpar000->mssl // variável lógica

CONFIG_MAIL(aFiles,cSubject,aQuem,cMsg,cServerIp,cFrom,cUser,cPass,vPORTSMTP,aCC,aBCC,lCONF,lSSL)
deletefile(yyarq)
RETURN

**********************************************************************************************************
FUNCTION CONFIG_MAIL(aFiles,cSubject,aQuem,cMsg,cServerIp,cFrom,cUser,cPass,vPORTSMTP,aCC,aBCC,lCONF,lSSL)
**********************************************************************************************************
local lRet:= .f.
local oCfg, oError
local lAut:= cdpar000->mauth

  TRY
    oCfg := CREATEOBJECT( "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 oError
    MsgInfo( "Não Foi possível Enviar o e-Mail!"  +HB_OsNewLine()+ ;
             "Error: "     + Transform(oError:GenCode,   nil) + ";" +HB_OsNewLine()+ ;
             "SubC: "      + Transform(oError:SubCode,   nil) + ";" +HB_OsNewLine()+ ;
             "OSCode: "    + Transform(oError:OsCode,    nil) + ";" +HB_OsNewLine()+ ;
             "SubSystem: " + Transform(oError:SubSystem, nil) + ";" +HB_OsNewLine()+ ;
             "Mensaje: "   + oError:Description, "Atenção" )

  END
  //--> FIM DAS CONFIGURAÇOES.
  if lRet
     lRet:= Envia_Mail(oCfg,cFrom,aQuem,aFiles,cSubject,cMsg,aCC,aBCC,lCONF)
  endif

Return lRet

********************************************************************************
Function Envia_Mail(oCfg,cFrom,cDest,aFiles,cSubject,cMsg,aCC,aBCC,vEMAIL_CONF)
********************************************************************************
  local aTo:= {}
  local lRet:= .f.
  local nEle, oError

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

   for i:=1 to len(aTo)
       TRY
         oMsg:= CREATEOBJECT ( "CDO.Message" )
           WITH OBJECT oMsg
                :Configuration = oCfg
                :From = cFrom
                :To = aTo[i]
                :Cc = aCC
                :BCC = aBCC
                :Subject = cSubject
                //:TextBody = cMsg
                :HTMLBody = cMsg
                For x := 1 To Len( aFiles )
                    :AddAttachment(AllTrim(aFiles[x]))
                Next
                IF vEMAIL_CONF
                   :Fields("urn:schemas:mailheader:disposition-notification-to"):Value:= cFrom
                   :Fields:update()
                ENDIF
                :Send()
           END WITH
           lRet:= .t.
           MsgInfo( "E-mail enviado com sucesso" , " EMAIL " )
       CATCH oError
           MsgInfo("Não Foi Possível Enviar," +HB_OsNewLine()+;
                         "a Mensagem: "             +HB_OsNewLine()+;
                               cSubject                   +HB_OsNewLine()+;
                               "p/ o eMail: " + aTo[i] +HB_OsNewLine()+;
                   " - Erro: " + + oError:Description , "Atenção" )
           lRet := .f.
       END
   next
   
   oCfg:= nil
   oMsg:= nil
Return lRet
Me perdoem a inocência! ...
mas tenho perguntas que mesmo lendo as 6 páginas deste tópico, não foram perguntadas por alguém (não consegui compreender os códigos). Ou porque todos já sabem fazer ou porque ninguém pensou nelas.
Vamos às dúvidas:
digamos que no cliente "fulano de tal" o email dele (remetente) seja:
remetente: fulano@yahoo.com.br

digamos que no cliente "ciclano de tal" o email dele (remetente) seja:
remetente: ciclano@gmail.com

e outro cliente "beltrano de tal" o email dele (remetente) seja:
remetente: beltrano@hotmail.com
e assim sucessivamente...
o destinatário somos nós mesmos:
destinatário: microvolution@hotmail.com
Então, no exemplo acima, temos as seguintes variáveis/matrizes que recebem as informações de remetente/senha/provedor, etc:
Então professores, acho que as perguntas são as mesmas, para os 2 códigos-exemplo àcima, ou qualquer outro:
local aTo := { endereco@provedor.com.br } // como cada cliente é individual e tem seus próprios emails (como coloquei acima), como é preenchido esta variável?
local cServerIp := smtp.gmail.com // e esta aqui como preencher para cada tipo de email?
local cFrom := fulanodetal@gmail.com // como fazer para pegar o email do cliente automaticamente, ou terei que ter outra conta minha aqui para ser genérico a todos os clientes?
local cUser := fulanodetal@gmail.com // no caso aqui é o destinatário (que sou eu mesmo) e, no caso MICROVOLUTION@hotmail.com
local cMsg := memoread("carta1.txt") // aqui quero enviar além do corpo padrão (genérico) a todos os meus clientes, como, fazer para anexar o arquivo HB_OUT.LOG e informações do cliente e no caso de ter vários computadores em rede, especificar o nome do computador em que aconteceu o problema (ex: MCR01, ou MCR11, etc)?
cPass := alltrim(cdpar000->mpswd) // como pegar a senha do email do cliente? ou como no email remetente terá que ser um outro email meu e senha minha para todos os clientes (ex: digamos que eu tenha MICROVOLUTION@GMAIL.COM e usá-lo para remetente)?
porta := 25 // se o email do cliente for em qualquer dos provedores de email mais comuns (hotmail, yahoo, gmail, ig, etc) ou caso ele tenha email próprio (ex: contato@empresafulano.com.br)???
pop3 := imap.gmail.com:993 // nesse caso, como fica essa linha em conjunto com as anteriores?
Bom, prezados professores, acho que as dúvidas iniciais são essas, mas, outras podem surgir....
E, agora, quem poderá me defender ?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Email pelo Harbour

Mensagem por microvolution »

Então prezados professores, como eu disse anteriormente que não havia testado...
então, resolvi testar o código mais simples, e, para funcionar incluí no meu arquivo .HBP a lib: HBTIP.HBC.
Bom, nenhuma mensagem de erro tanto na compilação/linkedição quanto em "runtime" não apareceram.
Isso é um bom sinal, não acham?
Provisoriamente coloquei meu emails particulares para testar. Somente a senha que coloquei (aqui para a rede) erroneamente.
O meu exemplo de código ficou assim:
1ª parte:

Código: Selecionar todos

func main()
...
   enviaemail := hb_dirbase()+"DBatualiza.log"
   envia_email_pos(enviaemail)
...
return
2ª parte:

Código: Selecionar todos

Function envia_email_pos(email)
   // local cSubject  := hb_oemtoansi("PàS VENDA - ")+usuario
   local cSubject  := "Erro do Sistema SiCCA v3.6.03"
   local aTo       := {"endereco@provedor.com.br"}
   local cServerIp := "smtp.yahoo.com.br"
   local cFrom     := "estudio.audiomax@yahoo.com.br"
   local cUser     := "estudio.audiomax@yahoo.com.br"
   local cMsg      := "teste de email" + email // memoread("carta1.txt")
   cPass           := alltrim("1234567890")
   porta           := 25
   pop3            := "pop.yahoo.com.br:587"
   if Tip_MailSend(cServerIP,porta,cFrom,aTo,,,cMsg,cSubject,,cUser,cPass,pop3,1,.F.,.T.,.T.,.F.) = .T.
      alert('Email enviado com sucesso!!!') 
   else
      alert('Falha no envio do Email.') 
   endif 
return
Observem que no IF/ENDIF acima, coloquei tanto a opção em que o email foi enviado, bem como o ELSE caso o email não seja enviado.
E, é claro que a condição foi falsa e o email não foi enviado, sendo executado o ELSE.

Bom, como disse no email anterior, nunca mexi (nem em sites ou qualquer outro lugar) com email personalizado, principalmente dentro de um aplicativo de próprio desenvolvimento.
Espero que os prezados professores tenham alguma ideia.
Aliás, acho que esta função de email tem que estar dentro da ERRORSYS.PRG pois como enviará erro sendo que o erro só acontece e é informado pela ERRORSYS?
abraços e bom feriado a todos!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder