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;