Página 1 de 1

win_oleCreateObject y CDO

Enviado: 31 Jan 2025 18:49
por Paredes01
Buenas tardes

Estoy migrando mi sistema de xharbour comercial a harbour
y he tenido dificultad con win_oleCreateObject y CDO para enviar correos.

Pero en harbour no logro hacer que funcione al cambiar a
win_oleCreateObject

despliega error de:

Error: 1
Subc: 1006
subsystem: WINOLE
Mensaje: Error de argumento


Cualquier sugerencia sera de mucha ayuda, saludos!!


Este procedimiento funciona bien en xharbour:

Código:

Código: Selecionar todos

Procedure CORREO(cParaquien, cConcopia, cMensaje, cRutaarchivo,cBody, lsta)
   Local loCfg, loMsg, oError, HTML
   Try
      loCfg := CreateObject("CDO.Configuration" )
      WITH OBJECT loCfg:Fields
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value        := "mail.demo.mx"
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value    := 465
         :Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"):Value         := 2
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := .T.
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl"):Value        := .T.
         :Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"):Value      := "agentes@demo.mx"
         :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value      := "demodemo"
         :Update()
      END WITH

      loMsg := CreateObject("CDO.Message")
      WITH OBJECT loMsg
         :Configuration := loCfg
         :From          := "agentes@demo.mx"
         :To            := cParaquien    
         :Cc            := cConcopia
         :Subject       := cMensaje
         :TextBody      :=  cBody
         :AddAttachment := cRutaarchivo
         :Send()
      END WITH
      lsta := .t.
   Catch oError
      Alert( "No se pudo enviar el correo electrónico"        + ";" + ;
             "Error: "     + Transform(oError:GenCode, NIL)   + ";" + ;
             "SubC: "      + Transform(oError:SubCode, NIL)   + ";" + ;
             "OSCode: "    + Transform(oError:OsCode, NIL)    + ";" + ;
             "SubSystem: " + Transform(oError:SubSystem, NIL) + ";" + ;
             "Mensaje: "   + oError:Description )
      lsta := .f.
   End
Return

win_oleCreateObject y CDO

Enviado: 31 Jan 2025 20:20
por JoséQuintas
Já passaram por aqui problemas, conforme a biblioteca, e também problema quando mistura xhb.hb, e Tole().
NÃO use CREATEOBJECT()
use win_OleCreateObject()
O fonte, à primeira vista, está correto.

De preferência, extraia as partes que interessam da biblioteca xhb, e não use xhb.hbc
Essa biblioteca é problemática.

Pode fazer o teste com o fonte separado do restante, pra comprovar se pode ser interferência de lib.

win_oleCreateObject y CDO

Enviado: 31 Jan 2025 22:34
por Paredes01
Maestro, Quintas
Gracias por responder

Precisamente ahí tengo el problema
cuando cambio a win_oleCreateObject

Saludos!!

win_oleCreateObject y CDO

Enviado: 01 Fev 2025 14:03
por JoséQuintas
Seu maior problema é o TRY/CATCH porcaria

Código: Selecionar todos


PROCEDURE Main()

   SetMode(30,100)
   CLS

   Correo( "test@test.com", "", "x", "d:\temp\test.prg", "x", "z" )

   Inkey(0)

   RETURN

Procedure CORREO(cParaquien, cConcopia, cMensaje, cRutaarchivo,cBody, lsta)
   Local loCfg, loMsg //, oError, HTML
   //Try
      loCfg := win_OleCreateObject("CDO.Configuration" )
      WITH OBJECT loCfg:Fields
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value        := "mail.demo.mx"
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value    := 465
         :Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"):Value         := 2
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := .T.
         :Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl"):Value        := .T.
         :Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"):Value      := "agentes@demo.mx"
         :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value      := "demodemo"
         :Update()
      END WITH

      loMsg := win_OleCreateObject("CDO.Message")
      WITH OBJECT loMsg
         :Configuration := loCfg
         :From          := "agentes@demo.mx"
         :To            := cParaquien
         :Cc            := cConcopia
         :Subject       := cMensaje
         :TextBody      :=  cBody
         :AddAttachment := cRutaarchivo
         :Send()
      END WITH
      lsta := .t.
   //Catch oError
   //   Alert( "No se pudo enviar el correo electrónico"        + ";" + ;
   //          "Error: "     + Transform(oError:GenCode, NIL)   + ";" + ;
   //          "SubC: "      + Transform(oError:SubCode, NIL)   + ";" + ;
   //          "OSCode: "    + Transform(oError:OsCode, NIL)    + ";" + ;
   //          "SubSystem: " + Transform(oError:SubSystem, NIL) + ";" + ;
   //          "Mensaje: "   + oError:Description )
   //   lsta := .f.
   //End
Return
A sua mensagem de erro me confundiu.
Confundiu tanto, que não sei se o SEU ERRO é o que mencionei antes ou este do meu teste agora.
Faça seu próprio teste, retirando o tratamento de erro.
erro.png
erro.png (5.56 KiB) Exibido 3304 vezes
Aqui fica visível que o erro é em AddAttachment.

win_oleCreateObject y CDO

Enviado: 02 Fev 2025 02:28
por Paredes01
Enterado, Maestro Quintas
Hago mis pruebas y comento

Gracias!!

win_oleCreateObject y CDO

Enviado: 02 Fev 2025 05:20
por Jairo Maia
Olá Paredes,

1-Primeiro, concordo com o José, mude:

Código: Selecionar todos

loCfg := CreateObject("CDO.Configuration" )
por:
loCfg := win_OleCreateObject("CDO.Configuration" )
2-Realmente está errado o elemento :AddAttachment. :AddAttachment é uma função. Como funcionava em xHarbour não sei, mas o correto é:

Código: Selecionar todos

:AddAttachment( "Caminho_completo_do_arquivo.Ext" )
ou
:AddAttachment( "" )
Se preferir, use:

Código: Selecionar todos

For nFiles:=1 To Len( aRutaarchivo )

 :AddAttachment( AllTrim( aRutaarchivo[nFiles] ) )
 
Next
Lembrando que tem que enviar o caminho completo, mesmo que o arquivo esteja na mesma pasta...

win_oleCreateObject y CDO

Enviado: 02 Fev 2025 16:47
por Paredes01
Resuelto, gracias a sus comentarios y consejos

Lo único que cambie en el código fuente anexo fue:

CreateObject
cambio por
win_oleCreateObject

y

:AddAttachment:= cRutaarchivo
cambio por
:AddAttachment(cRutaarchivo)

Funcionando al 100%

Saludos y gracias !!