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

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


Denis_K

Pergunta

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 para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...