diff --git a/EmailOAuthDm.dfm b/EmailOAuthDm.dfm
index 31721ce..d07de89 100644
--- a/EmailOAuthDm.dfm
+++ b/EmailOAuthDm.dfm
@@ -1,5 +1,4 @@
object EmailOAuthDataModule: TEmailOAuthDataModule
- OldCreateOrder = True
OnCreate = DataModuleCreate
OnDestroy = DataModuleDestroy
Height = 3000
diff --git a/EmailOAuthDm.pas b/EmailOAuthDm.pas
index 652396c..c2b8736 100644
--- a/EmailOAuthDm.pas
+++ b/EmailOAuthDm.pas
@@ -22,6 +22,7 @@ interface
, IdSASLCollection
, IdMessage
, IdMessageClient
+ , IdAttachmentFile
, IdPOP3
, IdBaseComponent
, IdComponent
@@ -35,6 +36,7 @@ interface
, IdSASL.OAuth.Base
, Email.Demo.Types
, windows
+
;
type
@@ -73,7 +75,7 @@ TEmailOAuthDataModule = class(TDataModule)
procedure Authenticate;
procedure ClearAuthentication;
procedure SetupAuthenticator;
- procedure SendMessage(const destAddress: string; const Path: String);
+ procedure SendMessage(const Subject : string ; const Body : string ; const destAddress: string; const Path: String; const attachmentFiles: array of string);
procedure CheckIMAP;
procedure CheckPOP;
end;
@@ -199,10 +201,11 @@ procedure TEmailOAuthDataModule.ClearAuthentication;
SetupAuthenticator;
end;
-procedure TEmailOAuthDataModule.SendMessage(const destAddress: string; const Path: String);
+procedure TEmailOAuthDataModule.SendMessage(const Subject : string ; const Body : string ; const destAddress: string; const Path: String; const attachmentFiles: array of string);
var
IdMessage: TIdMessage;
xoauthSASL : TIdSASLListEntry;
+ i: Integer;
begin
// if we only have refresh_token or access token has expired
// request new access_token to use with request
@@ -242,8 +245,14 @@ procedure TEmailOAuthDataModule.SendMessage(const destAddress: string; const Pat
IdMessage.From.Name := Provider.ClientName;
IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
IdMessage.Recipients.Add.Text := destAddress;
- IdMessage.Subject := 'Hello World';
- IdMessage.Body.Text := 'Hello Body';
+ IdMessage.Subject := Subject;
+ IdMessage.Body.Text := Body;
+ for i := Low(attachmentFiles) to High(attachmentFiles) do
+ begin
+ if FileExists(attachmentFiles[i]) then
+ TIdAttachmentFile.Create(IdMessage.MessageParts, attachmentFiles[i])
+ end;
+
IdSMTP1.Send(IdMessage);
IdSMTP1.Disconnect;
diff --git a/GMailAuthDemo.dpr b/GMailAuthDemo.dpr
index 894047f..a7f177d 100644
--- a/GMailAuthDemo.dpr
+++ b/GMailAuthDemo.dpr
@@ -3,13 +3,13 @@ program GMailAuthDemo;
uses
Vcl.Forms,
Unit2 in 'Unit2.pas' {Form2},
- Globals in 'Globals.pas', // rename from globals.sample.pas and update contents if missing
IdSASL.OAuth.XOAUTH2 in 'IdSASL.OAuth.XOAUTH2.pas',
EmailOAuthDm in 'EmailOAuthDm.pas' {EmailOAuthDataModule: TDataModule},
IdSASL.OAuth.OAuth2Bearer in 'IdSASL.OAuth.OAuth2Bearer.pas',
REST.Authenticator.EnhancedOAuth in 'REST.Authenticator.EnhancedOAuth.pas',
Email.Demo.Types in 'Email.Demo.Types.pas',
- IdSASL.OAuth.Base in 'IdSASL.OAuth.Base.pas';
+ IdSASL.OAuth.Base in 'IdSASL.OAuth.Base.pas',
+ Globals.Sample in 'Globals.Sample.pas';
{$R *.res}
diff --git a/GMailAuthDemo.dproj b/GMailAuthDemo.dproj
index 708cf4e..72d8168 100644
--- a/GMailAuthDemo.dproj
+++ b/GMailAuthDemo.dproj
@@ -89,7 +89,6 @@
dfm
-
@@ -100,6 +99,7 @@
+
Base
@@ -123,6 +123,12 @@
+
+
+ .\
+ true
+
+
GMailAuthDemo.exe
@@ -130,60 +136,827 @@
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
0
+
+
+ classes
+ 64
+
+
+ classes
+ 64
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
0
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
0
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.dll;.bpl
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.bpl
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
0
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
Assets
1
+
+ Assets
+ 1
+
Assets
1
+
+ Assets
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+
+
+
+
+
+
+
True
diff --git a/Globals.Sample.pas b/Globals.Sample.pas
index ff29587..9e7d800 100644
--- a/Globals.Sample.pas
+++ b/Globals.Sample.pas
@@ -1,21 +1,33 @@
-unit Globals;
+unit Globals.sample;
interface
// Please update all these constants to yours and rename this file to globals.pas
-const google_clientid = 'XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com';
-const google_clientsecret = 'XXXXXXXXXXXXXXXXXXXXXXX';
-const google_clientaccount = 'xxxxxxx@gmail.com';
+const clientsendtoaddress = 'youremail@example.com';
+const clientname = 'your account name';
+//gmail
+const google_clientid = 'xxxx-xxxx.apps.googleusercontent.com' ;
+const google_clientsecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
+const google_clientaccount = 'youremail@example.com';
-const microsoft_clientid = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
-const microsoft_clientsecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
+//configure project
+// website : https://developers.google.com/identity/oauth2/web/guides/get-google-api-clientid?hl=pt-br
+
+///microsoft
+const microsoft_clientid = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
+const microsoft_clientsecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const microsoft_clientaccount = 'xxxxxxxxx@hotmail.com';
-const clientsendtoaddress = 'youremail@example.com';
-const clientname = 'John Smith';
+const microsoftoffice_clientaccount = '@live.com';//@live.com or @hotmail.com email address
+
+//yahoo
+const yahoo_clientid = 'yahoo_clientid';
+const yahoo_clintsecret = 'clientsecret';
+const yahoo_clientAccount = 'yahoo_clientAccount';
+
implementation
end.
diff --git a/Unit2.dfm b/Unit2.dfm
index c39918b..0f95a51 100644
--- a/Unit2.dfm
+++ b/Unit2.dfm
@@ -2,54 +2,40 @@ object Form2: TForm2
Left = 0
Top = 0
Caption = 'Test OAUTH2 Gmail Send Message'
- ClientHeight = 943
- ClientWidth = 1485
+ ClientHeight = 300
+ ClientWidth = 594
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
- Font.Height = -28
+ Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
- OldCreateOrder = True
OnCreate = FormCreate
OnDestroy = FormDestroy
- PixelsPerInch = 240
- TextHeight = 34
+ TextHeight = 13
object btnAuthenticate: TButton
- Left = 1059
- Top = 19
- Width = 265
- Height = 63
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
+ Left = 424
+ Top = 8
+ Width = 106
+ Height = 25
Caption = 'Authenticate'
TabOrder = 0
OnClick = btnAuthenticateClick
end
object btnSendMsg: TButton
- Left = 1058
- Top = 238
- Width = 187
- Height = 62
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
+ Left = 423
+ Top = 95
+ Width = 75
+ Height = 25
Caption = 'Send MSG'
TabOrder = 1
OnClick = btnSendMsgClick
end
object rgEmailProviders: TRadioGroup
- Left = 20
- Top = 20
- Width = 1023
- Height = 145
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
+ Left = 8
+ Top = 8
+ Width = 409
+ Height = 58
Caption = 'Provider'
Columns = 3
ItemIndex = 0
@@ -61,53 +47,37 @@ object Form2: TForm2
OnClick = rgEmailProvidersClick
end
object btnCheckMsg: TButton
- Left = 1058
- Top = 340
- Width = 187
- Height = 63
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
+ Left = 423
+ Top = 136
+ Width = 75
+ Height = 25
Caption = 'Check MSG'#39's'
TabOrder = 3
OnClick = btnCheckMsgClick
end
object btnClearAuthToken: TButton
- Left = 1058
- Top = 98
- Width = 265
- Height = 62
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
+ Left = 423
+ Top = 39
+ Width = 106
+ Height = 25
Caption = 'Clear Auth Token'
TabOrder = 4
OnClick = btnClearAuthTokenClick
end
object btnCheckIMAP: TButton
- Left = 1060
- Top = 420
- Width = 188
- Height = 63
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
+ Left = 424
+ Top = 168
+ Width = 75
+ Height = 25
Caption = 'Check IMAP'
TabOrder = 5
OnClick = btnCheckIMAPClick
end
object Memo1: TMemo
- Left = 20
- Top = 180
- Width = 1023
- Height = 455
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
+ Left = 8
+ Top = 72
+ Width = 409
+ Height = 182
Lines.Strings = (
'Memo1')
TabOrder = 6
diff --git a/Unit2.pas b/Unit2.pas
index d56ff99..a558132 100644
--- a/Unit2.pas
+++ b/Unit2.pas
@@ -21,7 +21,7 @@ interface
, IdSASL.Oauth.OAuth2Bearer
, IdSASL.Oauth.XOAUTH2
, Email.Demo.Types
- , Globals // rename from globals.sample.pas and update contents if missing
+ , Globals.sample // rename from globals.sample.pas and update contents if missing
;
type
@@ -125,7 +125,7 @@ implementation
LogoutEndpoint : '';
ClientID : yahoo_clientid;
ClientSecret : yahoo_clintsecret;
- ClientAccount : 'geoff_smith82@yahoo.com'; // your @live.com or @hotmail.com email address
+ ClientAccount : yahoo_clientAccount ;// your @live.com or @hotmail.com email address
// Scopes : 'https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/POP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access';
ClientName : clientname;
Scopes : 'email mail-r mail-w';
@@ -187,8 +187,16 @@ procedure TForm2.btnClearAuthTokenClick(Sender: TObject);
end;
procedure TForm2.btnSendMsgClick(Sender: TObject);
+var
+filesToAttach: array of string;
begin
- EmailOAuthDataModule.SendMessage(clientsendtoaddress, '');
+ SetLength(filesToAttach, 2); // Sets the size of the array
+ filesToAttach[0] := 'C:\Temp\text.pdf';
+ filesToAttach[1] := 'C:\Temp\text.txt';
+
+ EmailOAuthDataModule.SendMessage('Subjet text' , 'message text', clientsendtoaddress, '', filesToAttach);
+
+ // EmailOAuthDataModule.SendMessage(clientsendtoaddress, '');
end;
procedure TForm2.LogMsg(const msg: string);