quarta-feira, 15 de fevereiro de 2012

Procedure para enviar email com programa padrão do SO.

Bom dia pessoal,
Tive um problema com o envio do outlookexpress e com o novo tambem na questão de anexos e decidi correr atrás mais pro lado do thunderbird, foi meio chato , mas consegui fazer funcionar, e pelo o que sei , a procedure abaixo funcionara com qualquer cliente de email, desde que ele esteja como padrão do sistema operacional.
Vocês vão precisar :
-Componentes Jedi.
-Unit JclMapi.

Passos:
1 - Criar uma aplicacação nova.
2 - Inserir um button na mesma.
3 - Declarar na secao uses a unit JclMapi.
4 - Declarar a função

procedure EnviarEmailPadrao(sListaEmail:TStringList;sListaAnexos:TStringList;sAssunto:string;sTextoEmail:string);
Acima da seção private.

5 - Implementar ela :

procedure TForm1.EnviarEmailPadrao(sListaEmail:TStringList;sListaAnexos:TStringList;sAssunto:string;sTextoEmail:string);
var TmpEmail: TjclEmail;
var i:integer;
begin
  TmpEmail := TjclEmail.Create;
  //Adicionando Emailas
  for I := 0 to sListaEmail.Count-1 do
    TmpEmail.Recipients.Add(sListaEmail[i]);
  //Adicionando Anexos
  for I := 0 to sListaAnexos.Count-1 do
    TmpEmail.Attachments.Add(sListaAnexos[i]);
  TmpEmail.Subject := sAssunto;
  TmpEmail.Body    := sTextoEmail;
  TmpEmail.Send(True);
end;

6 - O evento onClick do Button deverá ficar assim:


procedure TForm1.btn1Click(Sender: TObject);
var sListaEmail:TStringList;
var slistaAnexos:TStringList;
var sAssunto,sTextoEmail:string;
begin
  //Cria as 2 String List pois a procedure EnviaEmail varre as stringlist em busca de email's e anexos.
  sListaEmail := TStringList.Create();
  slistaAnexos := TStringList.Create();
  //Populando a lista de emails
  sListaEmail.Clear();
  sListaEmail.Add('gustavo@taltal.com.br');
  sListaEmail.Add('outro@taltal.com.br');
  //Populando a lista de anexos
  slistaAnexos.Clear();
  slistaAnexos.Add('C:\Temp\gustavo.txt');
  slistaAnexos.Add('C:\Temp\gustavo.sql');
  //Adicionando o Assunto a email
  sAssunto := 'Teste de Email';
  //Adicionando o Texto do email
  sTextoEmail := 'Programa para envio de email padrao para sistemas que tenham algum programa de email padrao instalado.';
  //Enviando o Email pela Procedure
  EnviarEmailPadrao(sListaEmail,slistaAnexos,sAssunto,sTextoEmail);

Pronto Galera!
O que ele faz?
Voce vai adicionar tantos seus destinatarios de emails, quanto seus anexos de email , em 2 stringList, adicionar o assunto e o texto do email e enviá-los para a procedure, o trabalho sujo, ela faz... hahaha!

Obs :
-Testei somente com o thunderbird, mas deverá funcionar com qualquer cliente que esteja como PADRÃO no SO.
- Compilado pelo Delphi Xe2.
- Cliente de Email padrão : Thunderbird v. 10.0.1, released: February 12th, 2012.

DOWNLOAD EXEMPLO AQUI