hola
duda de como puedo obtener el mensaje de un mail.
el body,.
tengo este codigo para IMAP de GMAIL. ya configure mi cuenta de gmail para que soporte
acceso de aplicaciones externas y como puedo bajar los archivos adjuntos.
Gracias.
Código Delphi
[-]
unit GmailUnreadMailsU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdMessage, IdIOHandler, IdIOHandlerSocket,
IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
IdIMAP4;
type
TGmailUnreadMailsF = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
EditCorreo: TEdit;
EditPass: TEdit;
BtnConecta: TButton;
Memo1: TMemo;
BtnGetNumlMailsInbox: TButton;
IdIMAP41: TIdIMAP4;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
IdMessage1: TIdMessage;
BtnGetUnreadlMails: TButton;
Memo2: TMemo;
EditUUID: TEdit;
BtnGetData: TButton;
Label6: TLabel;
Memo3: TMemo;
Memo4: TMemo;
procedure log(linea:string);
procedure BtnConectaClick(Sender: TObject);
procedure BtnGetNumlMailsInboxClick(Sender: TObject);
procedure BtnGetUnreadlMailsClick(Sender: TObject);
private
public
end;
var
GmailUnreadMailsF: TGmailUnreadMailsF;
implementation
{$R *.dfm}
procedure TGmailUnreadMailsF.log(linea:string);
begin
Memo1.Lines.Add(linea);
end;
procedure TGmailUnreadMailsF.BtnConectaClick(Sender: TObject);
begin
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv3;
IdIMAP41.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
IdIMAP41.Host := 'imap.gmail.com';
IdIMAP41.Port := 993;
IdIMAP41.ReadTimeout := 30000;
IdIMAP41.UseTLS := utUseImplicitTLS;
IdIMAP41.Username := EditCorreo.Text;
IdIMAP41.Password := EditPass.Text;
IdIMAP41.Connect;
if IdIMAP41.Connected then
begin
Label3.Caption := 'Si Conectado';
end
else
begin
Label3.Caption := 'No Conectado';
end;
end;
procedure TGmailUnreadMailsF.BtnGetNumlMailsInboxClick(Sender: TObject);
var
iTotalMsgsInbox : Integer;
begin
if IdIMAP41.SelectMailBox('INBOX') then
iTotalMsgsInbox := IdIMAP41.MailBox.TotalMsgs;
IdIMAP41.StatusMailBox('INBOX', IdIMAP41.MailBox);
log('Total de mails en la carpeta de INBOX es : '+ IntToStr(iTotalMsgsInbox) );
end;
procedure TGmailUnreadMailsF.BtnGetUnreadlMailsClick(Sender: TObject);
var
nummsgs:Integer;
n : Integer;
i : Integer;
TheUID: string;
TheFlags: TIdMessageFlagsSet;
begin
log('Total de mails en la carpeta de IdIMAP41.MailBox.UnseenMsgs es : '+ IntToStr(IdIMAP41.MailBox.UnseenMsgs) );
log('Total de mails en la carpeta de IdIMAP41.MailBox.RecentMsgs es : '+ IntToStr(IdIMAP41.MailBox.RecentMsgs) );
nummsgs:=idImap41.MailBox.TotalMsgs;
for i := 0 to nummsgs-1 do
begin
idimap41.GetUID(i+1, TheUID);
idimap41.UIDRetrieveFlags(TheUID, TheFlags);
idimap41.UIDRetrieveHeader(TheUID, IdMessage1);
log(IntToStr( i+1) + ' '+ IntToStr(i+1));
log(IntToStr( i+1) +' ' + TheUID);
if mfSeen in TheFlags then begin
log(IntToStr(i+1 ) + ' ' + 'Yes' );
end else begin
log(IntToStr( i+1) + ' ' + 'No');
end;
log(IntToStr( i+1) + IdMessage1.Subject);
end;
idimap41.RetrieveHeader(1, IdMessage1);
Memo3.Lines.Add( IdMessage1.FromList.EMailAddresses);
Memo3.Lines.Add( IdMessage1.Recipients.EMailAddresses);
Memo3.Lines.Add( IdMessage1.Subject);
Memo3.Lines.Add( IdMessage1.CCList.EMailAddresses);
Memo4.Lines.Add( IdMessage1.Body.Text);
end;
end.