In previous section, I introduced how to download emails from Gmail account. In this section, I will introduce how to download emails from your Yahoo account in Delphi.
Sections:
Yahoo POP3 server address is pop.mail.yahoo.com
.
It requires SSL connection on 995 port;
Yahoo IMAP4 server address is imap.mail.yahoo.com
. It requires SSL connection on 993 port.
You should use your Yahoo email address as the user name for user authentication.
For example: your email is myid@yahoo.com
, and then the user name should be myid@yahoo.com
.
Server | Port | SSL | Protocol |
pop.mail.yahoo.com | 995 | SSL required | Pop3 |
imap.mail.yahoo.com | 993 | SSL required | Imap4 |
If you got authentication error, you need to enable Allowing less secure apps in your Yahoo account. Or you can generate an App Passwords and use this app password instead of the user password.
Although Yahoo supports OAUTH, but it doesn’t provide mail permission, so OAUTH is not a solution for Yahoo mail.
Note
Remarks: All of examples in this section are based on first section: A simple Delphi project. To compile and run the following example codes successfully, please click here to learn how to create the test project and add reference to your project.
The following example codes demonstrate how to download emails from Yahoo account using POP3 protocol.
Note
To get the full sample projects, please refer to Samples section.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, EAGetMailObjLib_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
MailServerPop3 = 0;
MailServerImap4 = 1;
MailServerEWS = 2;
MailServerDAV = 3;
MailServerMsGraph = 4;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
oServer: TMailServer;
oClient: TMailClient;
oTools: TTools;
oMail: IMail;
infos: IMailInfoCollection;
oInfo: IMailInfo;
localInbox, fileName: WideString;
i: Integer;
begin
try
// set current thread code page to system default code page.
SetThreadLocale(GetSystemDefaultLCID());
oTools := TTools.Create(Application);
// Create a folder named "inbox" under
// current directory to store the email files
localInbox := GetCurrentDir() + '\inbox';
oTools.CreateFolder(localInbox);
oServer := TMailServer.Create(Application);
// Yahoo POP3 server address
oServer.Server := 'pop.mail.yahoo.com';
oServer.User := 'yahooid@yahoo.com';
oServer.Password := 'testpassword';
oServer.Protocol := MailServerPop3;
// Enable SSL connection
oServer.SSLConnection := true;
// Set 995 SSL Port
oServer.Port := 995;
oClient := TMailClient.Create(Application);
oClient.LicenseCode := 'TryIt';
oClient.Connect1(oServer.DefaultInterface);
ShowMessage('Connected!');
infos := oClient.GetMailInfoList();
ShowMessage(Format('Total %d email(s)', [infos.Count]));
for i := 0 to infos.Count - 1 do
begin
oInfo := infos.Item[i];
ShowMessage(Format('Index: %d; Size: %d; UIDL: ' + oInfo.UIDL,
[oInfo.Index, oInfo.Size]));
// Generate a random file name by current local datetime,
// You can use your method to generate the filename if you do not like it
fileName := localInbox + '\' + oTools.GenFileName(i) + '.eml';
// Receive email from POP3 server
oMail := oClient.GetMail(oInfo);
ShowMessage('From: ' + oMail.From.Address + #13#10 +
'Subject: ' + oMail.Subject);
// Save email to local disk
oMail.SaveAs(fileName, true);
// Mark email as deleted from POP3 server
oClient.Delete(oInfo);
end;
// Quit and expunge emails marked as deleted from POP3 server
oClient.Quit;
except
on ep:Exception do
ShowMessage('Error: ' + ep.Message);
end;
end;
end.
The following example codes demonstrate how to download emails from Yahoo account using IMAP4 protocol.
Note
To get the full sample projects, please refer to Samples section.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, EAGetMailObjLib_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
MailServerPop3 = 0;
MailServerImap4 = 1;
MailServerEWS = 2;
MailServerDAV = 3;
MailServerMsGraph = 4;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
oServer: TMailServer;
oClient: TMailClient;
oTools: TTools;
oMail: IMail;
infos: IMailInfoCollection;
oInfo: IMailInfo;
localInbox, fileName: WideString;
i: Integer;
begin
try
// set current thread code page to system default code page.
SetThreadLocale(GetSystemDefaultLCID());
oTools := TTools.Create(Application);
// Create a folder named "inbox" under
// current directory to store the email files
localInbox := GetCurrentDir() + '\inbox';
oTools.CreateFolder(localInbox);
oServer := TMailServer.Create(Application);
// Yahoo IMAP server address
oServer.Server := 'imap.mail.yahoo.com';
oServer.User := 'yahooid@yahoo.com';
oServer.Password := 'testpassword';
oServer.Protocol := MailServerImap4;
// Enable SSL connection
oServer.SSLConnection := true;
// Set 993 SSL Port
oServer.Port := 993;
oClient := TMailClient.Create(Application);
oClient.LicenseCode := 'TryIt';
oClient.Connect1(oServer.DefaultInterface);
ShowMessage('Connected!');
infos := oClient.GetMailInfoList();
ShowMessage(Format('Total %d email(s)', [infos.Count]));
for i := 0 to infos.Count - 1 do
begin
oInfo := infos.Item[i];
ShowMessage(Format('Index: %d; Size: %d; UIDL: ' + oInfo.UIDL,
[oInfo.Index, oInfo.Size]));
// Generate a random file name by current local datetime,
// You can use your method to generate the filename if you do not like it
fileName := localInbox + '\' + oTools.GenFileName(i) + '.eml';
// Receive email from IMAP server
oMail := oClient.GetMail(oInfo);
ShowMessage('From: ' + oMail.From.Address + #13#10 +
'Subject: ' + oMail.Subject);
// Save email to local disk
oMail.SaveAs(fileName, true);
// Mark email as deleted from IMAP server
oClient.Delete(oInfo);
end;
// Quit and expunge emails marked as deleted from IMAP server
oClient.Quit;
except
on ep:Exception do
ShowMessage('Error: ' + ep.Message);
end;
end;
end.
Because IMAP/EWS/WebDAV support read mail flag, with this feature, we can also retrieve unread/new email only from Yahoo like this
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, EAGetMailObjLib_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
MailServerPop3 = 0;
MailServerImap4 = 1;
MailServerEWS = 2;
MailServerDAV = 3;
MailServerMsGraph = 4;
// GetMailInfosParam Flags
GetMailInfos_All = 1;
GetMailInfos_NewOnly = 2;
GetMailInfos_ReadOnly = 4;
GetMailInfos_SeqRange = 8;
GetMailInfos_UIDRange = 16;
GetMailInfos_PR_ENTRYID = 32;
GetMailInfos_DateRange = 64;
GetMailInfos_OrderByDateTime = 128;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
oServer: TMailServer;
oClient: TMailClient;
oTools: TTools;
oMail: IMail;
infos: IMailInfoCollection;
oInfo: IMailInfo;
localInbox, fileName: WideString;
i: Integer;
begin
try
// set current thread code page to system default code page.
SetThreadLocale(GetSystemDefaultLCID());
oTools := TTools.Create(Application);
// Create a folder named "inbox" under
// current directory to store the email files
localInbox := GetCurrentDir() + '\inbox';
oTools.CreateFolder(localInbox);
oServer := TMailServer.Create(Application);
// Yahoo IMAP server address
oServer.Server := 'imap.mail.yahoo.com';
oServer.User := 'yahooid@yahoo.com';
oServer.Password := 'testpassword';
oServer.Protocol := MailServerImap4;
// Enable SSL connection
oServer.SSLConnection := true;
// Set 993 SSL Port
oServer.Port := 993;
oClient := TMailClient.Create(Application);
oClient.LicenseCode := 'TryIt';
oClient.Connect1(oServer.DefaultInterface);
ShowMessage('Connected!');
// retrieve unread/new email only
oClient.GetMailInfosParam.Reset();
oClient.GetMailInfosParam.GetMailInfosOptions := GetMailInfos_NewOnly;
infos := oClient.GetMailInfoList();
ShowMessage(Format('Total %d unread email(s)', [infos.Count]));
for i := 0 to infos.Count - 1 do
begin
oInfo := infos.Item[i];
ShowMessage(Format('Index: %d; Size: %d; UIDL: ' + oInfo.UIDL,
[oInfo.Index, oInfo.Size]));
// Generate a random file name by current local datetime,
// You can use your method to generate the filename if you do not like it
fileName := localInbox + '\' + oTools.GenFileName(i) + '.eml';
// Receive email from IMAP server
oMail := oClient.GetMail(oInfo);
ShowMessage('From: ' + oMail.From.Address + #13#10 +
'Subject: ' + oMail.Subject);
// Save email to local disk
oMail.SaveAs(fileName, true);
// mark unread email as read, next time this email won't be retrieved again
if not oInfo.Read then
oClient.MarkAsRead(oInfo, true);
// if you don't want to leave a copy on server, please use
// oClient.Delete(oInfo);
// instead of MarkAsRead
end;
// Quit and expunge emails marked as deleted from IMAP server
oClient.Quit;
except
on ep:Exception do
ShowMessage('Error: ' + ep.Message);
end;
end;
end.
TLS is the successor of SSL, more and more Email servers require TLS 1.2 encryption now.
If your operating system is Windows XP/Vista/Windows 7/Windows 2003/2008/2008 R2/2012/2012 R2
,
and you got connection error with SSL/TLS connection,
you need to enable TLS 1.2 protocol in your operating system like this:
Enable TLS 1.2 on Windows XP/Vista/7/10/Windows 2008/2008 R2/2012
Next Section
At next section I will introduce how to download emails from Hotmail/MSN Live/Office 365 account.
Appendix
Comments
If you have any comments or questions about above example codes, please click here to add your comments.