Clipper On Line • Ver Tópico - Inserir uma imagem ao Corpo da Mensagem do Email

Inserir uma imagem ao Corpo da Mensagem do Email

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor asimoes » 22 Jan 2016 09:01

Quintas,

Para não esgotar o assunto:

COM CDOSYS funciona usar uma imagem local (computador) no corpo do email (webmail/thunderbird), essa eu já tinha resolvido, mas bati cabeça para descobrir como fazer, buscando no google algum exemplo que não era muito claro, enfim acabei descobrindo.

É assim:

Vou postar a função novamente para demonstrar o exemplo:
Não é bem assim, mas é só para titulo de demonstração:
O arquivo asaprev1.png está em uma pasta \sistema\img
O programa roda na pasta sistema
A chamada da função de email:
cMensagem:=AzulHTML +"Log de confirmação de atualização de sistema em: "+;
HB_DtoC(Date(), "DD/MM/YYYY")+" "+Time()+" "+QuebraHTML+;
VermelhoHTML+"Feito pelo Monitor AsaPrev Versão 3." + QuebraHTML + cImagem + QuebraHTML
Envia_Email({hb_DirBase()+"ASAPREV.NEW"},, cMensagem, "asaprev1.png", .F.)

Dentro da função Envia_Email tem a chamada para Config_Mail que chama Envia_Mail (eu sei que poderia estar tudo em uma única função) mas o intuito é mostrar como é feita a mágica.
O principal está na função Envia_Mail
Na chamada destes métodos:
:AddRelatedBodyPart(hb_DirBase()+"img"+hb_PS()+cImagem, cImagem, 1) //aqui adiciona a imagem ao corpo da mensagem.
:Fields:Item("urn:schemas:mailheader:Content-ID"):Value := "<"+cImagem+">" //aqui é indentificação da image
:Fields:Item("urn:schemas:mailheader:Content-Disposition"):Value := "inline"


E isso funciona tanto em algum webmail como em algum gerenciador de email por exemplo thunderbird, etc.

FUNCTION Envia_Email(aArquivo, cAssunto, cMensagem, cImagem, lInformaEnvio)
LOCAL lOk := .T.

   hb_Default(@aArquivo,{})
   hb_Default(@cAssunto, "Log de atualização de sistema em: "+hb_DtoC(Date(), "DD/MM/YYYY"))
   hb_Default(@cMensagem, "Log de erro de sistema em: "+hb_DtoC(Date(), "DD/MM/YYYY"))
   hb_Default(@cImagem, "")
   hb_Default(@lInformaEnvio, .T.)
   
   aFiles   := aArquivo // pode ser uma matriz com vários endereços
   cSubject := cAssunto
   aQuem    := "Alexandre Simões <asimoesluz@gmail.com>"
   cMsg     := cMensagem
   cServerIp:= "smtp.gmail.com" // servidor smtp
   cFrom    := "Sistema AsaPrev <origem@gmail.com>"
   cUser    := "origem@gmail.com" //"xhbsistemas"
   cPass    := senha"
   vPORTSMTP:= 465
   aCC      := "Alexandre Simões <copia@yahoo.com.br>"
   aBCC     := "" // caracteres entre aspas
   lConf    := .F.
   lSSL     := .T.
   
   lOk := Config_Mail(aFiles,;
                      cSubject,;
                      aQuem,;
                      cMsg,;
                      cServerIp,;
                      cFrom,;
                      cUser,;
                      cPass,;
                      vPORTSMTP,;
                      aCC,;
                      aBCC,;
                      lConf,;
                      lSSL,;
                      cImagem,;
                      lInformaEnvio)

RETURN lOk

FUNCTION Config_Mail(aFiles, cSubject, aQuem, cMsg, cServerIp, cFrom, cUser, cPass, vPORTSMTP, aCC, aBCC, lConf, lSSL, cImagem, lInformaEnvio)
LOCAL lRet
LOCAL oCfg, oErroMail
LOCAL lAut := .T. //cdpar000->mauth
   hb_Default(@cImagem, "")
   hb_Default(@lInformaEnvio, .T.)
   TRY
      oCfg := win_OleCreateObject( "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 oErroMail
      IF lInformaEnvio
         MsgStop("Não foi possível enviar o e-mail!"                       +hb_EOL()+ ;
                 "Error: "     + Transform(oErroMail:GenCode,   nil) + ";" +hb_EOL()+ ;
                 "SubC: "      + Transform(oErroMail:SubCode,   nil) + ";" +hb_EOL()+ ;
                 "OSCode: "    + Transform(oErroMail:OsCode,    nil) + ";" +hb_EOL()+ ;
                 "SubSystem: " + Transform(oErroMail:SubSystem, nil) + ";" +hb_EOL()+ ;
                 "Mensagem: "  + oErroMail:Description, "Atenção", 150, 10000, 2, .T.)
      ENDIF
      lRet := .F.
   END
   //--> FIM DAS CONFIGURAÇOES.
   IF lRet
      lRet := Envia_Mail(oCfg,;
                         cFrom,;
                         aQuem,;
                         aFiles,;
                         cSubject,;
                         cMsg,;
                         aCC,;
                         aBCC,;
                         lConf,;
                         lAut,;
                         lSSL,;
                         cServerIp,;
                         cImagem,;
                         lInformaEnvio)
   ENDIF
RETURN lRet

FUNCTION Envia_Mail(oCfg, cFrom, cDest, aFiles, cSubject, cMsg, aCC, aBCC, vEmaiL_Conf, lAut, lSSL, cServerIp, cImagem, lInformaEnvio )
LOCAL aTo
LOCAL lRet
LOCAL nEle, oErroMail
LOCAL cImagem1:='<img src="asaprev1.png" alt="AsaPrev">'

  hb_Default(@cImagem, "")
  hb_Default(@lInformaEnvio, .T.)
 
  IF !Empty(cImagem)
     cImagem1:='<img src="'+cImagem+'" alt="AsaPrev">'
  ENDIF

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

   FOR I:=1 TO Len(aTo)
      TRY
         Notificar("Aguarde, processando o envio do email.", "Monitor AsaPrev")
         oMsg := win_OleCreateObject( "CDO.Message" )
         WITH OBJECT oMsg
              :Configuration := oCfg
              :From          := cFrom
              :To            := aTo[i]
              :Cc            := aCC
              :BCC           := aBCC
              :Subject       := cSubject
              * ---------------------------------------------------------
              * Aqui adiciona a imagem ao corpo da mensagem
              * ---------------------------------------------------------
              IF !Empty(cImagem)
                 :AddRelatedBodyPart(hb_DirBase()+"img"+hb_PS()+cImagem, cImagem, 1)
                 :Fields:Item("urn:schemas:mailheader:Content-ID"):Value := "<"+cImagem+">"
                 :Fields:Item("urn:schemas:mailheader:Content-Disposition"):Value := "inline"
                 :Fields:Update()
              ENDIF
              :HTMLBody := cMsg + QuebraHTML + IF(!Empty(cImagem), cImagem1, "")
              * ------------------------------------------------------------------------------------------------
              FOR X := 1 TO Len( aFiles )
                 :AddAttachment(AllTrim(aFiles[x]))
                 DO EVENTS
              NEXT
              :Fields("urn:schemas:mailheader:disposition-notification-to"):Value := cFrom
              :Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"):Value := lAut
              :Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl"):Value := lSSL
              :Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value := cServerIp
              :Fields:update()
              DO EVENTS
              :Send()
         END WITH
         IF lInformaEnvio
            MsgInfo("E-mail enviado com sucesso", "Atenção")
         ENDIF
         lRet := .T.
      CATCH oErroMail
         IF lInformaEnvio
            MsgStop("Não foi possível enviar a mensagem: "+cSubject+hb_EOL()+;
                        "para o email: " + aTo[i]+"."                  +hb_EOL()+;
                        "Erro: " +oErroMail:Description , "Atenção")
         ENDIF
         lRet := .F.
      END
   NEXT
   
   oCfg := Nil
   oMsg := Nil

RETURN lRet
►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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4578
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 310 vezes
Mens.Curtidas: 221 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor JoséQuintas » 22 Jan 2016 09:16

Ainda não tinha pensado nisso de novo, mas....

Talvez dê pra colocar essa imagem como anexo, ao invés de embutido no html, e de alguma forma ser considerado como parte do email.

Lembro que no blat eu usava algo como <img src="cid:imagem">, e mais a opção embed pras imagens.

Vamos precisar de um email onde isso funcione, e salvá-lo em formato mime, pra ver como é feito.

Depois é alterar a montagem do email no Harbour pra fazer igual.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 13473
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 837 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor asimoes » 22 Jan 2016 10:37

Outras considerações, achei no google
Screen Shot 01-22-16 at 11.35 AM.PNG
►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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4578
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 310 vezes
Mens.Curtidas: 221 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor rubens » 29 Fev 2016 17:57

Boa tarde...

ASimoes,

Qual o conteúdo da variável

QuebraHTML

Na minha cMSG usei hb_eol() para quebra de linha mas percebi na linha que voce usa a QuebraHTML é um texto html então provavelmente deve ter sido isso que não deixou o meu texto formatado. Foi todo enviado com uma linha só...

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1515
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 73 vezes
Mens.Curtidas: 100 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor asimoes » 29 Fev 2016 18:37

Olá Rubens,

QuebraHTML := "<br>"
►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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4578
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 310 vezes
Mens.Curtidas: 221 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor JoséQuintas » 29 Fev 2016 20:35

Agora que vi seu último post.
Acabei chegando no mesmo texto.

https://sendgrid.com/blog/embedding-images-emails-facts/

Resumindo: Não existe jeito 100% eficiente.

3 formas citadas:

- Usando CID:, igual BLAT
- Incorporando no Html igual eu faço
- Usando link externo
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 13473
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 837 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor lugab » 29 Fev 2016 20:57

Boa noite, Asimoes...

Para testar o primeiro exemplo que vc postou ( primeiro da primeira página) precisa desses arquivos também ?
libeay32.dll
msvcr120.dll
ssleay32.dll
Precisa das libs:
hbssl.hbc
hbtip.hbc

Se a respost for não, diga quais arquivos precisa...

Só pra lembrar, o seu primeiro exemplo ( que pretendo testar ) , foi
AzulHTML  := '<span style="color:#0000FF">'
VermelhoHTML := '<span style="color:#FF0000">'
QuebraHTML := "
"
cImagem:='<img src="asaprev1.jpg" alt="Monitor AsaPrev">'

cMensagem:=AzulHTML  +"Log de confirma‡Æo de atualiza‡Æo de sistema em: "+hb_DtoC(Date(),"DD/MM/YYYY")+QuebraHTML+;
         VermelhoHTML+"Feito pelo Monitor AsaPrev."+QuebraHTML+;
         cImagem
             
Envia_Email({hb_DirBase()+"ASAPREV.NEW"},,cMensagem,.F.) //Envia email para mim informando que foi feito a atualização.
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 862
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 37 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor asimoes » 29 Fev 2016 21:07

Olá Lugab,

Você precisa somente destas dll´s e libs

libeay32.dll
msvcr120.dll
hbtip.hbc
hbssl.hbc

As dll´s você vai achar aqui nesta url

http://slproweb.com/products/Win32OpenSSL.html

Ou:
http://slproweb.com/download/Win32OpenSSL-1_0_2f.exe
►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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4578
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 310 vezes
Mens.Curtidas: 221 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor lugab » 01 Mar 2016 11:00

Obrgado, Asimoes...
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 862
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 37 vezes

Inserir uma imagem ao Corpo da Mensagem do Email

Mensagempor Itamar M. Lins Jr. » 17 Dez 2019 09:48

Ola!
Passei horas aqui... Estudando como DIAGRAMAR o corpo do texto.
Se salvar em arquivo os comandos HTML, fica ok o email, se mandar como string, o texto, os comandos html, aparecem como se fosse parte do texto.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4253
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 144 vezes
Mens.Curtidas: 241 vezes

Anterior



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro