13 de abr. de 2007

MSDN Magazine Maio/2007

A MSDN Magazine de Maio  já está disponível no site da Microsoft. Destaque para JavaScript e o novo XNA Game Studio Express, a ferramenta de desenvolvimento gratuita para o XBox.

6 de abr. de 2007

Como enviar email usando Indy 10?

Este exemplo mostra como enviar emails usando Indy10.

 1 var
 2   Email: TIdMessage;
 3 begin
 4   // SMTP é um TIdSMTP
 5   // POP3 é um TIdPOP3
 6   // UserPassProvider é um TIdUserPassProvider
 7 
 8   Email := TIdMessage.Create(nil);
 9   try
10 
11     // ...ajusta remetente, destinatário, etc da mensagem...
12     Email.Subject := '...assunto...';
13     Email.From.Address := 'remetente@mailinator.com';
14     Email.Recipients.EMailAddresses := 'destinatario@mailinator.com';
15     Email.Body.Text := '...texto da mensagem...';
16 
17     // conecta com o servidor POP3
18     // alguns provedores exigem isso
19     POP3.Host := 'seu-servidor-pop3';
20     POP3.Username := 'seu-username';
21     POP3.Password := 'sua-senha-secreta';
22     POP3.Connect;
23 
24     try
25       SMTP.Host := 'seu-servidor-smtp';
26 
27       // alguns servidores SMTP exigem login
28       SMTP.AuthType := satSASL;
29       UserPassProvider.Username := 'seu-username';
30       UserPassProvider.Password := 'sua-senha-secreta';
31 
32       SMTP.Connect;
33       try
34         SMTP.Send(Email);
35       except
36         on E: Exception do begin
37           // o envio falhou, trata o erro
38         end;
39       end;
40       SMTP.Disconnect;
41     finally
42       POP3.Disconnect;
43     end;
44   finally
45     Email.Free;
46   end;
47 end;
Pontos importantes: 
  • Nem todo servidor SMTP exige que se conecte antes ao servidor POP3: nesse caso, tudo que é relacionado com o servidor POP3 pode ser omitido (linhas 19 a 22 e linha 42). Note que quando isso é necessário, deve-se permanecer conectado ao servidor POP3 enquanto estiver usando o servidor SMTP.
  • Nem todo servidor SMTP requer autenticação: nesse caso, use SMTP.AuthType = atNone (linha 28) e não tem necessidade de username/senha (linhas 29 e 30).
  • Para fazer autenticação no servidor SMTP, vá na aba Indy SASL e coloque no form um componente TIdUserPassProvider e pelo menos um dos componentes de mecanismo de autenticação (os componentes com nome iniciado com TIdSASL); geralmente o componente TIdSASLLogin é suficiente.
  • Atribua o componente TIdUserPassProvider à propriedade UserPassProvider de cada componente de mecanismo de autenticação que você pos no form.
  • Selecione o componente TIdSMTP que está no form e, no Object Inspector, ative o editor da propriedade SASLMechanisms e inclua na lista direita do editor os mecanismos listados na lista esquerda; os mecanismos mostrados correspondem aos componentes TIdSASL que você pôs no form.
  • Procure permanecer conectado nos servidores POP3 e SMTP o mínimo de tempo possível. A maioria desses servidores irá desconectar você por inatividade ou por tempo.
  • Este exemplo não funciona com o GMail e outros servidores que usam SSL.

Atualizado em 15/11/2007 Indy 10 é uma versão que está em desenvolvimento. Este código funciona usando a versão snapshot (Indy10.zip disponível no site indy.fulgan.com) de 15/11/2007; a versão snapshot é atualizada todos os dias, de modo que não posso garantir que vá funcionar sempre. De qualquer forma, o exemplo foi atualizado e está funcionando novamente.