Ir para conteúdo
Fórum Script Brasil
  • 0

Email pro GMAIL...


Douglas Soares

Pergunta

Boa Tarde!!!

Tenho uma rotina de enviar emails com IDMessage e IDSMTP que funciona perfeitamente, anexa arquivos e também coloca imagens no corpo das mensagens :rolleyes: ....

o problema é que uso um WebBrowser para fazer essa mensagem... ou seja, quando eu adiciono uma imagem eu tenho que escrever um < img src="cid:nomedaimg.jpg">.... só que a imagem fica aparecendo com um quadradinho vermelho como se não estivesse disponível... se eu enviar a mensagem ela vai normalmente, porém eu queria que ela aparecesse pra pessoa que está enviando...

segue o código para anexar a imagem no corpo...

for i := 0 to frmCobrancaSenhas.imglistbox.Items.Count - 1 do
begin
if FileExists(imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i]) then
begin
idAttach := TIdAttachment.Create(p, imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i]);
idAttach.ContentDisposition := 'attachment';
idAttach.ExtraHeaders.Values['Content-id'] := ExtractFileName(imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i]);
idAttach.ContentType := 'image/jpeg';
end;
end;

Repare que no código acima ele meio que adiciona um Header Extra... tem algum código pra adicionar isso no WebBrowser em tempo de execução??? tipo assim:

WebBrowser1.ExtraHeader.Values['Content-id'] := ExtractFileName(imagens_anexas + frmCobrancaSenhas.imglistbox.Items);

alguém sabe algo do tipo???

Obrigado

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Fala meu amigo, beleza!

Logicamente o problema está no cid:nomedaimg.jpg, o webbrowser não vai interpretar o caminho dela por esse parametro já que esse caminho não existe, existiria somente para arquivos em anexo e não em tempo de execução...

como não sei como voce ta fazendo esse esquema, nunca fiz, no webbrowser carregue elas normalmente com o caminho delas local tipo

<img src="C:\Caminho\imagem.jpg">

Na hora de enviar, você muda isso em tempo de execução... não sei se é por innerHTML ou outerHTML, possivelmente outer

pra puxar o HTML do webbrowser você pode usar

uses MSHTML;

var
  document: IHTMLDocument2;
  slBuff: TStringList;
begin
  document := WebBrowser1.Document as IHTMLDocument2;
  if Assigned(document) then
  begin
    slBuff := TStringList.Create;
    slBuff.Text := document.body.innerHTML; //ou outerHTML
    ShowMessage(slBuff.Text);
    //O HTML da mensagem está no slBuff, agora é só filtrar os src= das imagens para src=cid: e enviar ;)
    slBuff.Free;
  end;
end;

como eu nem sei como é que funciona talvez to falando besteira rsr

abrx

Editado por Churc
Link para o comentário
Compartilhar em outros sites

  • 0

Fala churc!, beleza sim e vc?

Realmente é por OuterHTML que eu puxo pra um memo e dps envio a mensagem...

acho que vou ter que fazer um stringreplace mesmo, acho que vai ser fácil... no entanto to enfrentando outro problema um pouco mais facil (pelo menos eu acho ^^)

Seguinte... no gmail o email html não vai nada, eu acabei de descobrir porque... ele não aceita as tags de HTML iniciais, nada que esteja antes do body e nem depois, exemplo:

< html >

< head >

< /head >

< body >

Ele só aceita o html que tá aqui dentro < strong> NEGRITO < / strong>

< /body >

< /html>

O problema é que quando converto o html pro memo ele vai com essas tags... até ai beleza não importo... só que eu precisava substituir isso... tudo por nada... deixar só o que tem depois do < body > e tirar do outro < /body > pra frente.... você tem uma noção de como eu faria isso?

Vlw

Link para o comentário
Compartilhar em outros sites

  • 0

Voltei dps de uma longa viagem... cheguei ontem e tava sem internet até agora... to na casa do meu patrão :blush:

Então... problema quase resolvido... já consigo enviar email pra qualquer um agora, com anexo e tudo, o probleminha agora é que imagem no corpo do email ele só vai se não for gmail, aiaiai que bronca desse gmail maluco :wacko: alguém tem alguma ideia?

Link para o comentário
Compartilhar em outros sites

  • 0

Opa,

Mal só entrei agora hehe

Viu, então sobre o Gmail, se ele só aceita o que está depois do <body> e sem fechar a tag <body> voce pode tipo

var
  szBuff: String;
  i: Integer;
begin
  szBuff := Memo1.Text; //puxa o codigo fonte html
  i := Pos('<body>', LowerCase(szBuff));
  if i > 0 then
  begin  
    Delete(szBuff, 1, i + (Length('<body>') - 1)); //para não remover a escrita <body>
    i := Pos('</body>', LowerCase(szBuff));
    if i > 0 then
    Delete(szBuff, i, Length(szBuff)); //deleta ate o fim
end;

pronto, dessa forma você remove o que ta antes de <body> e de </body> em diante

o código fonte estaria em szBuff

Lembrando que, se estiver </ body> não funcionaria rs

abrxx

Link para o comentário
Compartilhar em outros sites

  • 0

E ae...

Vixi eu consegui já fazer isso aquele dia, só que tipo eu só mando o que ta dentro do <body> </body>...

a unica coisa agora é que se eu mando uma imagem anexada ao corpo, no gmail não vai, ela vai como anexo comum, porém em qualquer outro provedor recebe normal no corpo da mensagem... o que eu poderia fazer???

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Hospede a imagem em um servidor, tipo o site da empresa de vocês por exemplo, e então ao invés de no caminho <img src=cid:> voce troca por <img src="http://www.sitedevoces.com.br/mailing/images/nomeimagem.jpg">

O caminho no servidor já é com você ;)

Lembrando que assim qualquer email bloqueia imagens, o usuário tem que clicar em "Exibir imagens do email" ou coisa do tipo rs

abraxx

Link para o comentário
Compartilhar em outros sites

  • 0

Puxa churc... se eu fosse ter que carregar todas as imagens eu tava frito :P ...

o que eu to querendo é tipo o que o Windows Live Mail ou o Outlook faz... colocar uma imagem no corpo do email... eu já consigo fazer isso com esse código:

for i := 0 to frmCobrancaSenhas.imglistbox.Items.Count - 1 do
   begin
   if FileExists(imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i]) then
   begin

   if gmail then
   begin
   idText2.Body.Text := StringReplace(idText2.Body.Text, imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i], 'cid:' + frmCobrancaSenhas.imglistbox.Items[i], [rfReplaceAll]);
   end
   else
   begin
   idText1.Body.Text := StringReplace(idText1.Body.Text, imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i], 'cid:' + frmCobrancaSenhas.imglistbox.Items[i], [rfReplaceAll]);
   end;

   frmCobrancaSenhas.IdMessage1.Body.Text := StringReplace(frmCobrancaSenhas.IdMessage1.Body.Text, imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i], 'cid:' + frmCobrancaSenhas.imglistbox.Items[i], [rfReplaceAll]);
   idAttach := TIdAttachment.Create(p, imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i]);
   idAttach.ContentType := 'image/jpeg';
   if gmail then
   begin
   IdAttach.DisplayName := ExtractFileName(imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i]);
   idAttach.ContentDisposition := 'inline';
   end
   else
   begin
   idAttach.ContentDisposition := 'attachment';
   end;
   idAttach.ExtraHeaders.Values['Content-id'] := ExtractFileName(imagens_anexas + frmCobrancaSenhas.imglistbox.Items[i]);
   end;
   end;

Funciona pra qualquer provedor, é claro que eles pedem pra EXIBIR IMAGENS BLÁ BLÁ BLÁ... mas daí aparece.... porém no gmail não....... a imagem era pra ir no corpo, porém vai como anexo... e no corpo onde era pra ta a imagem fica sem nada :wacko: ...

Tem alguma ideia?

Link para o comentário
Compartilhar em outros sites

  • 0

Douglas,

Veja se pode me ajudar:

Estou com um problema no envio de emails pelo gmail, utilizo o Indy, mas eu só conseguia enviar depois do segundo clique no botão, o primeiro dava erro de dll, mesmo as dlls estarem nos diretórios corretos (acho), mas agora dá outro erro estranho:

...raised exception class EIdOSSLConnectError with message 'Error connection with SSL'.

e dae não consigo enviar!!!

Obrigado.

qualquer. coisa eu envio o código q estou testando aki!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...