Fórum Envio de email com html e anexo delphi7 + indy (Socorrooo) #526570
22/07/2015
0
Desenvolvi um sistema em D7 com indy para envio de emails diretamente dentro do sistema.Estou com um problema para enviar esses emails com um html no corpo e um anexo.
Meu programa funciona e envia emails normalmente, porém com uma diferença se visualizado pelo hotmail ou pelo outlook.
Se na body do email eu converter para uft8, ela sai normal no hotmail, mas no outlook o mesmo email aparace o html desconfigurado, sem formatação.
Ou se eu colocar ancii na body do texto acontece ao contrário.Aparece normal no outlook e sem formatação no hotmail.
Ja tentei procurar em outros foruns sobre esse problema mas ainda nao encontrei a solução.
Oq eu preciso faze é mandar um email com um texto com caracteres especiais(acentuação) e um anexo pdf. Tentei de diversas maneiras alterando o charset e o contentype mas sempre da certo somente para o hotmail ou no outlook, mas nunca os dois.
Gostaria de saber se alguém já teve esse problema ou possa me dar uma idéia de como resolve-lo.
Obrigado

Rafael Branco
Curtir tópico
+ 0Post mais votado
27/07/2015
Eu não tenho mais o D7 instalado, não vou conseguir ajudar muito! Eu uso o XE3 com Indy 10 e funciona 100%, usando as propriedades
IdCorpo.CharSet := 'ISO-8859-1'; //PT-BR
IdCorpo.ContentTransfer := '16bit'; //acentuação
Vc pode tentar colocar a identificação dos caracteres no próprio HTML:
IdMessage1.ContentType := 'text/html';
IdMessage1.CharSet := 'ISO-8859-1';
IdMessage1.Body.Text := '<html>'
+ '<head>'
+ '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">'
+ '</head>'
+ '<body>'
+ 'corpo do email HTML aqui (com acentuação)'
+ '</body>'
+ '</html>';
Tiago Rizzon

Gostei + 2
Mais Posts
26/07/2015
Tiago Rizzon
Vc está colocando o html direto em IdMessage1.Body ?
ou vc está separando o email em partes usando IdText's com ContentType 'text/plain' para texto e 'text/html' para html?
Provavelmente vc terá que passar a versão UTF junto nas informações html do email para que o leitor (web ou cliente de email) faça a codificação certa dos caracteres.
Gostei + 1
26/07/2015
Rafael Branco
Eu ja tentei das duas maneiras. Usando a variavel idtext e separando o email em partes e também jogando direto o html no body...mas como sempre somente da certo no hotmail ou no outook. Vc teria algum exemplo para mostrar?
Agradeço!
Gostei + 0
27/07/2015
Tiago Rizzon
Se possível mostra o conteúdo de um email que vc esteja enviando, digo, oq vc está igualando nos IdText's.ContentType e IdText.Body e/ou no
Message.ContentType e Message.Body....
Talvez só esteja faltando identificar no próprio html(string) a versão de caracteres utilizada (não no componente).
Meu IdText
IdCorpo := TIdText.Create(Mensagem.MessageParts, nil);
IdCorpo.ContentType := 'text/html';
IdCorpo.CharSet := 'ISO-8859-1'; //PT-BR
IdCorpo.ContentTransfer := '16bit'; //acentuação
IdCorpo.Body.Text := 'meu html aqui';
Até depois!
Gostei + 1
27/07/2015
Rafael Branco
Esse exemplo envia normalmente para o hotmail e o outlook, mas repare que esta comentada a parte do anexo, quando eu tiro o comentario no chega o email nos 2 com o anexo mas no hotmail aparece desconfigurado.
// IdMessage2.ContentType := 'application/pdf';
// IdMessage2.ContentTransferEncoding := 'base64';
// TIdAttachment.Create(IdMessage2.MessageParts, 'C:\Logic\Dimensionamento#80.pdf');
IdMessage2.ContentType := 'text/html';
IdMessage2.ContentTransferEncoding := '16bit'; // <
IdMessage2.Body.Add((Memo_obs.Text));
Gostei + 1
28/07/2015
Eduardo Mendonça
enviar anexo no corpo do email com indy
No topo da pagina tem o link do código.
Gostei + 0
28/07/2015
Rafael Branco
Sobre esse seu exemplo...como ficaria a parte do anexo?.....em muitos testes que eu fiz deu certo para o hotmai e outlook mas sem o anexo, e quando eu colocava o anexo dava pau nos caracteres do hot ou do outlook.
E Eduardo, obrigado pela resposta também.....Eu já tinha visto esse link e fiz esse exemplo, porém o mesmo email com anexo não aparece certo no outlook e hotmail .
Gostei + 0
28/07/2015
Rafael Branco
E como ficaria a parte do anexo?...
Obrigado!
Gostei + 0
30/07/2015
Tiago Rizzon
Eu testei sim, no Outlook, e nos webmails (yahoo mail, gmail e outlook.com). Feito no XE3 usando as configurações básicas e tbm IdText.Charset e IdText.ContentTransfer, sempre ficou certinho com acentuação.
A parte dos anexos eu faço bem simples, acredito que vc faça mais caprichado doq eu, veja a rotina abaixo (esse é meu loop que anexa os arquivos):
Anexo é TIdAttachmentFile, e o tmpAnexos é um TListBox.
for I := 0 to tmpAnexos.Items.Count - 1 do begin
Anexo := TIdAttachmentFile.Create(Mensagem.MessageParts, tmpAnexos.Items[I]);
if UpperCase(ExtractFileExt(tmpAnexos.Items[I])) = '.JPG' then Anexo.ContentType := 'image/jpeg'
else if UpperCase(ExtractFileExt(tmpAnexos.Items[I])) = '.PNG' then Anexo.ContentType := 'image/png';
//demais extenções aqui
Anexo.FileName := ExtractFileName(tmpAnexos.Items[I]);
end;
Eu preciso melhorar um pouco a minha unit que envia emails, e também a caixa de entrada (frmEnvMail e frmEntMail), daqui uma semana fica mais ajustado, se quiser posso colar uma cópia aqui! (na verdade eu nunca terminei elas, apesar de estarem em uso)
Vc conseguiu testar no Delphi XE5?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)