Jump to content
water

OutlookEX UDF: Example scripts

Recommended Posts

Strange. It seems the object model can be accessed.

Does the sent mails folder contain any items?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Another question: Do you connect to an Exchange server?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I soon will run out of ideas.

I noticed you use an older version of AutoIt (3.3.6.0). Is ist possible to upgrade to the latest version (3.3.8.1)?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I did the upgrade and that did the trick! I am sorry to put you through that. I am always hesitant to upgrade fearing that prior scripts will break. I guess this shows why it is better to stay current. Thank you for your patience and persistence.

Share this post


Link to post
Share on other sites

Glad the problem could be solved!


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

water,

You know what I am working on, refresh a contact folder...

I have a suggestion for a new function _OL_ItemDeleteAll()

The function is derived from _OL_ItemDelete() but I cannot use the function because technically speaking, it is not possible to know which items are in a contact folder. 

I cannot just refresh the existing Contacts, because some contacts may not be applicable anymore and they should be deleted from the Contact folder.  I have no way to retrieve them (I think)

So to refresh the contact folder, I decided to delete all items and import new up to date contacts via _OL_ItemImport()

The function is to use with caution of course, although, the items deleted are moved to the 'Deleted Items' folder.

Maybe, if you would consider the function interesting enough to be integrated in your UDF, an extra 'reconfirm' option would have its place before .delete ...

_OL_ItemDeleteAll():
; #FUNCTION# ====================================================================================================================
; Name ..........: _OL_ItemDeleteAll
; Description ...: Deletes all items in a folder (contact, appointment ...)
; Syntax.........: _OL_ItemDeleteAll(($oOL, $iItemType, $vFolder = "")
; Parameters ....: $oOL         - Outlook object returned by a preceding call to _OL_Open()
;                  $iItemType   - Type of item to delete. Is defined by the Outlook OlItemType enumeration
;                  $vFolder     - Optional: Folder object as returned by _OL_FolderAccess or full name of folder where the item will be deleted.
; Return values .: Success - Number of Items deleted
;                  Failure - Returns 0 and sets @error:
;                  |1 - Error accessing specified folder. See @extended for errorcode returned by _OL_FolderAccess
;                  |2 - All Items could not be deleted. Please see @extended for more information
; Author ........: GreenCan
; Modified ......:
; Remarks .......: To use with extreme caution...
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _OL_ItemDeleteAll($oOL, $iItemType, $vFolder = "")

    If Not IsObj($vFolder) Then
        Local $aFolderToAccess = _OL_FolderAccess($oOL, $vFolder, Default, $iItemType)
        If @error Then Return SetError(1, @error, 0)
        $vFolder = $aFolderToAccess[1]
    EndIf

    Local $iItemCount = $vFolder.Items.Count
    For $i = $iItemCount To 1 Step -1
        $vFolder.Items.Item($i).Delete
        If @error Then Return SetError(2, @error, 0)
    Next

    Return $iItemCount

EndFunc   ;==>_OL_ItemDeleteAll

example:

Global $iResult = _OL_ItemDeleteAll($oOutlook, $olContactItem, '*\Contacts\Test' )
If @error <> 0 Then Exit ConsoleWrite("OutlookEX UDF: _OL_ItemDeleteAll " & @CR & "Error deleting all contacts in folder '*\Contacts\Test'. @error = " & @error & ", @extended = " & @extended)
MsgBox(64, "OutlookEX UDF: _OL_ItemDeleteAll ", $iResult & " contact(s) successfully imported to folder '*\Contacts\Test'.", 5)

Contributions

CheckUpdate - SelfUpdating script ------- Self updating script

Dynamic input validation ------------------- Use a Input masks can make your life easier and Validation can be as simple

MsgBox with CountDown ------------------- MsgBox with visual countdown

Display Multiline text cells in ListView ---- Example of pop-up or ToolTip for multiline text items in ListView

Presentation Manager ---------------------- Program to display and refresh different Border-less GUI's on a Display (large screen TV)

USB Drive Tools ------------------------------ Tool to help you with your USB drive management

Input Period udf ------------------------------ GUI for a period input

Excel ColorPicker ---------------------------- Color pickup tool will allow you to select a color from the standard Excel color palette

Excel Chart UDF ----------------------------- Collaboration project with water 

GetDateInString ------------------------------ Find date/time in a string using a date format notation like DD Mon YYYY hh:mm

TaskListAllDetailed --------------------------- List All Scheduled Tasks

Computer Info --------------------------------- A collection of information for helpdesk

Shared memory Demo ----------------------- Demo: Two applications communicate with each other through means of a memory share (using Nomad function, 32bit only)

Universal Date Format Conversion -------- Universal date converter from your PC local date format to any format

Disable Windows DetailsPane -------------- Disable Windows Explorer Details Pane

Oracle SQL Report Generator -------------  Oracle Report generator using SQL

SQLite Report Generator -------------------  SQLite Report generator using SQL

SQLite ListView and BLOB demo ---------- Demo: shows how binary (image) objects can be recognized natively in a database BLOB field

DSN-Less Database connection demo --- Demo: ActiveX Data Objects DSN-Less Database access

Animated animals ----------------------------- Fun: Moving animated objects

Perforated image in GUI --------------------- Fun: Perforate your image with image objects

UEZ's Perforator major update ------------- Fun: Pro version of Perforator by UEZ

Visual Crop Tool (GUI) ----------------------- Easy to use Visual Image Crop tool

Visual Image effect (GUI) -------------------- Visually apply effects on an image

 

 

 

Share this post


Link to post
Share on other sites

GreenCan,

thanks for this function!

The following question came to my mind: "Wouldn't it be easier/faster to delete and recreate the folder?". Or has this approach any drawbacks?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I don't think so. I have been thinking about this but the folder is shared with several users. if I delete the folder, I will have to create a new one and share it again with all these users.  If I manually share the folder, the process generates an e-mail to the users having the benefit of the share. They then have to activate the shared Contact folder via a kind of 'activate' button. 

Anyhow, I am not sure if there is a function for this in OutlookEX (I don't have the udf on this laptop).

Delete/create/share/create items versus delete all items/create items looks equally tedious to me.

Maybe I have to think a bit longer and work out something that does not require to delete all the records, but my issue is as follows

Day 1 results in A, B, C and D

Day 2 results is A, B, D and E.

How do I know that I have to delete C?  Unless I keep an history of the previous transaction.


Contributions

CheckUpdate - SelfUpdating script ------- Self updating script

Dynamic input validation ------------------- Use a Input masks can make your life easier and Validation can be as simple

MsgBox with CountDown ------------------- MsgBox with visual countdown

Display Multiline text cells in ListView ---- Example of pop-up or ToolTip for multiline text items in ListView

Presentation Manager ---------------------- Program to display and refresh different Border-less GUI's on a Display (large screen TV)

USB Drive Tools ------------------------------ Tool to help you with your USB drive management

Input Period udf ------------------------------ GUI for a period input

Excel ColorPicker ---------------------------- Color pickup tool will allow you to select a color from the standard Excel color palette

Excel Chart UDF ----------------------------- Collaboration project with water 

GetDateInString ------------------------------ Find date/time in a string using a date format notation like DD Mon YYYY hh:mm

TaskListAllDetailed --------------------------- List All Scheduled Tasks

Computer Info --------------------------------- A collection of information for helpdesk

Shared memory Demo ----------------------- Demo: Two applications communicate with each other through means of a memory share (using Nomad function, 32bit only)

Universal Date Format Conversion -------- Universal date converter from your PC local date format to any format

Disable Windows DetailsPane -------------- Disable Windows Explorer Details Pane

Oracle SQL Report Generator -------------  Oracle Report generator using SQL

SQLite Report Generator -------------------  SQLite Report generator using SQL

SQLite ListView and BLOB demo ---------- Demo: shows how binary (image) objects can be recognized natively in a database BLOB field

DSN-Less Database connection demo --- Demo: ActiveX Data Objects DSN-Less Database access

Animated animals ----------------------------- Fun: Moving animated objects

Perforated image in GUI --------------------- Fun: Perforate your image with image objects

UEZ's Perforator major update ------------- Fun: Pro version of Perforator by UEZ

Visual Crop Tool (GUI) ----------------------- Easy to use Visual Image Crop tool

Visual Image effect (GUI) -------------------- Visually apply effects on an image

 

 

 

Share this post


Link to post
Share on other sites

I see what you mean. So deleting the folder is not an option.

I just had a look at function _OL_FolderDelete.

The following $iFlags should do what you want:

$iFlags  - Optional: Specifies what should be deleted. Can be a combination of the following:
;                  |0: Deletes the folder, all subfolders and all contained items (default)
;                  |1: Deletes all items (but no folders) in the specified folder
;                  |2: Recursively deletes all items (but no folders) in the specified folder and all subfolders
;                  |4: Deletes all subfolders and their items in the specified folder (but not the items in the specified folder)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I should have looked better for '.delete' before I wrote the _OL_ItemDeleteAll function :)


Contributions

CheckUpdate - SelfUpdating script ------- Self updating script

Dynamic input validation ------------------- Use a Input masks can make your life easier and Validation can be as simple

MsgBox with CountDown ------------------- MsgBox with visual countdown

Display Multiline text cells in ListView ---- Example of pop-up or ToolTip for multiline text items in ListView

Presentation Manager ---------------------- Program to display and refresh different Border-less GUI's on a Display (large screen TV)

USB Drive Tools ------------------------------ Tool to help you with your USB drive management

Input Period udf ------------------------------ GUI for a period input

Excel ColorPicker ---------------------------- Color pickup tool will allow you to select a color from the standard Excel color palette

Excel Chart UDF ----------------------------- Collaboration project with water 

GetDateInString ------------------------------ Find date/time in a string using a date format notation like DD Mon YYYY hh:mm

TaskListAllDetailed --------------------------- List All Scheduled Tasks

Computer Info --------------------------------- A collection of information for helpdesk

Shared memory Demo ----------------------- Demo: Two applications communicate with each other through means of a memory share (using Nomad function, 32bit only)

Universal Date Format Conversion -------- Universal date converter from your PC local date format to any format

Disable Windows DetailsPane -------------- Disable Windows Explorer Details Pane

Oracle SQL Report Generator -------------  Oracle Report generator using SQL

SQLite Report Generator -------------------  SQLite Report generator using SQL

SQLite ListView and BLOB demo ---------- Demo: shows how binary (image) objects can be recognized natively in a database BLOB field

DSN-Less Database connection demo --- Demo: ActiveX Data Objects DSN-Less Database access

Animated animals ----------------------------- Fun: Moving animated objects

Perforated image in GUI --------------------- Fun: Perforate your image with image objects

UEZ's Perforator major update ------------- Fun: Pro version of Perforator by UEZ

Visual Crop Tool (GUI) ----------------------- Easy to use Visual Image Crop tool

Visual Image effect (GUI) -------------------- Visually apply effects on an image

 

 

 

Share this post


Link to post
Share on other sites

Hi water,

I see what you mean. So deleting the folder is not an option.

 

Just to let you know that I finally resolved the 'global deletion/import' issue in a different way. 

I don't delete all items and re-import them anymore. I didn't like the destructive approach so I do it now in 2 steps

Pass 1. check if Outlook contact exists in the ERP database, if not Delete from Outlook

Pass 2. a. Check if ERP contact exists in Outlook, if not Create in Outlook
             b. Else, if content differs, update Outlook

This approach solves any difference between Left side and right side ;)

The script is a bit more complex than version 1 of my script (using _OL_ItemFind, _OL_ItemDelete, _OL_ItemCreate, _OL_ItemModify and some SQL) but it dramatically decreases the number of changes in Outlook contacts. Most of the time, there is no difference or only a few items at most, thus no changes or little are made in the contact folder. As a consequence, the script runs faster.

Thanks for creating this fantastic UDF. I could never have done it without it.  You make my life so easy... :)

And of course Wooltown as the initiator of the UDF although it looks that he is not active anymore on this forum...

Grtz, Greencan


Contributions

CheckUpdate - SelfUpdating script ------- Self updating script

Dynamic input validation ------------------- Use a Input masks can make your life easier and Validation can be as simple

MsgBox with CountDown ------------------- MsgBox with visual countdown

Display Multiline text cells in ListView ---- Example of pop-up or ToolTip for multiline text items in ListView

Presentation Manager ---------------------- Program to display and refresh different Border-less GUI's on a Display (large screen TV)

USB Drive Tools ------------------------------ Tool to help you with your USB drive management

Input Period udf ------------------------------ GUI for a period input

Excel ColorPicker ---------------------------- Color pickup tool will allow you to select a color from the standard Excel color palette

Excel Chart UDF ----------------------------- Collaboration project with water 

GetDateInString ------------------------------ Find date/time in a string using a date format notation like DD Mon YYYY hh:mm

TaskListAllDetailed --------------------------- List All Scheduled Tasks

Computer Info --------------------------------- A collection of information for helpdesk

Shared memory Demo ----------------------- Demo: Two applications communicate with each other through means of a memory share (using Nomad function, 32bit only)

Universal Date Format Conversion -------- Universal date converter from your PC local date format to any format

Disable Windows DetailsPane -------------- Disable Windows Explorer Details Pane

Oracle SQL Report Generator -------------  Oracle Report generator using SQL

SQLite Report Generator -------------------  SQLite Report generator using SQL

SQLite ListView and BLOB demo ---------- Demo: shows how binary (image) objects can be recognized natively in a database BLOB field

DSN-Less Database connection demo --- Demo: ActiveX Data Objects DSN-Less Database access

Animated animals ----------------------------- Fun: Moving animated objects

Perforated image in GUI --------------------- Fun: Perforate your image with image objects

UEZ's Perforator major update ------------- Fun: Pro version of Perforator by UEZ

Visual Crop Tool (GUI) ----------------------- Easy to use Visual Image Crop tool

Visual Image effect (GUI) -------------------- Visually apply effects on an image

 

 

 

Share this post


Link to post
Share on other sites

GreenCan,

thanks for this positive feedback!

Glad to hear that AutoIt can provide solutions in a company environment and helps to save a few bucks ;)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Version 0.10.0.0 of the UDF has been released.

Please test before using in production!

For download please see my signature.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Hi

I want to reschedule one instance of daily repeating meeting.

for example, there are 5 days daily repeating meeting, starts on Monday, I will reschedule the instance on Thursday.

But it seems that _OL_ItemRecurrenceSet can't reschedule one instance.

I want to use _OL_ItemFind to get the instance on Thursday, but always get error, can't find the instance.

Could you please help me this? do you have idear?

Thank you.

Share this post


Link to post
Share on other sites

Please have a look at function

_OL_ItemRecurrenceExceptionSet: Defines an exception in the recurrence information of an item (appointment or task).


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I have a script that I have spoken about and received help on here before.  It sits in the background waiting for an email to be sent and then provides the user the option to archive the email in a number of ways.  Having the script constantly running in the background is causing some issues on some computers.  Not completely sure why.  However, a solution would seem to be to have an outlook macro that starts the compiled script only when an item is sent.  The macro would look like this:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
      Shell ("C:SaveSentEmails.exe")
End Sub
 
The difficulty I am having is figuring out the best way to pass the EntryID of the sent item from the macro to the script.  Is there a simple way to do this?  Or do I have to search the entire sent folder and parse the results for the most recent email?
 
Any ideas would be greatly appreciated. 

Share this post


Link to post
Share on other sites

Don't know how to pass parameters with Shell but I think it should be possible to pass the EntryID as "Item.EntryID"


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2019-10-24 - Version 1.4.14.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2019-07-24 - Version 1.3.6.0) - Download - General Help & Support - Example Scripts - Wiki
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (NEW 2019-11-07 - Version 1.3.0.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I should have thought of that.  I can pass it to the script as a command line parameter. This is from the outlook macro and runs the Test3 script when an email is sent:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Shell ("C:TMRTest3.exe " & Item.EntryID)
End Sub
 
The parameter is accessible to the script in the $CmdLine array.  $CmdLine[1] holds the first command line item, or the EntryID.  With that information, actions can be taken on the item in the script.
 
thanks for pointing me in the right direction.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...