Sábado, Novembro 20, 2004

Enviando mensagens html com anexos

Ao executar o programa da postagem Enviando mensagens com imagens em anexo, notamos um problema: a mensagem é enviada corretamente, com a imagem em anexo, porém o html não é gerado corretamente, aparecendo como texto normal.
Analisando o cabeçalho da mensagem, vemos que o content-type da mensagem está como text/plain, mesmo tendo especificado text/html.
O que ocorre é que a mensagem, quando tem um anexo, é transformada em multipart e isso faz que o conteúdo seja enviado como texto.
Uma solução para isto é enviar o texto da mensagem como uma parte de texto, com conteúdo html. Isto é feito criando-se uma variável do tipo TIdText, que será preenchida com o texto que queremos. Na realidade, iremos criar duas partes de texto na mensagem: uma normal, não html, que será mostrada em leitores de e-mail não html, e outra html. Isto é feito da seguinte maneira:



// configura para multipart
ContentType := 'Multipart/Alternative';
// parte de texto normal
idText := TIdText.Create(MessageParts,nil);
idText.ContentType := 'text/plain';
idText.Body.Add('Esta parte é texto puro e não mostra a imagem');
// parte de texto html
idText := TIdText.Create(MessageParts,nil);
idText.ContentType := 'text/html';
idText.Body.Text := '<html><body>Esta mensagem html tem '+
'imagens<br />'+
'A imagem está como anexo, e não está fora da mensagem:<br />'+
'<img src="cid:MinhaImagem"></body></html>';
// Configura anexos
Imagem := TIdAttachment.Create(MessageParts,
'c:\windows\cafezinho.bmp');
Imagem.ExtraHeaders.Values['Content-ID'] := '<minhaimagem>';
Imagem.ContentType := 'image/jpeg';

Desta maneira, temos a mensagem com anexos formatada corretamente, podendo ser vista tanto em leitores texto como html.

0 Comentários:

Postar um comentário

<< Home