Fórum Envio de email com html e anexo delphi7 + indy (Socorrooo) #526570

22/07/2015

0

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
Rafael Branco

Rafael Branco

Responder

Post mais votado

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>';

Tiago Rizzon

Tiago Rizzon
Responder

Gostei + 2

Mais Posts

26/07/2015

Tiago Rizzon

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.
Responder

Gostei + 1

26/07/2015

Rafael Branco

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!
Responder

Gostei + 0

27/07/2015

Tiago Rizzon

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!
Responder

Gostei + 1

27/07/2015

Rafael Branco

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));
Responder

Gostei + 1

28/07/2015

Eduardo Mendonça

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.
Responder

Gostei + 0

28/07/2015

Rafael Branco

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 .
Responder

Gostei + 0

28/07/2015

Rafael Branco

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!
Responder

Gostei + 0

30/07/2015

Tiago Rizzon

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?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar