enviar emails desde fwh

enviar emails desde fwh

Postby MANOLO » Sat Feb 21, 2009 12:58 am

Hola a todos, necesito enviar emails desde mi aplicación en fwh, hasta ahora la tenia en clipper y funcionaba bien con tsmtp, pero al pasarla a fwh, me da error al compilar el fichero winsock.c, entonces e probado otras opciones:

twmail() ----> envia los emails pero con ficheros adjuntos, al primer destinatario lo hace con basura en el fichero, por lo que es ilegible.
hb_sendmail() ----> el programa se queda colgado, justo en la clase turl, se queda bloqueado sin dar ningún tipo de error.
outlook. ole ---> envia bien el email pero siempre me aparece una ventana que dice "un programa intenta enviar un email automaticamente, pulse si para enviar", por lo que no es muy correcto.

Alguien podría darme alguna sugerencia, estoy realmente bloqueado.

Gracias.
MANOLO
 
Posts: 87
Joined: Sun Oct 09, 2005 8:49 pm
Location: Spain

Re: enviar emails desde fwh

Postby dobfivewin » Sat Feb 21, 2009 8:26 am

Hoña Manolo

Pasame tu correo para mandarte mis escritos y consultas sobre el tema, a lo mejor te pueden ayudar.

Abandone un poco el tema pero en lo que pueda ayudar a sus ordenes...

salu2

david
dobfivewin
 
Posts: 325
Joined: Sun Feb 03, 2008 11:04 pm
Location: Argetnina

Re: enviar emails desde fwh

Postby MANOLO » Sat Feb 21, 2009 10:44 am

gracias david este es mi email

mcanada1@telefonica.net
MANOLO
 
Posts: 87
Joined: Sun Oct 09, 2005 8:49 pm
Location: Spain

Re: enviar emails desde fwh

Postby Antonio Linares » Sat Feb 21, 2009 10:46 am

Manolo,

Aqui tienes un ejemplo:
Code: Select all  Expand view  RUN
#include "FiveWin.ch"
#include "Mail.ch"

function Main()

   local oWnd

   DEFINE WINDOW oWnd

   ACTIVATE WINDOW oWnd ON INIT doit()

return nil

function doit()

   local oMail, aCustomer:={}
   local cSubject := "Test mail"
   local cMessage := "This is a test message."

   AAdd( aCustomer, "alinares@fivetechsoft.com;mcanada1@telefonica.net" )

   DEFINE MAIL oMail;
      SUBJECT cSubject;
      TEXT cMessage

   oMail:aRecipients = aCustomer

   ACTIVATE MAIL oMail

   MsgInfo( "mail sent" )

return nil
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42107
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: enviar emails desde fwh

Postby FiveWiDi » Sat Feb 21, 2009 11:03 pm

Antonio Linares wrote:Manolo,

Aqui tienes un ejemplo:
Code: Select all  Expand view  RUN
#include "FiveWin.ch"
#include "Mail.ch"

function Main()

   local oWnd

   DEFINE WINDOW oWnd

   ACTIVATE WINDOW oWnd ON INIT doit()

return nil

function doit()

   local oMail, aCustomer:={}
   local cSubject := "Test mail"
   local cMessage := "This is a test message."

   AAdd( aCustomer, "alinares@fivetechsoft.com;mcanada1@telefonica.net" )

   DEFINE MAIL oMail;
      SUBJECT cSubject;
      TEXT cMessage

   oMail:aRecipients = aCustomer

   ACTIVATE MAIL oMail

   MsgInfo( "mail sent" )

return nil
 


Antonio,

Sería possible enviar mails a destinatarios 'CCO' con la clase tMail?

Un saludo
Carlos G.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1190
Joined: Mon Oct 10, 2005 2:38 pm

Re: enviar emails desde fwh

Postby MANOLO » Sun Feb 22, 2009 9:05 pm

Hola antonio, con el codigo que me has dado envia emails, pero outlook muestra una pantalla de "otro programa intenta enviar un email en su nombre desea permitirlo", y también si añado la linea:

oMail:aFiles:=aFic

entonces ni envia el fichero.

gracias por tu ayuda.
MANOLO
 
Posts: 87
Joined: Sun Oct 09, 2005 8:49 pm
Location: Spain

Re: enviar emails desde fwh

Postby mmercado » Mon Feb 23, 2009 4:19 pm

MANOLO wrote:Hola antonio, con el codigo que me has dado envia emails, pero outlook muestra una pantalla de "otro programa intenta enviar un email en su nombre desea permitirlo", y también si añado la linea:

oMail:aFiles:=aFic

entonces ni envia el fichero.

Hola Manolo y amigos:

Gracias a Carlos Mora descubrí el uso de CDOSYS (Collaboration Data Objects) para el envío de correos, para mí es la mejor herramienta de las que he probado para el envío de correos desde FWH/xHarbour ya que no requiere del uso de sockets ni de aplicaciones intermedias (como Outlook)

Aquí les dejo un pequeño ejemplo funcional de dicha tecnología, que espero les sea de utilidad.
Code: Select all  Expand view  RUN
#include "FiveWin.ch"
#include "TSButton.ch"
#include "CdoSys.ch"

#define WS_3DLOOK  4
#define CLR_HBROWN nRGB( 205, 192, 176 )
#define CLR_NBLUE  nRGB( 142, 171, 194 )

//---------------------------------------------------------------------------------------------//

Function Main()

   Local oDlg, aCtl[ 20 ], oFont

   Local cMailServer := PadR( "smtp.hotmail.com", 60 ), ;           // servidor de correo
         cFrom       := PadR( "remitente@hotmail.com", 60 ), ;      // remitente
         cTo         := PadR( "destinatarios@hotmail.com", 180 ), ; // destinatario (uno o varios separados con comas)
         cBCC        := PadR( "destinatarios@hotmail.com", 180 ), ; // copias ocultas a (uno o varios separados con comas)
         cAttach     := PadR( "c:\fwh\bitmaps\fivewin.bmp", 180 ), ;// archivo anexo (uno o varios separados con comas)
         cSubject    := Space( 60 ), ;                              // asunto
         cBody       := Space( 500 ), ;                             // cuerpo del mensaje
         nPort       := 25, ;                                       // puerto usado por el servidor de correo
         cUser       := Space( 60 ), ;                              // nombre de usuario para autenticación
         cPass       := Space( 30 )                                 // contraseña para autenticación

   DEFINE FONT oFont NAME "Arial" SIZE 0, -16

   DEFINE DIALOG oDlg FROM 0, 0 TO 455, 703 PIXEL ;
          COLORS CLR_BLUE, CLR_HBROWN ;
          TITLE "CDOSYS Collaboration Data Objects for Windows 2000" ;
          STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, WS_3DLOOK )

   @ 10,  5 SAY aCtl[ 1 ] PROMPT "Servidor de Correo:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 70, 11 PIXEL

   @ 10, 80 GET aCtl[ 2 ] VAR cMailServer OF oDlg ;
            FONT oFont  UPDATE  PICTURE "@K" ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 264, 11 PIXEL

   @ 24,  5 SAY aCtl[ 3 ] PROMPT "Remitente:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 70, 11 PIXEL

   @ 24, 80 GET aCtl[ 4 ] VAR cFrom OF oDlg ;
            FONT oFont  UPDATE  PICTURE "@K" ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 264, 11 PIXEL

   @ 39,  5 SAY aCtl[ 5 ] PROMPT "Destinatario:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 70, 11 PIXEL

   @ 39, 80 GET aCtl[ 6 ] VAR cTo OF oDlg ;
            FONT oFont  UPDATE  PICTURE "@K" ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 264, 11 PIXEL

   @ 54,  5 SAY aCtl[ 7 ] PROMPT "Copia para:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 70, 11 PIXEL

   @ 54, 80 GET aCtl[ 8 ] VAR cBCC OF oDlg ;
            FONT oFont  UPDATE  PICTURE "@K" ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 264, 11 PIXEL

   @ 69,  5 SAY aCtl[ 9 ] PROMPT "Adjuntar:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 70, 11 PIXEL

   @ 69, 80 GET aCtl[ 10 ] VAR cAttach OF oDlg  PICTURE "@K" ;
            FONT oFont  UPDATE Action fAddAttach( aCtl[ 10 ] ) ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 264, 11 PIXEL

   @ 84,  5 SAY aCtl[ 11 ] PROMPT "Asunto:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 70, 11 PIXEL

   @ 84, 80 GET aCtl[ 12 ] VAR cSubject OF oDlg ;
            FONT oFont  UPDATE PICTURE "@K" ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 264, 11 PIXEL

   @ 99,  5 SAY aCtl[ 13 ] PROMPT "Autenticación: Usuario:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 80, 11 PIXEL

   @ 99, 87 GET aCtl[ 14 ] VAR cUser OF oDlg ;
            FONT oFont  UPDATE PICTURE "@K" ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 118, 11 PIXEL

   @ 99,213 SAY aCtl[ 15 ] PROMPT "Contraseña:" OF oDlg ;
            FONT oFont UPDATE ;
            COLORS CLR_BLUE, CLR_HBROWN SIZE 44, 11 PIXEL

   @ 99,259 GET aCtl[ 16 ] VAR cPass OF oDlg ;
            FONT oFont  UPDATE  PICTURE "@K";
            COLORS CLR_BLUE, CLR_WHITE SIZE 85, 11 PIXEL

   @118,  6 STATIC aCtl[ 17 ] BBOX OF oDlg SIZE 338, 83 PIXELS UPDATE ;
            FONT oFont COLORS CLR_WHITE, CLR_NBLUE, CLR_BLUE ;
            LABEL "Cuerpo del mensaje" ALIGN DT_CENTER

   @126, 10 GET aCtl[ 18 ] VAR cBody OF oDlg ;
            FONT oFont MULTILINE  UPDATE ;
            COLORS CLR_BLUE, CLR_WHITE SIZE 330, 72 PIXEL

   @208,213 SBUTTON aCtl[ 19 ] PROMPT "&Enviar" OF oDlg CRYSTAL ;
            FONT oFont SIZE 53, 16 PIXEL  ;
            COLORS CLR_BLUE, CLR_NBLUE ;
            ACTION fSendMail( cMailServer, cFrom, cTo, cSubject, cBody, cAttach, cBCC, cUser, cPass, nPort )

   @208,292 SBUTTON aCtl[ 20 ] PROMPT "&Salir" OF oDlg CRYSTAL ;
            FONT oFont SIZE 53, 16 PIXEL  ;
            COLORS CLR_BLUE, CLR_NBLUE

   ACTIVATE DIALOG oDlg CENTERED ;
            VALID ( oFont:End(), .T. )

Return Nil

//---------------------------------------------------------------------------------------------//

Function fSendMail( cMailServer, cFrom, cTo, cSubject, cBody, cAttach, cBCC, cUser, cPass, nPort )

   Local oCfg, oMsg, oError, ;
         lAuth    := ! Empty( cUser ) .and. ! Empty( cPass ), ;
         nSendOpt := 2   // send using: 1 = pickup folder  2 = port  3 = remote mail server

   Default nPort    := 25, ;
           cSubject := "", ;
           cBody    := ""

   CursorWait()

   Try
      oCfg := CreateObject( "CDO.Configuration" )

      With Object oCfg:Fields
         :Item( cdoSMTPServer ):Value     := Trim( cMailServer )
         :Item( cdoSMTPServerPort ):Value := nPort
         :Item( cdoSendUsing ):Value      := nSendOpt

         If lAuth
            :Item( cdoSMTPAuthenticate ):Value := 1
            :Item( cdoSendUserName ):Value     := Trim( cUser )
            :Item( cdoSendPassword ):Value     := Trim( cPass )
            :Item( cdoSMTPUseSSL ):Value := 1
         EndIf

         :Update()
      End With


      oMsg := CreateObject( "CDO.Message" )

      With Object oMsg
         :Configuration := oCfg
         :From          := Trim( cFrom )
         :To            := Trim( cTo )
         :Subject       := Trim( cSubject )
         :TextBody      := Trim( cBody )

         If ! Empty( cAttach )
            :AddAttachment := Trim( cAttach )
         EndIf

         If ! Empty( cBCC )
            :BCC := Trim( cBCC )
         EndIf

         :Send()
      End With

   Catch oError
      CursorArrow()
      MsgStop( "No se pudo enviar el mensaje" + CRLF  + "Error: " + cValToChar( oError:GenCode) + CRLF + ;
               "SubC: " + cValToChar( oError:SubCode ) + CRLF + "OSCode: " + cValToChar( oError:OsCode ) + CRLF + ;
               "SubSystem: " + cValToChar( oError:SubSystem ) + CRLF + "Mensaje: " + oError:Description )

      oCfg := Nil
      oMsg := Nil
      Return Nil
   End Try

   oCfg := Nil
   oMsg := Nil
   SndPlaySound( GetWinDir() + "\media\Tada.wav", 0 )
   CursorArrow()

Return Nil

//---------------------------------------------------------------------------------------------//

Static Function fAddAttach( oGet )

   Local cFile, ;
         cAttach := oGet:VarGet()

   cFile := cGetFile( "*.*", "Selecciona el archivo" )

   If ! Empty( cFile )
      cAttach := Lower( PadR( AllTrim( cAttach ) + If( ! Empty( cAttach ), ",", "" ) + AllTrim( cFile ), 180 ) )
   EndIf

   oGet:cText( cAttach )

Return Nil


Aquí tienen CdoSys.ch:
Code: Select all  Expand view  RUN
#ifndef _CDOSYS_CH
#define _CDOSYS_CH
#define cdoSMTPServer       "http://schemas.microsoft.com/cdo/configuration/smtpserver"
#define cdoSMTPServerPort   "http://schemas.microsoft.com/cdo/configuration/smtpserverport"
#define cdoSendUsing        "http://schemas.microsoft.com/cdo/configuration/sendusing"
#define cdoSMTPPickupFolder "http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory"
#define cdoSMTPAuthenticate "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"
#define cdoSendUserName     "http://schemas.microsoft.com/cdo/configuration/sendusername"
#define cdoSendPassword     "http://schemas.microsoft.com/cdo/configuration/sendpassword"
#define cdoSMTPUseSSL       "http://schemas.microsoft.com/cdo/configuration/smtpusessl"
#endif
 

Un abrazo.

Manuel Mercado

PD a Carlos Mora.- Porqué no continúas con tu Blog Harbour Advisor? me pareció excelente su presentación además que tienes un magífico estilo en la redacción de tus temas. Gracias nuevamente.
manuelmercado at prodigy dot net dot mx
User avatar
mmercado
 
Posts: 782
Joined: Wed Dec 19, 2007 7:50 am
Location: Salamanca, Gto., México

Re: enviar emails desde fwh

Postby Armando » Mon Feb 23, 2009 4:41 pm

Manolo y amigos:

Parece que en el foro en Inglés hay otra alternativa.

viewtopic.php?f=3&t=14678


Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3228
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: enviar emails desde fwh

Postby MANOLO » Mon Feb 23, 2009 4:55 pm

Gracias armando, esta alternativa ya la he probado, agrego la lib tip.lib que viene con xharbour 1.1, pero al enviar el email, el programa se queda bloqueado y no continua, no dan ningun error, simplemente se queda colgado cuando llega a la clase turl.

gracias.
MANOLO
 
Posts: 87
Joined: Sun Oct 09, 2005 8:49 pm
Location: Spain

Re: enviar emails desde fwh

Postby MANOLO » Mon Feb 23, 2009 5:54 pm

Hola manuel, gracias por tu aportación, lo he integrado pero no envia el email da el siguiente error:

No se pudo enviar el mensaje
Error:1001
subc: 3
oscode: 0
subsystem: CDO.message
Mensaje: DISP_E_MEMBERNOTFOUND.

Me puedes decir donde puedo encontrar informacion de ésto.

Gracias
MANOLO
 
Posts: 87
Joined: Sun Oct 09, 2005 8:49 pm
Location: Spain

Re: enviar emails desde fwh

Postby mmercado » Mon Feb 23, 2009 6:14 pm

MANOLO wrote:Hola manuel, gracias por tu aportación, lo he integrado pero no envia el email da el siguiente error:

No se pudo enviar el mensaje
Error:1001
subc: 3
oscode: 0
subsystem: CDO.message
Mensaje: DISP_E_MEMBERNOTFOUND.
Hola Manolo:

Este error te lo manda con el ejemplo que publiqué o ya es en tu aplicación?
MANOLO wrote:Me puedes decir donde puedo encontrar informacion de ésto.

Busca con Google "cdosys" o "cdo mail" o "cdosys mail"

Espero que alguien más pruebe el ejemplo y nos diga si encuentra algún problema.

Saludos.

Manuel Mercado
manuelmercado at prodigy dot net dot mx
User avatar
mmercado
 
Posts: 782
Joined: Wed Dec 19, 2007 7:50 am
Location: Salamanca, Gto., México

Re: enviar emails desde fwh

Postby Carlos Mora » Mon Feb 23, 2009 7:52 pm

Manolo,

Es imposible adivinar que está mal en tu código si no lo subes. Es muy probable que tengas algún problema sintáctico, el error MEMBER NOT FOUND es algo así como que no encuentra la variable o método, el equivalente al Message not found de Harbour.

CDO es parte de windows, por lo que te puedo asegurar que funciona y muy bien, hasta en lugares que el resto me fallaba.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: enviar emails desde fwh

Postby Carlos Mora » Mon Feb 23, 2009 8:05 pm

Hola Manuel,

mmercado wrote:PD a Carlos Mora.- Porqué no continúas con tu Blog Harbour Advisor? me pareció excelente su presentación además que tienes un magífico estilo en la redacción de tus temas. Gracias nuevamente.


¡Cuantos elogios! :oops: Me pasa como a la gran mayoría, la falta de tiempo. Además no he tenido mucho feedback, solo un par de mensajes de agradecimiento, y otros tantos reclamando la "propiedad intelectual" de lo que escribí, lo que me quita bastante las ganas.
Tengo un artículo a medias sobre PDF, XML y formularios, y cuesta dejarlos 'presentables'. Tambien en gatera otro sobre refactoring y programar más orientado a objetos con Harbour y FW, y la importancia de los patrones de software y como afecta a los fivewinners.
Harbour advisor pretendía ser más bien el arranque de un esfuerzo colectivo, tal como lo ponía en el primer post, pero no hubo eco, los colegas prefieren seguir cada uno a su ritmo de manera individual.
Otro factor que afecta la disponibilidad de tiempo es que estoy aprendiendo algo de python, que me ha sorprendido gratamente, y que probablemente justifique otro post.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: enviar emails desde fwh

Postby triumvirato » Tue Feb 24, 2009 7:42 am

MANOLO wrote:Hola manuel, gracias por tu aportación, lo he integrado pero no envia el email da el siguiente error:

No se pudo enviar el mensaje
Error:1001
subc: 3
oscode: 0
subsystem: CDO.message
Mensaje: DISP_E_MEMBERNOTFOUND.

Me puedes decir donde puedo encontrar informacion de ésto.

Gracias


Tengo exáctamente el mismo error, con el código tal cual lo publica Manuel Mercado. En vista home premium. La dll Cdosys si está presente en esta versión de vista.

Carlos Mora wrote:Manolo,

Es imposible adivinar que está mal en tu código si no lo subes. Es muy probable que tengas algún problema sintáctico, el error MEMBER NOT FOUND es algo así como que no encuentra la variable o método, el equivalente al Message not found de Harbour.

CDO es parte de windows, por lo que te puedo asegurar que funciona y muy bien, hasta en lugares que el resto me fallaba.


Este error, desde mis mínimos conocimientos, creo recordar que era porque el objeto no se llegaba a crear.

Saludos!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: enviar emails desde fwh

Postby FranciscoA » Tue Feb 24, 2009 8:27 pm

Manuel: Muchas gracias por tu aporte.
He probado con el codigo que suministras (unicamente cambie los botones y omiti el attach), y da el siguiente error:

---------------------------------
No se pudo enviar el mensaje
Error: 1001
SubC: 16389
OSCode: 0
Subsystem: CDO.Message
Mensaje: E_FAIL
---------------------------------

Es la primera vez que pruebo emails desde FWH/xHARBOUR
Espero nos puedas ayudar.

Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 42 guests