Page 1 of 2

Imagen en envio de e-mail

Posted: Sat Oct 18, 2008 8:29 am
by dobfivewin
Amigos....

Estoy usando para el envio de e-mail la rutina de abajo....:

se puede que en el cuerpo del mensaje incorporar una imagen? para que el que recibe el correo visualice dicha imagen?.

Con la rutina la puedo poner como documento adjunto, pero quiero ver como dije que el que recibe el correo visualice dicha imagen.

muchas gracias

david
Argentina


Code: Select all

#include "MAIL.ch" 

*xOrigin     = Direccion de Origen   {}
*xRecipients = Direccion de Destino  {}
*xFiles      = Archivos a Enviar     {}
*xMensaje    = Mensaje								{}
*xSubject    = Titulo de E-mail      ''

************************************* 
FUNCTION       xEnviarMail( xOrigin     ,;
                            xRecipients ,;
                            xFiles      ,;
                            xMensaje    ,;
                            xSubject    )
************************************* 
Local oMail 
Local cMensaje1 := xMensaje[1]
Local cMensaje2 := xMensaje[2]
Local cMensaje3 := xMensaje[3]
local cSubject :=  xSubject				//"Título del mensaje" 

*local cNoteText := cMensaje1 + CRLF   + CRLF    + cMensaje2 + CRLF    + CRLF    + cMensaje3 
local cNoteText := cMensaje1 + chr(13)+ chr(13) + cMensaje2 + chr(13) + chr(13) + cMensaje3 
* local cNoteText := cMensaje1 + ' ' + cMensaje2 + ' 'cMensaje3 

local cMsgType := nil 

local cConversationID := nil 

local dDate := Date() 

local cTime := Time() 

local lReceipt := .f. 

local lFromUser := .t.  						// Abre el gestor de correo 

local aOrigin := xOrigin						//{"tudireccion@dominio.com"} 
local aRecipients := xRecipients		//{CLIENTES->Mail} 
local aFiles := xFiles 						  //{"c:\factura1.pdf","c:\factura2.pdf"} 

// 
cMensaje1 := xMensaje[1]		//"Linea 1 del mensaje" 
cMensaje2 := xMensaje[2]		//"Linea 2 del mensaje" 
cMensaje3 := xMensaje[3]		//"Linea 3 del mensaje" 
// 

oMail:=TMail():New(cSubject ,; 
                             cNoteText ,; 
                             cMsgType ,; 
                             cConversationID ,; 
                             dDate,; 
                             cTime,; 
                             lReceipt,; 
                             lFromUser,; 
                             aOrigin,; 
                             aRecipients,; 
                             aFiles) 
oMail:Activate() 
oMail:End() 

RETURN NIL 

Re: Imagen en envio de e-mail

Posted: Mon Mar 25, 2013 6:58 pm
by karinha
Nadie?

Re: Imagen en envio de e-mail

Posted: Mon Mar 25, 2013 8:55 pm
by benjiben143
Hola wenas wenas

con cdo. lo hago asi

Code: Select all

Function Envia_eMail(oCfg,cFrom, cTo, cCC, cBCC, cMsg, cSubject)
 
  local cToken
  local lRet := .f. , Omsg , x, i, loBP
    
       TRY
         oMsg := CREATEOBJECT ( "CDO.Message" )
           WITH OBJECT oMsg
                :Configuration = oCfg
                :From = cFrom                
                :To = cTo
                :CC = cCC
                :BCC = cBCC
                
                :Subject = cSubject
                :TextBody = cMsg
                
                
                For x := 1 To Len( aAttach )
                    if aAttach[x] <> NIL
                    
                       :AddAttachment(AllTrim(aAttach[x]))
                    endif
                Next
           
                :HTMLBody = "<p><img src='cid:id_imagen10'></p>" +"<p>La imagen de arriba esta embebida en el mensaje.</p>"
                loBP:=:AddRelatedBodyPart("c:\faceleben\kasto2.bmp", "id_imagen10", 1)
                WITH OBJECT loBP:Fields
                    :Item("urn:schemas:mailheader:Content-ID") = "id_imagen10"
                    :Update()
                END WITH

                :Send()
           END WITH
           lRet := .t.
       CATCH
      //     MsgInfo("No se pudo mandar la factura ")
           lRet := .f.
         END
 
    
Return lRet


 
saludos

Re: Imagen en envio de e-mail

Posted: Tue Mar 26, 2013 12:37 pm
by karinha
Muchas Gracias benjiben.

Salu2.

Re: Imagen en envio de e-mail

Posted: Tue Mar 26, 2013 1:36 pm
by karinha
Más ejemplos acá:

http://www.portalfox.com/index.php?name ... me=Printer

Muchas gracias, saludos.

Re: Imagen en envio de e-mail

Posted: Tue Mar 26, 2013 2:18 pm
by benjiben143
de ese portal saque la forma de mandar imagenes

saludos

trae muchas cosas que se pueden aprovechar

Re: Imagen en envio de e-mail

Posted: Tue Mar 26, 2013 4:51 pm
by karinha

Code: Select all

          /*
          Solicitando confirmación de lectura

          WITH loMsg
         .From = "user@mail.com"
         .Fields("urn:schemas:mailheader:disposition-notification-to") = .From
         .Fields("urn:schemas:mailheader:return-receipt-to") = .From
         .Fields.Update
          ENDWITH
          */

         :Fields("urn:schemas:mailheader:disposition-notification-to") = :FROM
         :Fields("urn:schemas:mailheader:return-receipt-to")           = :FROM
 
Esto no funiconó.

Salu2

Re: Imagen en envio de e-mail

Posted: Tue Mar 26, 2013 7:06 pm
by karinha
Resuelto:

Code: Select all

     // Solicitando confirmación de lectura
     // Asi funciona...
     :Fields( "urn:schemas:mailheader:disposition-notification-to" ):Value := cFrom
     :Fields:UpDate()
     //cFrom=Cuenta de salida. Quem envia o email.
 
Gracias, saludos.

Re: Imagen en envio de e-mail

Posted: Wed Mar 27, 2013 3:52 pm
by horacio
He probado esta clase, mandé una imágen no como attachment sino que se muestre en el cuerpo del correo. El problema que encontré es que en algunos lo muestra reducido ( gmail ) o me pide una confirmación para mostrar la imágen ( hotmail ). Quisiera probar enviando un archivo html pero tratando de usar el método "CreateMHTMLBody" me da un error, como si el método no existiese en la clase. Alguien a probado este método. Desde ya muchísimas gracias.

Saludos

Re: Imagen en envio de e-mail

Posted: Wed Mar 27, 2013 4:45 pm
by benjiben143
hola wen dia

le he probado y funciona y muestra el html al recibir ,, checalo

:CreateMHTMLBody("File://c:\faceleben\suave.html",0)




saludos

Re: Imagen en envio de e-mail

Posted: Wed Mar 27, 2013 11:01 pm
by horacio
Gracias Benjiben por contestar, Aqui te muestro el código y a continuación el mensaje de error

Code: Select all

Local loCfg := CreateObject( "CDO.Configuration" )
Local hIni  := HB_ReadIni( oVarGlobales : cIni )
    
With Object loCfg : Fields
    :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ) : Value       := Alltrim( hIni[ "Correo" ][ "Smtp" ] )
    :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ) : Value   := Alltrim( hIni[ "Correo" ][ "Port" ] )
    :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     := 'micorreo@gmail.com'
    :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ) : Value     := 'pasword'
    :Update()
End
loMsg := CREATEOBJECT ( "CDO.Message" )
With Object loMsg
:Configuration = loCfg
    :From = 'micorreo@gmail.com' //hIni[ "Correo" ][ "Usuario" ] //"hmdellacasa@yahoo.com.ar"
    :To = 'tu_correo@yahoo.com.ar' //'horacio_dellacasa@yahoo.com.ar'     // <-----       Coloca acá tu dirección de correo
    :Subject = Alltrim( oVarGlobales : cEmpresa ) //Alltrim( cAsunto )
    :CreateMHTMLBody("file://c:\admin\index.htm", 0) 
    :Send()
End
Return 0
 
Mensaje de error

Code: Select all

plicación
===========
   Path y nombre: C:\colegio_c\T-REX.EXE (32 bits)
   Tamaño: 4,795,904 bytes
  Versión del compilador: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 9421)
    Versión librería GUI: FWHX 12.04
   versión de Windows: 5.1, Build 2600 Service Pack 2

  Tiempo de ejecución: 0 hours 0 mins 1 secs 
   Error occurrido el: 28/03/2013, 19:55:31
 Descripci¢n del error: Error CDO.Message/3  DISP_E_MEMBERNOTFOUND: CREATEMHTMLBODY
   Args:
     [   1] = C   file://c:\admin\index.htm
     [   2] = N   0

Llamadas al Stack
===========
   Llamado por:  => TOLEAUTO:CREATEMHTMLBODY( 0 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => MANDACORREO( 473 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => (b)ERRORDIALOG( 437 )
   Llamado por: .\source\function\MSGRUN.PRG => (b)MSGRUN( 36 )
   Llamado por: .\source\classes\DIALOG.PRG => (b)TDIALOG:TDIALOG( 87 )
   Llamado por:  => TDIALOG:DISPLAY( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 873 )
   Llamado por:  => DIALOGBOXINDIRECT( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 270 )
   Llamado por: .\source\function\MSGRUN.PRG => MSGRUN( 42 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => ERRORDIALOG( 437 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => (b)ERRORSYS( 31 )
   Llamado por:  => DBUSEAREA( 0 )
   Llamado por: C:\colegio_c\util.prg => CARGABASES( 115 )
   Llamado por: C:\colegio_c\plt.prg => (b)START( 358 )
   Llamado por: .\source\function\MSGRUN.PRG => (b)MSGRUN( 36 )
   Llamado por: .\source\classes\DIALOG.PRG => (b)TDIALOG:TDIALOG( 87 )
   Llamado por:  => TDIALOG:DISPLAY( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 873 )
   Llamado por:  => DIALOGBOXINDIRECT( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 270 )
   Llamado por: .\source\function\MSGRUN.PRG => MSGRUN( 42 )
   Llamado por: C:\colegio_c\plt.prg => (b)START( 358 )
   Llamado por: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 973 )
   Llamado por: C:\colegio_c\plt.prg => START( 358 )
   Llamado por: C:\colegio_c\plt.prg => MAIN( 16 )
 
Que estoy haciendo mal ??? Gracias de antemano

Saludos

Re: Imagen en envio de e-mail

Posted: Wed Mar 27, 2013 11:01 pm
by horacio
Gracias Benjiben por contestar, Aqui te muestro el código y a continuación el mensaje de error

Code: Select all

Local loCfg := CreateObject( "CDO.Configuration" )
Local hIni  := HB_ReadIni( oVarGlobales : cIni )
    
With Object loCfg : Fields
    :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ) : Value       := Alltrim( hIni[ "Correo" ][ "Smtp" ] )
    :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ) : Value   := Alltrim( hIni[ "Correo" ][ "Port" ] )
    :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     := 'micorreo@gmail.com'
    :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ) : Value     := 'pasword'
    :Update()
End
loMsg := CREATEOBJECT ( "CDO.Message" )
With Object loMsg
:Configuration = loCfg
    :From = 'micorreo@gmail.com' //hIni[ "Correo" ][ "Usuario" ] //"hmdellacasa@yahoo.com.ar"
    :To = 'tu_correo@yahoo.com.ar' //'horacio_dellacasa@yahoo.com.ar'     // <-----       Coloca acá tu dirección de correo
    :Subject = Alltrim( oVarGlobales : cEmpresa ) //Alltrim( cAsunto )
    :CreateMHTMLBody("file://c:\admin\index.htm", 0) 
    :Send()
End
Return 0
 
Mensaje de error

Code: Select all

plicación
===========
   Path y nombre: C:\colegio_c\T-REX.EXE (32 bits)
   Tamaño: 4,795,904 bytes
  Versión del compilador: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 9421)
    Versión librería GUI: FWHX 12.04
   versión de Windows: 5.1, Build 2600 Service Pack 2

  Tiempo de ejecución: 0 hours 0 mins 1 secs 
   Error occurrido el: 28/03/2013, 19:55:31
 Descripci¢n del error: Error CDO.Message/3  DISP_E_MEMBERNOTFOUND: CREATEMHTMLBODY
   Args:
     [   1] = C   file://c:\admin\index.htm
     [   2] = N   0

Llamadas al Stack
===========
   Llamado por:  => TOLEAUTO:CREATEMHTMLBODY( 0 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => MANDACORREO( 473 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => (b)ERRORDIALOG( 437 )
   Llamado por: .\source\function\MSGRUN.PRG => (b)MSGRUN( 36 )
   Llamado por: .\source\classes\DIALOG.PRG => (b)TDIALOG:TDIALOG( 87 )
   Llamado por:  => TDIALOG:DISPLAY( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 873 )
   Llamado por:  => DIALOGBOXINDIRECT( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 270 )
   Llamado por: .\source\function\MSGRUN.PRG => MSGRUN( 42 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => ERRORDIALOG( 437 )
   Llamado por: C:\colegio_c\ERRSYSW.PRG => (b)ERRORSYS( 31 )
   Llamado por:  => DBUSEAREA( 0 )
   Llamado por: C:\colegio_c\util.prg => CARGABASES( 115 )
   Llamado por: C:\colegio_c\plt.prg => (b)START( 358 )
   Llamado por: .\source\function\MSGRUN.PRG => (b)MSGRUN( 36 )
   Llamado por: .\source\classes\DIALOG.PRG => (b)TDIALOG:TDIALOG( 87 )
   Llamado por:  => TDIALOG:DISPLAY( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 873 )
   Llamado por:  => DIALOGBOXINDIRECT( 0 )
   Llamado por: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 270 )
   Llamado por: .\source\function\MSGRUN.PRG => MSGRUN( 42 )
   Llamado por: C:\colegio_c\plt.prg => (b)START( 358 )
   Llamado por: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 973 )
   Llamado por: C:\colegio_c\plt.prg => START( 358 )
   Llamado por: C:\colegio_c\plt.prg => MAIN( 16 )
 
Que estoy haciendo mal ??? Gracias de antemano

Saludos

Re: Imagen en envio de e-mail

Posted: Thu Mar 28, 2013 4:58 am
by benjiben143
hola anexo la funcion completa

Code: Select all

***************************************************************
* Enviando emails                                             *
*                                                             *
* Desenvolvedor: Ricardo de Moura Marques                     *
* email: ricardomouramarques@hotmail.com                      *
*                                                             *
* Agradecimentos ao Alessandro Seribeli Barreto - "Ale SB"    *
* pelo código inicial, sem o qual, esse projeto               *
* não seria possível                                         *
*                                                             *
***************************************************************

#include "fivewin.ch"


memvar correo 
Static cAttach := ""
Static aAttach := {}
********************************************************************************
Function Main()
local cdestino :="chino72vale@hotmail.com;ferropuerto@ferropuerto.com"
local carchivos:={"C:\fwh\samples\hola.txt","C:\fwh\samples\texto.txt"}
local ctxt     :="a mandar un correo"
local csubject :="correo de pruebas " 
local cbmp     :="c:\faceleben\kasto2.bmp"
local chtml    :="c:\faceleben\suave.html"

  if config_email(cdestino, carchivos, ctxt, csubject,cbmp,chtml)
      ? "se mando el correo"
  else
     ? " no se mando correo"
  endif
 


Return Nil


********************************************************************************
Function Config_eMail(cdest, cfiles, ctxt, csubject, cbmp, chtml )

  Local cUser,cPass,cRemt, cCC, cCCO
  local lRet := .f.
  local oCfg, oError
  local cServ :="smtp.xxxxx.com"         // servidor smtp
  local nPort :=25                          // puerto
  local lAut  :=.t.
  local lSSL  :=.f.       
 
 
  if cfiles=nil
     aAttach:={}
  else
     aAttach:=cfiles
  endif   
 
  
  cPass:="xxxxxx"                          //usuario  
  cuser:="xxxxx@xxxxx.com"             //correo del quien manda
  ccc:=""
  ccco:=""
  cRemt:=cuser
  
  
 // aAttach:=CFILES   // serian los archivos anexados we
  
  if Empty(cPass) .or. Empty(cRemt) .or. empty(cDest) 
     ? "falta datos para mandar correo,,,, destino/ remitente / usuario checar "
     return .f.
  endif   
  ? "entramos a la configucraion"
  TRY
    oCfg := CREATEOBJECT( "CDO.Configuration" )
      WITH OBJECT oCfg:Fields
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"       ):Value := cServ
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"   ):Value := nPort
           :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 := cUser
           :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"     ):Value := cPass
              :Update()
      END WITH
      lRet := .t.
  CATCH oError
    MsgInfo( "No se pudo enviar e-Mail!"  +CRLF+ ;
             "Error: "     + Transform(oError:GenCode,   nil) + ";" +CRLF+ ;
             "SubC: "      + Transform(oError:SubCode,   nil) + ";" +CRLF+ ;
             "OSCode: "    + Transform(oError:OsCode,    nil) + ";" +CRLF+ ;
             "SubSystem: " + Transform(oError:SubSystem, nil) + ";" +CRLF+ ;
             "Mensaje: "   + oError:Description, "Atención" )

  END
  //--> FIM DAS CONFIGURAÇOES.
  if lRet
     lRet := Envia_eMail(oCfg,cRemt,cDest, cCC, cCCO, cTxt, cSubject, cbmp, chtml)   
  endif
   
Return lRet
 




********************************************************************************
Function Envia_eMail(oCfg,cFrom, cTo, cCC, cBCC, cMsg, cSubject, cbmp, chtml)
 
  local cToken
  local lRet := .f. , Omsg , x, i, loBP
    
       TRY
         oMsg := CREATEOBJECT ( "CDO.Message" )
           WITH OBJECT oMsg
                :Configuration = oCfg
                :From = cFrom                
                :To = cTo
                :CC = cCC
                :BCC = cBCC
                
                :Subject = cSubject
                :TextBody = cMsg
                
                
                For x := 1 To Len( aAttach )
                    if aAttach[x] <> NIL
                    
                       :AddAttachment(AllTrim(aAttach[x]))
                    endif
                Next
           
                :HTMLBody = "<p><img src='cid:id_imagen10'></p>" +"<p>La imagen de arriba esta embebida en el mensaje.</p>"
                loBP:=:AddRelatedBodyPart(cbmp, "id_imagen10", 1)
                WITH OBJECT loBP:Fields
                    :Item("urn:schemas:mailheader:Content-ID")= "id_imagen10"
                    :Update()
                END WITH
                :CreateMHTMLBody("File://"+chtml,0)
                :Send()
           END WITH
           lRet := .t.
       CATCH
      //     MsgInfo("No se pudo mandar la factura ")
           lRet := .f.
         END
 
    
Return lRet


 
se llama la funcion
config_email(cdestino, carchivos, ctxt, csubject,cbmp,chtml)

compilado con xharbour 1.2.1

Re: Imagen en envio de e-mail

Posted: Thu Mar 28, 2013 11:05 pm
by horacio
Gracias benjiben, pruebo y te comento ...

Saludos

Re: Imagen en envio de e-mail

Posted: Thu May 16, 2013 2:53 pm
by karinha
Buenas amigos, al añadir una imagen bmp al emal, la imagen viene correcta, más el texto(mensageria) del email no. Que hacer?

gracias, saludos.