Ler/Receber e-mail com indy
ShowStatus('Connecting....');
if POP.Connected then
begin
POP.Disconnect;
end;
POP.Host := Pop3ServerName;
POP.Port := Pop3ServerPort;
POP.Username := Pop3ServerUser;
POP.Password := Pop3ServerPassword;
POP.Connect;
ToggleStatus(True);
FMsgCount := POP.CheckMessages;
FMailBoxSize := POP.RetrieveMailBoxSize div 1024;
ShowFileStatus;
if FMsgCount > 0 then
begin
ShowFileStatus;
RetrievePOPHeaders(FMsgCount);
end
else
begin
ShowStatus('No messages on server');
end;
Showbusy(false) erro: Connection Closed Gracefully.
Com isso não consigo receber meus e-mail por este demo da indy. Agradeço a todos que puderem ajudar.
Welder
Respostas
Leonardo Bertolini
05/09/2010
na aba Encaminhamento e POP/IMAP
e olha se as opções Baixar pelo POP e Acesso IMAP estão ativadas..
flw
Leonardo Bertolini
05/09/2010
https://www.devmedia.com.br/post-17880-Enviando-e-mail-utilizando-o-SMTP-do-GMAIL--Delphi-2010-Rad-Studio-Indy-10.html
Welder
05/09/2010
Leonardo Bertolini
05/09/2010
só tem um problema.... a propriedade lMsg.Body.Text do TIdMessage não está com o corpo da mensagem.
Segue o codigo:
Var
lMsg: TIdMessage;
i: Integer;
iMsgs: Integer;
begin
//Configurações
//TIdPOP3
with POP3 do begin
IOHandler := IO_OpenSSL;
AutoLogin := True;
Host := 'pop.gmail.com';
Username := 'sempredelphi@gmail.com';
UseTLS := utUseImplicitTLS;
Password := 'senha';
Port := 995;
end;
//TIdSSLIOHandlerSocketOpenSSL
with IO_OpenSSL do begin
Destination := 'pop.gmail.com:995';
Host := 'pop.gmail.com';
Port := 995;
SSLOptions.Method := sslvSSLv23;
SSLOptions.Mode := sslmClient;
end;
//Conectando
if not POP3.Connected then
POP3.Connect;
//testa a conexão
if not POP3.Connected then
Begin
ShowMessage('Conexão não realizada!');
Exit;
End;
//Pega a qtd de msg que há na caixa de entrada
iMsgs := POP3.CheckMessages;
//Cria DataSet para armazenar os e-mails
cdsMails.FieldDefs.Add('from',ftString,100);
cdsMails.FieldDefs.Add('subject',ftString,100);
cdsMails.FieldDefs.Add('body',ftMemo);
cdsMails.CreateDataSet;
lMsg := TIdMessage.Create;
//Recebe a mensagem
//todo - Aqui tenho que descobrir como pegar varias mensagens de uma só vez,
//ou fazer um loop para pegar uma a uma.
POP3.Retrieve(1, lMsg);
//Preenchendo o DataSet
for i := 1 to iMsgs do begin
cdsMails.Insert;
cdsMails.FieldByName('from').AsString := lMsg.From.Name;
cdsMails.FieldByName('subject').AsString := lMsg.Subject;
cdsMails.FieldByName('body').AsString := lMsg.Body.Text;
cdsMails.Post;
end;
lMsg.Free;
end;
Leonardo Bertolini
05/09/2010
To usando o Delphi 2010 .... Indy 10 e as dll's de SSL. http://indy.fulgan.com/SSL/
flw
Welder
05/09/2010
begin
POP3.Retrieve(i,lMsg);
TSTringList.Add(lMsg.From.Name);
TSTringList.Add(lMsg.Subject);
TSTringList.Add(lMsg.Body.Text);
end; Agora pra ficar melhor tenho que baixar somente as mensagems não lidas e já marcar como lidas ou excluir. Tem alguma Sugestão?
Leonardo Bertolini
05/09/2010
A propriedade lMsg.Body.Text no meu código não está pegando o conteudo do e-mail (esta vindo vazio).... no seu deu certinho ???
Quanto a pegar somente as não lidas... nao fiz maiores testes...tenho que dar uma olhada.... mas acredito que o método Retrieve tenha assinaturas com outros parametros... para fazer esse serviço...
flw
Welder
05/09/2010
Leonardo Bertolini
05/09/2010
em modo de debug o valor da propriedade text está vazio....
mas deve ser coisa boba...depois vou dar uma olhada ....
flw
Welder
05/09/2010
Leonardo Bertolini
05/09/2010
Eustáquio Fernandes
05/09/2010
AI mande o código ai pra eu tentar implementar aki,sou iniciante e nao entendi muito bem a forma que vcs explicaram
Welder
05/09/2010
Eustáquio Fernandes
05/09/2010
Welder
05/09/2010
Eustáquio Fernandes
05/09/2010
Leonardo Bertolini
05/09/2010
Eustáquio Fernandes
05/09/2010
Leonardo Bertolini
05/09/2010
Renan Gouvea
05/09/2010
Leonardo Bertolini
05/09/2010
Nela da pra separar ...os anexos... imagens etc..
mas não desenvolvi ese codigo ainda... se eu fizer eu posto...
flw
Welder
05/09/2010
Welder
05/09/2010
begin
POP3.Retrieve(i, lMsg);
for iMsgs := 1 to lMsg.MessageParts.Count - 1 do
begin
if lMsg.MessageParts.Items[iMsgs] is TIdText then
begin
sTexto := TIdText(lMsg.MessageParts.Items[iMsgs]).Body.Text;
end;
POP3.Delete(iMsgs);
end;
end; --Agora o Delete que não está funcionado. A mensagem não sai do servidor.
Welder
05/09/2010
Mas quando leio body.text ou body.savetofile a mensagem não fica exatamente como está no servidor o componente faz uma bagunça com o texto.
Leonardo Bertolini
05/09/2010
Welder
05/09/2010
Leonardo Bertolini
05/09/2010
o Delete recebe um inteiro (NumMsg)... vc ta jogando no delete(Integer)... a mesma variavel inteira que usou do Retrieve().. ??
Welder
05/09/2010
Leonardo Bertolini
05/09/2010
Leonardo Bertolini
05/09/2010
mas se vc entrar no gmail via browser... as mensagens sempre vao estar la...
Ou no seu gmail as mensagens foram excluidas ?
Welder
05/09/2010
lMsg: TIdMessage;
i: Integer;
iMsgs: Integer;
sEmail : TStringList;
sTexto : String;
begin
//Configurações
//TIdPOP3
with POP3 do begin
IOHandler := IO_OpenSSL;
AutoLogin := True;
Host := 'pop.clubedelphi.com.br';
Username := 'clubedelphi@clubedelphi.com.br';
UseTLS := utUseImplicitTLS;
Password := 'senha';
Port := 995;
end; //TIdSSLIOHandlerSocketOpenSSL
with IO_OpenSSL do begin
Destination := 'pop.clubedelphi.com.br:995';
Host := 'pop.clubedelphi.com.br';
Port := 995;
SSLOptions.Method := sslvSSLv23;
SSLOptions.Mode := sslmClient;
end; //Conectando
if not POP3.Connected then
POP3.Connect; //testa a conexão
if not POP3.Connected then
Begin
ShowMessage('Conexão não realizada!');
Exit;
End; //Pega a qtd de msg que há na caixa de entrada
iMsgs := POP3.CheckMessages; sEmail := TStringList.Create;
lMsg := TIdMessage.Create;
lMsg.Encoding := meMIME; //Recebe a mensagem
for i := 1 to iMsgs do
begin
POP3.Retrieve(i, lMsg); for iMsgs := 1 to lMsg.MessageParts.Count - 1 do
begin
if lMsg.MessageParts.Items[iMsgs] is TIdText then
begin
sTexto := TIdText(lMsg.MessageParts.Items[iMsgs]).Body.Text;
sTexto := StringReplace(sTexto,'<','<',[rfReplaceAll, rfIgnoreCase]);
sTexto := StringReplace(sTexto,'>','>',[rfReplaceAll, rfIgnoreCase]);
sTexto := StringReplace(sTexto,'<br>','',[rfReplaceAll, rfIgnoreCase]);
end;
sEmail.Add(sTexto);
POP3.Delete(iMsgs);
end;
end;
try
sEmail.SaveToFile('C:\email.xml');
finally
POP3.Disconnect;
lMsg.Free;
sEmail.Free;
ShowMessage('Arquivo gerado.');
end;
end;
Manja
05/09/2010
Felipe Arruda
05/09/2010