Página 4 de 9

Email pelo Harbour

Enviado: 28 Mar 2014 14:19
por rochinha
Amiguinho,

Voce configurou os parametros de portas do servidor alheio?

Veja um trecho do meu codigo:

Código: Selecionar todos

function SendCDOMail( mail_message,;
                  smtp_server ,;
                  mail_to     ,;
                  mail_from   ,;
                  mail_subject,;
                  smtp_user   ,;
                  smtp_pass   ,;
                  mail_attach , lHtml, portSMTP )
  default lHtml := .f.
  Private aProvedor := { { "UOL (Universo On-Line)"  ,'pop.uol.com.br'        ,'smtp.uol.com.br'        ,.t., 25,110,.f.},;
                         { "Terra"                   ,'pop.terra.com.br'      ,'smtp.terra.com.br'      ,.t., 25,110,.f.},;
                         { "IG (Internet Generation)",'pop.ig.com.br'         ,'smtp.ig.com.br'         ,.t.,465,995,.t.},;
                         { "iBest"                   ,'pop.ibest.com.br'      ,'smtp.ibest.com.br'      ,.t.,465,995,.t.},;
                         { "iTelefonica"             ,'pop.itelefonica.com.br','smtp.itelefonica.com.br',.t., 25,110,.f.},;
                         { "Gmail (Google Mail)"     ,'pop.gmail.com.br'      ,'smtp.gmail.com.br'      ,.t.,465,995,.t.},;
                         { "Yahoo"                   ,'pop.mail.yahoo.com.br' ,'smtp.mail.yahoo.com.br' ,.t., 25,110,.f.},;
                         { "Hotmail"                 ,'pop3.live.com'         ,'smtp.live.com'          ,.t., 25,995,.t.},;
                         { "BOL (Brasil On-Line)"    ,'pop3.bol.com.br'       ,'smtp.bol.com.br'        ,.t., 25,110,.f.},;
                         { "ITM Networks"            ,'mail.5volution.com.br' ,'mail.5volution.com.br'  ,.t., 25,110,.f.} }
  if lHtml
     mail_message := FormHtml( mail_subject, mail_message )
  endif
  // Escolho o provedor padrao
  cProvedor := alltrim(substr(mail_from,at("@",mail_from)+1,50))
  cProvedor := iif(cProvedor="hotmail.com","live.com",cProvedor)
  nPosicao := 10 // "ITM Networks" como meu padrao
  for i = 1 to len(aProvedor)
      if cProvedor $ aProvedor[i][2]
         //? aProvedor[i][1],aProvedor[i][2],i
         nPosicao := i
      endif
  next
  // Dados do provedor STMP como IP e PORTA
  smtp_server := aProvedor[ nPosicao, 3 ]
  smtp_Port   := aProvedor[ nPosicao, 5 ]
  if ! portSMTP = nil
     smtp_Port:= portSMTP
  endif
  // Se autentica pega porta segura
  lAuth       := aProvedor[ nPosicao, 4 ]
  smtp_SSL    := aProvedor[ nPosicao, 7 ]
  // Configuração do motor de envio
  txtCDOSYS   := "http://schemas.microsoft.com/cdo/configuration/"
  objCDOSYSCon:=TOleAuto():New( "CDO.Configuration" )
  objCDOSYSCon:Fields:Item( txtCDOSYS + "smtpserver" ):Value       := smtp_server
  objCDOSYSCon:Fields:Item( txtCDOSYS + "smtpserverport" ):Value   := smtp_Port
  objCDOSYSCon:Fields:Item( txtCDOSYS + "sendusing" ):Value        := 2
  if lAuth // Configura autenticação
     objCDOSYSCon:Fields:Item( txtCDOSYS + "smtpauthenticate" ):Value := 1
     objCDOSYSCon:Fields:Item( txtCDOSYS + "sendusername" ):Value     := smtp_user
     objCDOSYSCon:Fields:Item( txtCDOSYS + "sendpassword" ):Value     := smtp_pass
  endif
  if smtp_SSL // Força segurança
     objCDOSYSCon:Fields:Item( txtCDOSYS + "smtpusessl" ):Value    := .t.
  endif
  objCDOSYSCon:Fields:Item( txtCDOSYS + "smtpconnectiontimeout" ):Value := 30 
  objCDOSYSCon:Fields:update()
  objCDOSYSMail:=TOleAuto():New( "CDO.Message" )
  objCDOSYSMail:Configuration := objCDOSYSCon
  objCDOSYSMail:From          := mail_from
  objCDOSYSMail:To            := mail_to
  objCDOSYSMail:Subject       := mail_subject
  if lHtml // Se o formato da mensagem for HTML, configura...
     objCDOSYSMail:HTMLBody   := mail_message // + CRLF + CRLF + MemoRead( mail_attach )
  else // ...senao o padrao sera texto
     objCDOSYSMail:TextBody   := mail_message // + CRLF + CRLF + MemoRead( mail_attach )
  endif
  // Se forem passados anexos em um vetor acrescenta cada um
  if ValType( mail_attach ) == "A"
     For nEle := 1 To Len( mail_attach )
         objCDOSYSMail:AddAttachment( AllTrim(mail_attach[ nEle ]) )
     Next
  else // Se for passado somente um anexo
     objCDOSYSMail:AddAttachment( AllTrim(mail_attach) )
  endif
  //If ! Empty( cBCC )
  //   objCDOSYSMail:BCC = AllTrim(cBCC)
  //EndIf
  objCDOSYSMail:Send()
  return .t.

Email pelo Harbour

Enviado: 28 Mar 2014 17:48
por rossine
OK Rochinha,

Obrigado pelo exemplo. Vou ver o que posso estar fazendo de errado aqui.

Rossine.

Email pelo Harbour

Enviado: 31 Mar 2014 09:32
por Itamar M. Lins Jr.
Essa dificuldade já foi superada com o Harbour 3.2
Já podemos usa o hbcurl para envia email e/ou a hbtip! Para tanto basta linkar a HBSSL!

Via hbCurl!

Código: Selecionar todos

/* Copyright 2014 Viktor Szakats (vszakats.net/harbour) */

#require "hbcurl"
#require "hbtip"

#include "simpleio.ch"

#define _CA_FN_  "cacert.pem"

PROCEDURE Main( cFrom, cPassword, cTo )

   LOCAL curl
   LOCAL cMessage

   IF hb_AScan( curl_version_info()[ 8 ], "smtps",,, .T. ) == 0
      ? "Error: Requires libcurl 7.20.0 or newer, built with SSL and smtp protocol support"
      RETURN
   ENDIF

   hb_default( @cFrom    , "from@gmail.com" )
   hb_default( @cPassword, "password" )
   hb_default( @cTo      , "to@example.com" )

   cMessage := tip_MailAssemble( cFrom, ;
      { cTo }, ;
      NIL /* aCC */, ;
      "test: body", ;
      "test: subject", ;
      NIL /* attachment */, ;
      NIL /* nPriority */, ;
      NIL /* lRead */, ;
      NIL /* cReplyTo */, ;
      NIL /* cCharset */, ;
      NIL /* cEncoding */, ;
      .F. /* lBodyHTML */, ;
      NIL /* bSMIME */ )

   curl_global_init()

   IF ! Empty( curl := curl_easy_init() )
      #if ! defined( __PLATFORM__UNIX )
         IF ! hb_FileExists( _CA_FN_ )
            ? "Downloading", _CA_FN_
            curl_easy_setopt( curl, HB_CURLOPT_DOWNLOAD )
            curl_easy_setopt( curl, HB_CURLOPT_URL, "http://curl.haxx.se/ca/cacert.pem" )
            curl_easy_setopt( curl, HB_CURLOPT_DL_FILE_SETUP, _CA_FN_ )
            curl_easy_perform( curl )
            curl_easy_reset( curl )
         ENDIF
         curl_easy_setopt( curl, HB_CURLOPT_CAINFO, _CA_FN_ )
      #endif
      curl_easy_setopt( curl, HB_CURLOPT_UPLOAD )
      curl_easy_setopt( curl, HB_CURLOPT_URL, "smtps://smtp.gmail.com:465" )
      curl_easy_setopt( curl, HB_CURLOPT_USERNAME, cFrom )
      curl_easy_setopt( curl, HB_CURLOPT_PASSWORD, cPassword )
      curl_easy_setopt( curl, HB_CURLOPT_UL_BUFF_SETUP, cMessage )
      curl_easy_setopt( curl, HB_CURLOPT_INFILESIZE_LARGE, hb_BLen( cMessage ) )
      curl_easy_setopt( curl, HB_CURLOPT_MAIL_FROM, cFrom )
      curl_easy_setopt( curl, HB_CURLOPT_MAIL_RCPT, { cTo } )
      curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, .T. )

      ? "Result:", curl_easy_perform( curl )

      curl_easy_cleanup( curl )
   ELSE
      ? "Failed to init"
   ENDIF

   RETURN
Via hbtip!

Código: Selecionar todos

/*
 * Copyright 2009 Viktor Szakats (vszakats.net/harbour)
 * www - http://harbour-project.org
 */

#require "hbssl"
#require "hbtip"

REQUEST __HBEXTERN__HBSSL__

#include "simpleio.ch"

PROCEDURE Main( cFrom, cPassword, cTo )

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

   hb_default( @cFrom    , "<from@gmail.com>" )
   hb_default( @cPassword, "password" )
   hb_default( @cTo      , "to@example.com" )

   ? tip_MailSend( ;
      "smtp.gmail.com", ;
      465, ;
      cFrom, ;
      cTo, ;
      NIL /* CC */, ;
      {} /* BCC */, ;
      "test: body", ;
      "test: subject", ;
      NIL /* attachment */, ;
      cFrom, ;
      cPassword, ;
      "", ;
      NIL /* nPriority */, ;
      NIL /* lRead */, ;
      .T. /* lTrace */, ;
      .F., ;
      NIL /* lNoAuth */, ;
      NIL /* nTimeOut */, ;
      NIL /* cReplyTo */, ;
      .T. )

   RETURN
Usando o Hbmk2 vai facin, facin!

Saudações,
Itamar M. Lins Jr.

Email pelo Harbour

Enviado: 31 Mar 2014 12:00
por rossine
Olá Itamar,

Ao executar o exemplo via hbtip, me é retornado a mensagem abaixo:

Não foi possível localizar o ponto de entrada do procedimento EVP_camelia_128_cbc na biblioteca de vínculo dinâmico LIBEAY32.DLL

Sei que é alguma imcompatibilidade de versão desta DLL. Tenho ela aqui no meu c:\windows\system32 com a data de15/11/2009 e hora 10:37

Confirme a data e hora da sua DLL e de onde baixo uma versão mais recente dela ? Ou qual aplicativo que vem com ela ?

Obrigado,

Rossine.

Email pelo Harbour

Enviado: 31 Mar 2014 15:14
por rossine
Olá Itamar,

Copiei todas dll´s da pasta c:\openssl para a pasta corrente e o exemplo rodou, mas está retornando .F. ou seja, o email não está sendo enviado.

Obrigado,

Rossine.

Email pelo Harbour

Enviado: 31 Mar 2014 15:57
por rossine
Olá Itamar,

Consegui enviar o email agora. Para funcionar, o último parâmetro tive colocar como .F. aí o email foi enviado.

Valeu pela dica,

Rossine.

Email pelo Harbour

Enviado: 01 Abr 2014 10:04
por Itamar M. Lins Jr.
Ola!
Eu uso a HBTIP, p/ enviar já faz um bom tempo.
Inclusive p/ enviar via email falha no sistema.

Código: Selecionar todos

************************
Function EmailErro(cArq)
************************
*
*
aArq := {cArq}
 lRet := tip_MailSend("smtp.mail.yahoo.com.br" ,;
                  465,;
                  "xxxxx@yahoo.com.br",;
                  "xxxxx@gmail.com",;
                  NIL  /* xCC */ ,;
                  {}   /* xBCC */,;
                  "Erro do xxx" ,;
                  "Erro do xxx",;
                  aArq /* attachment */,;
                  "xxxx@yahoo.com.br",;
                  "suasenha",;
                  "",;
                  NIL  /* nPriority */,;
                  NIL /* lRead */,;
                  .F. /* lTrace */,;
                  .F. /*pop auth */ ,;
                  NIL /* lNoAuth */,;
                  NIL /* nTimeOut */,;
                  NIL /* cReplyTo */,;
                  .T. )
If lret
   hwg_Msginfo("Erro enviado")
Else
   hwg_Msginfo("Falha enviando erro.")
EndIf

return lRet
Saudações,
Itamar M. Lins Jr.

Email pelo Harbour

Enviado: 01 Abr 2014 21:50
por lucimauro
Para min o hb_sendmail é falho, nos meus testes eu consegui enviar com ele,mais em alguns exemplos com enexo maiores o email vai e o anexo nao.

Entao atualmente consigo enviar todos os emaill pelo metodo que o rocinha postou acima.


So nao funciona pelo hotmail.com, ja que o hotmail so funciona pelo site mesmo para enviar.

Email pelo Harbour

Enviado: 05 Jul 2014 16:51
por janio
Na função do Rochinha, o harbour ta reclamando da falta da função FormHtml

Preciso dela...

Email pelo Harbour

Enviado: 26 Ago 2014 13:50
por portelainfo
Boa tarde a todos!

Mais uma vez estou aqui para pedir ajudar.

Mudei do xHarbour 1.2.2 para Harbour 3.2 (seguindo o passo-a-passo do Toledo), depois atualizei seguindo o passo-a-passo do Itamar M. Lins Jr.

Atualmente tenho instalado:
- Fontes do Harbour* em "C:\devl\hb32\core-master"
- Harbour compilado em "C:\HB32\bin" (+toda a estrutura do Harbour)

Harbour Make (hbmk2) 3.2.0dev (r2014-08-22 12:41)
Copyright ( c ) 1999-2013, Viktor Szakáts
http://harbour-project.org/
Translation (pt-BR): Vailton Renato <vailtom@gmail.com>

- Variaveis do Harbour foram setadas no ambiente do Windows XP SP3

Estou tentando implementar no sistema, uma função para enviar email que vi aqui no forum. Mas, não estou conseguindo! Segue abaixo os arquivos de teste:

Arquivo TESTE.HBP

Código: Selecionar todos

-oTeste
-compr=yes
-quiet
-lxhb
-lhbwin
-lhbct
-lhbtip
TESTE.PRG
Arquivo TESTE.PRG

Código: Selecionar todos


function main()

   cArq := "Teste.prg"
   cls
   EmailErro(cArq)
	@ 23, 00
	
return nil


************************
Function EmailErro(cArq)
************************
*
*
aArq := {cArq}
 lRet := tip_MailSend("smtp.mail.yahoo.com.br" ,;
                  465,;
                  "MEU_EMAIL@yahoo.com.br",;
                  "MEU_EMAIL@gmail.com",;
                  NIL  /* xCC */ ,;
                  {}   /* xBCC */,;
                  "Erro do xxx123" ,;
                  "Erro do xxx321",;
                  aArq /* attachment */,;
                  "MEU_EMAIL@yahoo.com.br",;
                  "MINHA_SENHA",;
                  "",;
                  NIL  /* nPriority */,;
                  NIL /* lRead */,;
                  .F. /* lTrace */,;
                  .F. /*pop auth */ ,;
                  NIL /* lNoAuth */,;
                  NIL /* nTimeOut */,;
                  NIL /* cReplyTo */,;
                  .T. )
If lret
   alert("Erro enviado")
Else
   alert("Falha enviando erro.")
EndIf

return lRet
Tento compilar com o comando: HBMK2 TESTE.HBP

E aparece esse erro:

Código: Selecionar todos

C:\portela>hbmk2 teste.HBP
hbmk2: Processando opções do ambiente: -comp=mingw
.hbmk/win/mingw/TESTE.o:TESTE.c:(.data+0x88): undefined reference to `HB_FUN_TIP_MAILSEND'
collect2.exe: error: ld returned 1 exit status
hbmk2[teste]: Erro: Executando linkeditor. 1
C:\portela>
Att.

Mauricio Portela

Email pelo Harbour

Enviado: 26 Ago 2014 17:44
por Itamar M. Lins Jr.
Ola!
No Harbour 3.2 é hb_SendMail
No Harbour 3.4 apartir desta data abaixo, passou a chamar tip_MailSend()

Código: Selecionar todos

2013-08-22 06:24 UTC+0200 Viktor Szakáts (vszakats users.noreply.github.com)
  * contrib/hbtip/hbtip.hbp
  * contrib/hbtip/hbtip.hbx
  * contrib/hbtip/tests/gmail.prg
  * contrib/hbtip/sendmail.prg -> contrib/hbtip/mailsend.prg
    * renamed HB_SENDMAIL() to TIP_MAILSEND()
    * renamed HB_MAILASSEMBLE() to TIP_MAILASSEMBLE()
    * old function names protected with HB_LEGACY_LEVEL4
    ! fixed yet another old typo in extension list for binary detection
    + TIP_MAILASSEMBLE() got a new parameter indicating
      an HTML body
    + moved unsafe logic of loading .html body from disk file
      its filename is passed as <cBody> from TIP_MAILASSEMBLE()
      to TIP_MAILSEND(). It means former is now clean and safe.
Essa função faz parte do pacote TIP, por isso o Viktor mudou o nome.

Saudações,
Itamar M. Lins Jr.

Email pelo Harbour

Enviado: 01 Abr 2015 08:16
por janio
Uso a função do Rochinha (CDOSYS) e funciona muito bem... a não ser que não consigo enviar email pelo gmail.

Alguem consegue enviar email pelo gmail?

Janio

Email pelo Harbour

Enviado: 01 Abr 2015 08:53
por asimoes
Janio,

Na função do Rochinha você deve fazer uma pequena substituição:

De:
{ "Gmail (Google Mail)" ,'pop.gmail.com.br' ,'smtp.gmail.com.br' ,.t.,465,995,.t.,;

Para:
{ "Gmail (Google Mail)" ,'pop.gmail.com' ,'smtp.gmail.com' ,.t.,465,995,.t.,;

Email pelo Harbour

Enviado: 01 Abr 2015 11:22
por janio
aSimoes,

Ja tinha reparado nesse pequeno detalhe, ajustei, mesmo assim nao envia o email. Engraçado que o email do ig funciona de forma parecida com o gmail, mas naquele funciona e no gmail nao.

Janio

Email pelo Harbour

Enviado: 01 Abr 2015 17:33
por asimoes
Janio,

Eu tenho uma rotina de email que utiliza um código similar ao do rochinha e funciona sem problemas com o gmail.