21 de jan. de 2007

Como criar emails em formato HTML usando Indy 9?

Exemplo de envio de email em formato HTML usando Delphi e Indy 9:

 1 var
 2   Email: TIdMessage;
 3   Texto: TIdText;
 4   Html: TIdText;
 5   Anexo: TIdAttachment;
 6 begin
 7   Email := TIdMessage.Create(nil);
 8   try
 9     // ...ajusta remetente, destinatário, etc...
10 
11     // define o tipo do conteúdo da mensagem
12     Email.ContentType := 'multipart/mixed';
13 
14     // cria a parte texto - pode estar em branco
15     Texto := TIdText.Create(Email.MessageParts);
16     Texto.Body.Text :=
17       'This message contains HTML and images.';
18     Texto.ContentType := 'text/plain';
19 
20     // cria a parte HTML
21     Html := TIdText.Create(Email.MessageParts);
22     Html.Body.Text := '<html><body>'
23       + 'Mensagem de <b>Teste</b><br />'
24       + '<img src="cid:imagem.jpg" />'
25       + '</body></html>';
26     Html.ContentType := 'text/html';
27 
28     // inclui no email a imagem usada na parte HTML
29     Anexo := TIdAttachment.Create(
30       Email.MessageParts, 'c:\pasta\imagem.jpg');
31     Anexo.ContentType := 'image/jpg';
32     Anexo.Headers.Add('Content-ID: <imagem.jpg>');
33 
34     // ... envia o email...
35   finally
36     Email.Free;
37   end;
38 end;
Pontos importantes:
  • A parte em formato text/plain deve estar presente embora não precise conter texto. Existe um bug no Indy que, na ausência dessa parte, faz com que o email seja gerado vazio.
  • Para ter imagens embutidas no email, inclua o header Content-ID e use na tag img o modificador cid: ao especificar a origem da imagem.

12 de jan. de 2007

Como enviar emails usando Indy 9?

Exemplo básico de envio de email usando Delphi e Indy 9:

1 var 2 Email: TIdMessage; 3 begin 4 // SMTP é um TIdSMTP 5 // POP3 é um TIdPOP3; 6 7 Email := TIdMessage.Create(nil); 8 try 9 10 // ...ajusta remetente, destinatário, etc da mensagem... 11 12 POP3.Host := 'seu-servidor-pop3'; 13 POP3.Username := 'seu-username'; 14 POP3.Password := 'sua-senha-secreta'; 15 16 POP3.Connect; 17 18 try 19 SMTP.Host := 'seu-servidor-smtp'; 20 SMTP.AuthType := atLogin; 21 SMTP.Username := 'seu-username'; 22 SMTP.Password := 'sua-senha-secreta'; 23 24 SMTP.Connect; 25 try 26 SMTP.Send(Email); 27 except 28 on E: Exception do begin 29 // envio falhou 30 end; 31 end; 32 SMTP.Disconnect; 33 finally 34 POP3.Disconnect; 35 end; 36 finally 37 Email.Free; 38 end; 39 end;

Pontos importantes:
  • Nem todo servidor SMTP requer autenticação: nesse caso, TIdSMTP.AuthType, TIdSMTP.Username e TIdSMTP.Password podem ser omitidos.
  • Nem todo servidor SMTP exige que antes se conecte ao servidor POP3: nesse caso, tudo que é relacionado com o servidor POP3 pode ser omitido. Note que quando isso é necessário, deve se permanecer conectado ao servidor POP3 enquanto estiver usando o servidor SMTP.
  • Permamenecer conectado aos servidores POP3 e SMTP o mínimo de tempo possível. A maioria desses servidores irá desconectar o cliente por inatividade ou por tempo.
  • Este exemplo não funciona com o GMail e outros servidores que usam SSL