Envio de email com html e anexo delphi7 + indy (Socorrooo)
Ola, boa noite!
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
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
Curtidas 0
Melhor post

Tiago Rizzon
27/07/2015
Oi Rafael,
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>';
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>';
GOSTEI 2
Mais Respostas

Tiago Rizzon
22/07/2015
Bom dia!
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.
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

Rafael Branco
22/07/2015
Ola Tiago, muito obrigado pela resposta!
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!
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

Tiago Rizzon
22/07/2015
Oi, eu vou providenciar ao fim da tarde um exemplo de email html que eu utilizo e colar aqui pra vc analisar.
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!
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

Rafael Branco
22/07/2015
Ola Tiago, testei o seu codigo e ele deu erro na linha do chartset....meu delphi é o 7, será que ele nao tem essa propriedade na idtext?
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));
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

Eduardo Mendonça
22/07/2015
Rafael Branco eu usei esse tutorial encontrado aqui no fórum ele explica com fazer o que você ta querendo leia com atenção que você ira conseguir
enviar anexo no corpo do email com indy
No topo da pagina tem o link do código.
enviar anexo no corpo do email com indy
No topo da pagina tem o link do código.
GOSTEI 0

Rafael Branco
22/07/2015
Ola Tiago.....vou testar com o XE5 que eu tenho instalado aqui também!
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 .
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

Rafael Branco
22/07/2015
Boa noite Tiago, esse exemplo vc chegou a testar no hotmail e no outlook para ver se os caracteres ficaram corretos?
E como ficaria a parte do anexo?...
Obrigado!
E como ficaria a parte do anexo?...
Obrigado!
GOSTEI 0

Tiago Rizzon
22/07/2015
Oi Rafael, boa tarde!
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?
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