Envio de e-mail com imagem (Indy)

Delphi

24/10/2007

Ola galera sou novo aqui no devmedia

Estou criando um programa para enviar e-mails usando o D7 e os componentes indy 9

Eu preciso colocar no corpo da mensagem uma imagem bmp ou jpg tanto faz.
Eu uso o Rxrichedit para criar a mensagem mas na hora que eu envio o e-mail ela nao aparece na hora da visualizacão no outlok ou hotmail

meu codigo para enviar o e-mail esta desse jeito:

begin
  AntiCongelamento:=TIdAntiFreeze.Create(nil);
  try
    AntiCongelamento.OnlyWhenIdle:=false;
    AntiCongelamento.ApplicationHasPriority:=true;
    AntiCongelamento.Active:=True;
    Result := True;
    try
      ClienteSMTP:=TIdSMTP.Create(nil);
      try
        with ClienteSMTP do
        begin
          host := ED_SERVIDOR_SMTP.Text;
          username := ED_USUARIO_EMAIL.Text;
          Password := ED_SENHA_EMAIL.Text;
         // AuthenticationType := atLogin;
          try
            Connect;
            Authenticate;
          except
            // Servidor não encontrado ou
            // nome de usuário ou senha inválidos!!!
            Result := False;
            raise;
          end;
          // Conectado e autenticado
          Mensagem:=TIdMessage.Create(nil);
          try
            with Mensagem do
            begin
              Encoding := meMIME;
              AttachmentEncoding := ´MIME´;
              From.Address := ED_EMAIL_REMETENTE.Text;
              From.Name := ED_NOME_REMETENTE.Text;
              // Adiciona os emails do campo Para
              //if (Length(destinatario) > 0)then
                //for i:=0 to High(destinatario) do
                  Recipients.Add.Address := FDataModule.CAUX.FieldByName(´EMAIL´).AsString;
              // Adiciona os emails do campo Com Cópia
             // if (Length(destinatarios_CC) > 0)then
             //   for i:=0 to High(destinatarios_cc) do
             //     CCList.Add.Address := destinatarios_cc[i];
              // Adiciona os emails do campo Com Cópia e Oculto
             // if (Length(destinatarios_CCO) > 0)then
              //  for i:=0 to High(destinatarios_cco) do
              //    BccList.Add.Address := destinatarios_cco[i];
              Subject := ED_ASSUNTO.Text;
              Body.Text := MM_TEXTO.Text;
              Priority := mpNormal;
              // Insere os arquivos anexos na mensagem
             // if (Length(arquivo_anexo) > 0) then
               // for i:=0 to High(arquivos_anexos) do
              for i := 0 to LB_ANEXOS.Items.Count - 1 do
              begin
                 if FileExists(LB_ANEXOS.Items.strings[i])then
                    TIdAttachmentFile.Create(Mensagem.MessageParts,LB_ANEXOS.Items.strings[i]);
              end;
            end;
            // Envia a mensagem
            try
              Send(Mensagem);
            except
              // Erro ao enviar a mensagem
              // Possiveis erros:
              // * Mensagem acima do tamanho permitido pelo servidor
              // * Mensagem possui conteúdo proibido pelo servidor
              Result := False;
              raise;
            end;
          finally
            Mensagem.Free;
          end;
          // Desconecta do servidor
          Disconnect;
        end;
      finally
        ClienteSMTP.Free;
      end;
    except end; 
  finally
    AntiCongelamento.Free;
  end;
end; 


no botao onde eu insiro a imagem no Rxrichedit esta assim:

procedure TFEnviaEmail.SpeedButton3Click(Sender: TObject);
var 
Pict: TPicture;
begin
  with OpenPictureDialog1 do begin
    if Execute then begin
      Pict := TPicture.Create;
      try
        Pict.LoadFromFile(FileName);
        Clipboard.Assign(Pict);
        MM_TEXTO.PasteFromClipboard;
      finally
      Pict.Free;
      end;
    end;
  end;
end;


Se alguem puder me ajudar!! :wink:


Lxlmaxlxl

Lxlmaxlxl

Curtidas 0

Respostas

Lxlmaxlxl

Lxlmaxlxl

24/10/2007

Por favor se alguem poder me ajudar !!!!


jah eh a segunda vez que eu posto aki e ninguem me ajuda :cry:

estou precisando muito disso eu soh preciso conseguir enviar uma imagem por email usando o delphi 7

no program eu vejo imagem mas quando eu envio ela nao aparece no email

desde jah agradeço ...


GOSTEI 0
Massuda

Massuda

24/10/2007

Pesquise aqui o fórum por IdSMTP... você deve encontrar vários tópicos sobre esse assunto.


GOSTEI 0
Lxlmaxlxl

Lxlmaxlxl

24/10/2007

Eu já pesquisei cara mas nenhum explica como enviar a imagem por e-mail, todos falam de como enviar o e-mail.
Mas com uma imagem junto até agora eu nao axei nada!!!! :(

Se alguem puder me ajudar !!!!!


GOSTEI 0
Massuda

Massuda

24/10/2007

Normalmente a imagem vai como anexo em um email formatado usando HTML. Eis um exemplo básico...
var 
  lMessage: TIdMessage; 
  lTextPart: TIdText; 
  lImagePart: TIdAttachment; 
begin 
  // ... some code here to initialize your SMTP server. 
  // It could be done somewhere as well 
  lMessage := TIdMessage.Create(Self); 
  lMessage.From.Address := ´myemail@mydomain.com´; 
  lMessage.Subject := ´My test email´; 
  lMessage.Recipients.Add.Address := ´someoneemail@somedomain.com´; 
  lMessage.Body.Clear; 

  lTextPart := TIdText.Create(lMessage.MessageParts); 
  // costuma-se por aqui uma versão texto (não-HTML) do 
  // texto HTML que você pretende enviar 
  lTextPart.Body.Text := ´This is a plain text message´; 
  lTextPart.ContentType := ´text/plain´; 

  lTextPart := TIdText.Create(lMessage.MessageParts); 
  // aqui vai o seu HTML 
  lTextPart.Body.Text := ´<html><body>´ + 
    ´<b>This is a HTML message with picture</b>´ + 
    // troque seus c:\suaimagem.jpg por um nome "simbólico" 
    ´<img src="htmlbodyIMG0000.JPG" >´ + 
    ´</body></html>´; 
  lTextPart.ContentType := ´text/html´; 

  lImagePart := TIdAttachment.Create(lMessage.MessageParts, 
    // aqui vai o nome de arquivo de sua imagem... 
    ´c:\suaimagem..JPG´); 
  lImagePart.ContentType := ´image/jpg´; 
  // ...e isso associa sua imagem com o símbolo que usou no HTML 
  lImagePart.Headers.Add(´Content-ID: <htmlbodyIMG0000.JPG>´); 
  // ... A code to send a message 
end;
Além disso, se você estiver usando o Indy 9 que veio com o Delphi, é recomendável atualizar seu Indy. Baixe o Indy 9.0.18 :arrow: [url=http://www.indyproject.org/Sockets/Download/Files/Indy9.en.aspx]desta página[/url]; essa é a última versão oficial; existe outra ´não-oficial´, mais recente, que você pode obter via CVS ou de um dos sites de snapshot do Indy. Instruções para instalação, você encontra no meio :arrow: [url=http://forum.devmedia.com.br/viewtopic.php?t=57069]deste tópico[/url]. Não recomendo usar Indy 10.


GOSTEI 0
Massuda

Massuda

24/10/2007

Outra coisa...
Eu uso o Rxrichedit para criar a mensagem...
Isso significa que você está formatando a mensagem no formato RTF. Nem todo programa de email suporta esse formato, melhor seria usar HTML. Infelizmente, não sei como fazer para converter de RTF para HTML.


GOSTEI 0
Tremonti

Tremonti

24/10/2007

Massuda,

Usei exatamente o código acima.

Porém a imagem não aparece no corpo do e-mail.

Ela vai em anexo somente.

Obrigado...

Segue código completo:
var
  lMessage   : TIdMessage;
  lTextPart  : TIdText;
  lImagePart : TIdAttachment;
begin

  lMessage := TIdMessage.Create(Self);
  lMessage.From.Address           := ´t e s t e @diskbiju.com.br´;
  lMessage.Subject                := ´Feliz Aniversário´;
  lMessage.Recipients.Add.Address := ´t e s t e @yahoo.com.br´;
  lMessage.Body.Clear;

  lTextPart := TIdText.Create(lMessage.MessageParts);
  // costuma-se por aqui uma versão texto (não-HTML) do
  // texto HTML que você pretende enviar
  lTextPart.Body.Text   := ´This is a plain text message´;
  lTextPart.ContentType := ´text/plain´;

  lTextPart := TIdText.Create(lMessage.MessageParts);
  // aqui vai o seu HTML
  lTextPart.Body.Text := ´<html><body>´ +
    // troque seus c:\suaimagem.jpg por um nome "simbólico"
    ´<img src="fernando.jpg" >´ +
    ´</body></html>´;
  lTextPart.ContentType := ´text/html´;

  lImagePart := TIdAttachment.Create(lMessage.MessageParts,
    // aqui vai o nome de arquivo de sua imagem...
    ´c:\Aniver.JPG´);
  lImagePart.ContentType := ´image/jpg´;
  // ...e isso associa sua imagem com o símbolo que usou no HTML
  lImagePart.Headers.Add(´Content-ID: <fernando.jpg>´);


try
 if idSMTP1.Connected then
  idSMTP1.Disconnect;
 idSMTP1.Connect();
 idSMTP1.Send(lMessage);
 if idSMTP1.Connected then
  idSMTP1.Disconnect;

 except on E:Exception do
 MessageDlg(´ERROR: ´ + E.Message, mtWarning, [mbok],0);
 end;

 ShowMessage( ´OK!´ );



GOSTEI 0
Massuda

Massuda

24/10/2007

:arrow: http://forum.devmedia.com.br/viewtopic.php?t=81650


GOSTEI 0
Luizito

Luizito

24/10/2007

Da uma olhada em : http://www.usercontrol.net/content/view/15/18/

Indy 10 com RAD Studio.

Abraço.


GOSTEI 0
POSTAR