Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Nome de anexo de e-mail (email) errado


Denis_K

Question

Olá!

Comecei a usar os componentes Indy para fazer envios de e-mail da minha aplicação, e os e-mails estão sendo enviados normalmente, mas o nome do anexo, quando envio para contas do Gmail ou Hotmail, aparecem errados. Quando envio para contas do Webmail (da Locaweb) e do Yahoo! os anexos chegam com os nomes corretos.

Por exemplo: Eu envio um anexo "x.pdf"

nas contas Webmail e Yahoo! Chega com o nome "x.pdf" normal

Nas contas do Gmail ou Hotmail chega com o nome x.pdf name="x.pdf"

Alguém tem ideia do que possa ser? Segue abaixo o código do envio

procedure TForm1.envio1;
var
  anexoCaminho  : String;
  anexo         : TIdAttachmentFile;
  IdSMTP1       : TIdSMTP;
  IdMessage1    : TIdMessage;
begin
  IdSMTP1    := TIdSMTP.Create(Self);
  IdMessage1 := TIdMessage.Create(Self);

  with IdMessage1 do
  begin

    Recipients.EMailAddresses := 'destinatario@email.com'; //Destinatário

    Subject       := 'Isso aquilo 2';
    Body.Text     := 'Texto';
    Sender.Name   := 'Nome';
    From.Name     := 'Nome';
    From.Address  := 'enderecodeenvio@emailtal.com.br';

    anexoCaminho := 'C:\x.pdf';
    anexo := TIdAttachmentFile.Create(MessageParts, anexoCaminho);
    anexo.ContentType := 'application/pdf; name=' + ExtractFileName(anexoCaminho);
    anexo.FileName := 'x.pdf';
  end;

  with IdSMTP1 do
  begin
    Username := 'enderecodeenvio@emailtal.com.br';
    Password := 'senhatal';
    Host := 'smtp.emailtal.com.br';

    Connect();
    Authenticate();

    Send(IdMessage1);
    Disconnect();
  end;

end;

Obrigado!

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Pelo que vi, voce não recebeu resposta nos outros foruns ....

Nas contas do Gmail ou Hotmail chega com o nome x.pdf name="x.pdf"

no entanto voce postou comandos diferentes

anexo.ContentType := 'application/pdf; name=' + ExtractFileName(anexoCaminho);
anexo.ContentType := getTipoMIME(ExtractFileExt(anexoCaminho))+ ';name='+ ExtractFileName(anexoCaminho);

o porque de aparecer no Gmail ou Hotmail com name="x.pdf"

anexo.ContentType := 'application/pdf; name=' + 'x.pdf';

=============================================

percebeu onde está o problema ?

abraço

Link to comment
Share on other sites

  • 0

Olá Jhonas! Obrigado por responder!

Pois é, mas as funções que eu postei nos outros fóruns eram praticamente iguais, pois o trecho

getTipoMIME(ExtractFileExt(anexoCaminho))
retornava 'application/pdf'. Mas infelizmente do jeito que você me mostrou o erro ocorre também. ---- Agora há pouco, depois de pesquisar e testar muito eu consegui resolver o problema da seguinte forma: aqui:
anexo.ContentType := 'application/pdf; name=' + ExtractFileName(anexoCaminho);
eu coloquei apenas:
anexo.ContentType := 'application/pdf;';
PS: IMPORTANTE: Com o ponto-e-vírgula! Observando o fonte dos e-mails, parece que ou os serviços de e-mail ou os componentes Indy já incluem o nome do arquivo, de modo que o "name=x.pdf" ficava duplicado. Por algum motivo no Webmail e no Yahoo! isso era ignorado. De qualquer modo, muito obrigado! Segue abaixo o código de envio de e-mail com anexo completo: (Nota: Eu testei apenas enviando para Yahoo!, Hotmail, Gmail e Webmail da Locaweb. Usando como remetente um e-mail do Webmail da Locaweb) Procedure para envio de e-mail com anexo
procedure TForm1.enviar;
var
  anexoCaminho     : String;
  IdAttachmentFile  : TIdAttachmentFile;
  IdSMTP1              : TIdSMTP;
  IdMessage1         : TIdMessage;
begin
  try
    //Mensagem
    IdMessage1 := TIdMessage.Create(Self);
    with IdMessage1 do
    begin
      Recipients.EMailAddresses := 'email_de_destino@xpto.com.br'; //Destinatário

      Subject       := 'Assunto'; //Assunto
      Body.Text     := 'Este e-mail tem um PDF em anexo'; //Corpo do e-mail
      Sender.Name   := 'Fulano'; //Nome de quem está enviando
      From.Name     := 'Fulano'; //Nome de quem está enviando
      From.Address  := 'email_do_remetente@xpto.com.br'; //e-mail de quem está enviando
      ContentType   := 'multipart/mixed'; //Tipo de conteúdo do e-mail
    end;

    //Anexo
    anexoCaminho := 'C:\x.pdf'; //Caminho do arquivo
    with IdAttachmentFile do
    begin
      IdAttachmentFile := TIdAttachmentFile.Create(IdMessage1.MessageParts, anexoCaminho); //Incluindo o anexo na mensagem
      IdAttachmentFile.ContentType := 'application/pdf;'; //Informando o tipo MIME do anexo. IMPORTANTE! Colocar o tipo MIME +; (ponto-e-vírgula)
      IdAttachmentFile.FileName := ExtractFileName(anexoCaminho); //Nome do arquivo
    end;


    //SMTP
    IdSMTP1    := TIdSMTP.Create(Self); //Criando o objeto
    with IdSMTP1 do
    begin
      Username := 'email_do_remetente@xpto.com.br'; //Nome de usuário (e-mail do remetente)
      Password := 'senha_do_email_do_remetente'; //Senha do remetente
      Host := 'smtp.xpto.com.br'; //Host do remetente

      Connect(); //Conectar
      Authenticate(); //Autenticar

      Send(IdMessage1); //Enviar
      Disconnect(); //Desconectar
    end;

    ShowMessage('Enviado!');
  except
    on e : Exception do
    begin
      MessageDlg('Ocorreu um erro' + #13 + e.Message,mtError,[mbOK],0);
    end;
  end;
end;

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...