• Outlook User
  • New Outlook app
  • Outlook.com
  • Outlook Mac
  • Outlook & iCloud
  • Developer
  • Microsoft 365 Admin
    • Common Problems
    • Microsoft 365
    • Outlook BCM
    • Utilities & Addins

Create Appointment From Email Automatically

Slipstick Systems

› Developer › Code Samples › Create Appointment From Email Automatically

Last reviewed on March 18, 2016     34 Comments

Applies to: Outlook (classic), Outlook 2007, Outlook 2010

A security update disabled the Run a script option in the rules wizard in Outlook 2010 and all newer Outlook versions. See Run-a-Script Rules Missing in Outlook for more information and the registry key to fix restore it.

The macros on this page tweak the code from "Create an Outlook Appointment from a Message" to watch the Inbox for specially-crafted messages and create the appointment from the information contained in the message.

The first macro creates an appointment using the data in the message subject. It looks at the subject for a keyword (I'm using "new appointment" but any unique keyword will work) and if a metch is found, creates an appointment using the contents of the subject line, which is formatted like this:

keyword, appointment subject, location, date & time, duration in minutes

Any valid date format should work. I tested it with these two date and time formats:
1/1/2016 3:30 PM and 1/1/16 3 P

To leave the location field blank, use two commas:
new appointment, this is a test,,3/20/16 4 P, 30

create appointment from email

If you want to "watch a different folder", change this line:
Set olInbox = NS.GetDefaultFolder(olFolderInbox).Items

To send the appointment as a meeting uncomment the meeting status, required attendee, and send lines.

Dim WithEvents olInbox As Items

Private Sub Application_Startup()
   Dim NS As Outlook.NameSpace
   Set NS = Application.GetNamespace("MAPI")
   Set olInbox = NS.GetDefaultFolder(olFolderInbox).Items
 Set NS = Nothing
End Sub
    
Private Sub olInbox_ItemAdd(ByVal Item As Object)

' subject is arranged like this:
' new appointment, appointment subject, location, start date & time 1/1/2016 4 PM, duration in minutes
' do not use commas except as separators

If InStr(1, LCase(Item.Subject), "new appointment") Then
Dim objAppt As Outlook.AppointmentItem
Dim apptArray() As String

'split the subject at the comma
apptArray() = Split(Item.Subject, ",")

Set objAppt = Application.CreateItem(olAppointmentItem)

With objAppt
  '  .MeetingStatus = olMeeting
  '  .RequiredAttendees = Item.SenderEmailAddress
    .Subject = apptArray(1)
    .Location = apptArray(2)
    .Start = apptArray(3)
    .Duration = apptArray(4)
    .Body = Item.Body
    .Save
   ' .Send
End With
  
    Set objAppt = Nothing
End If
 End Sub

Use Appointment Data in the Message Body

This code uses appointment data in the message body to create the appointment.
create appointment from email

Dim WithEvents olInbox As Items

Private Sub Application_Startup()
   Dim NS As Outlook.NameSpace
   Set NS = Application.GetNamespace("MAPI")
   Set olInbox = NS.GetDefaultFolder(olFolderInbox).Items
 Set NS = Nothing
End Sub
    
Private Sub olInbox_ItemAdd(ByVal Item As Object)

If InStr(1, LCase(Item.Subject), "new appointment") Then
    Dim objAppt As Outlook.AppointmentItem
    Dim Reg1 As Object
    Dim M1 As Object
    Dim M As Object
    Dim strSubject As String
    Dim strLocation As String
    Dim sDate
         
    Set Reg1 = CreateObject("VBScript.RegExp")
    
With Reg1
For i = 1 To 3

    Select Case i
    Case 1
        .pattern = "(Subject[:](.*))\r"
        .Global = False
    Case 2
       .pattern = "(Date[:](.*))\r"
       .Global = False
    Case 3
        .pattern = "(Location[:](.*))\r"
        .Global = False

    End Select
    
    If Reg1.test(Item.Body) Then
     On Error Resume Next
        Set M1 = Reg1.Execute(Item.Body)
        For Each M In M1
            Debug.Print M.SubMatches(1)
    
If i = 1 Then strSubject = Trim(M.SubMatches(1))
If i = 2 Then sDate = Trim(M.SubMatches(1))
If i = 3 Then strLocation = Trim(M.SubMatches(1))

         Next
    End If
                    
Next i
End With

Set objAppt = Application.CreateItem(olAppointmentItem)

With objAppt
    '.MeetingStatus = olMeeting
    '.RequiredAttendees = Item.SenderEmailAddress
    .Subject = strSubject
    .Location = strLocation
    .Start = sDate
    .Duration = 60
    .Save
    '.Send
End With
  
Set Reg1 = Nothing
  
    Set objAppt = Nothing
  End If
 End Sub

Use in a Run a Script Rule

The macros above are ItemAdd macros, meaning the macro watches the Inbox (or another folder) and checks each message that is added to the folder. Changing these macros to work in a run a script rule simple: remove the application_startup macro, change the name from Private Sub olInbox_ItemAdd(ByVal Item As Object) to
Public Sub WatchForAppt(Item As MailItem)
then create a rule using the script.

To learn more about Run a Script rules, see "Outlook's Rules and Alerts: Run a Script".

Because we're using a rule, we can check for words in the subject in the rule and don't need to check it using the script (but can, if desired.)

Public Sub WatchForAppt(Item As MailItem)
' subject is arranged like this:
' new appointment, subject, location, start date & time, duration
Dim objAppt As Outlook.AppointmentItem
Dim apptArray() As String

'split the subject at the comma
apptArray() = Split(Item.Subject, ",")
Set objAppt = Application.CreateItem(olAppointmentItem)

With objAppt
  '  .MeetingStatus = olMeeting
  '  .RequiredAttendees = Item.SenderEmailAddress
    .Subject = apptArray(1)
    .Location = apptArray(2)
    .Start = apptArray(3)
    .Duration = apptArray(4)
    .Body = Item.Body
    .Save
   ' .Send
End With
    Set objAppt = Nothing
End Sub

How to use the macros

First: You will need macro security set to low during testing.

To check your macro security in Outlook 2010 or 2013, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In Outlook 2007 and older, it’s at Tools, Macro Security. If Outlook tells you it needs to be restarted, close and reopen Outlook. Note: after you test the macro and see that it works, you can either leave macro security set to low or sign the macro.

Now open the VBA Editor by pressing Alt+F11 on your keyboard.

To use the macro code in ThisOutlookSession:

  1. Expand Project1 and double click on ThisOutlookSession.
  2. Copy then paste the macro into ThisOutlookSession. (Click within the code, Select All using Ctrl+A, Ctrl+C to copy, Ctrl+V to paste.)

Application_Startup macros run when Outlook starts. If you are using an Application_Startup macro you can test the macro without restarting Outlook by clicking in the first line of the Application_Startup macro then clicking the Run button on the toolbar or pressing F8.

More information as well as screenshots are at How to use the VBA Editor.

Create Appointment From Email Automatically was last modified: March 18th, 2016 by Diane Poremsky
Post Views: 20

Related Posts:

  • Create an Outlook Appointment from a Message
  • Create Outlook appointments using multiple recurring patterns
  • Create a Series of Tasks Leading up to an Appointment
  • Send an Email When You Add an Appointment to Your Calendar

About Diane Poremsky

A Microsoft Outlook Most Valuable Professional (MVP) since 1999, Diane is the author of several books, including Outlook 2013 Absolute Beginners Book. She also created video training CDs and online training classes for Microsoft Outlook. You can find her helping people online in Outlook Forums as well as in the Microsoft Answers and TechNet forums.

Comments

  1. Taijha says

    February 20, 2018 at 3:19 pm

    Trying to do the "Use Appointment Data in the Message Body" option but when I select "a script" it is not listed as an option. Help!

    Reply
    • Diane Poremsky says

      February 20, 2018 at 4:08 pm

      The run a script option is missing in the rules wizard or the script isn't visible? The first two macros are automatic macros - you don't use them with a script. The 3rd one Public Sub WatchForAppt(Item As MailItem) works with rules.

      no run a script option: https://www.slipstick.com/outlook/rules/outlook-2016-run-a-script-rules/

      Reply
  2. Jennifer says

    August 18, 2017 at 8:12 am

    Thanks Diane this has been super helpful for me. Could you tell me how to search for multiple keywords in the Subject line? I work on several different projects and the subject line will always contain the project number "1234" or "5678" etc. Thanks in advance.

    Reply
    • Diane Poremsky says

      December 31, 2017 at 10:58 pm

      Sorry I missed this earlier. :( For two, you can use
      If InStr(1, LCase(Item.Subject), "new appointment") OR InStr(1, LCase(Item.Subject), "other word") Then

      if you need more words, use an array.
      Dim StrSubject As String
      Dim arrSubject As Variant

      ' Set up the array
      arrSubject = Array("key1", "key2", "key3", "key4", "key5", "key6", "key7", "key8", "key9")

      ' Go through the array and look for a match, then do something
      For i = LBound(arrSubject) To UBound(arrSubject)
      If InStr(LCase(Item.Subject), arrSubject(i)) Then
      ' do whatever
      Next i

      More info on arrays is at https://www.slipstick.com/developer/using-arrays-outlook-macros/

      Reply
  3. Chris says

    August 14, 2017 at 2:36 am

    Hi Diane,
    Thanks for the thread with the useful information.
    I was just wondering if it were possible to modify the script to have an apptArray optional.
    When i run the script and send and email with one piece of apptArray missing, a debug notification appears.
    I have the following script but would only like an ".End = apptArray(3)" as optional if entered in the subject field.

    With objAppt
    ' .MeetingStatus = olMeeting
    ' .RequiredAttendees = Item.SenderEmailAddress
    .Subject = apptArray(1)
    .Start = apptArray(2)
    .End = apptArray(3)
    .AllDayEvent = True
    .body = Item.body
    .Save
    ' .Send
    End With

    Any advice is greatly appreciated

    Reply
    • Diane Poremsky says

      August 15, 2017 at 11:59 pm

      1. Add on error resume next - it may skip those lines when they error.
      2. use an if statement - something like
      if UBound(apptArray) > 2 then
      .End = apptArray(3)
      end if

      Reply
      • Chris says

        August 16, 2017 at 12:45 am

        Thank you so much Diane.
        The If Statement worked perfectly.

  4. Mike says

    August 8, 2017 at 10:12 pm

    Hello Diane,
    Is it possible to do this for mail-enabled public folders?
    We have a shared team calendar and would like to be able to add entries to the calendar via email. Is it possible to run this script on the Exchange server or as a server-side rule so Outlook would not need to be running?

    Thanks,
    Mike

    Reply
    • Diane Poremsky says

      August 16, 2017 at 12:07 am

      You can't run it server side - it only runs if outlook is open. You can run it on a public folder though - as an itemadd macro.

      Reply
  5. David says

    August 1, 2017 at 2:13 pm

    Hi Diane,

    So I posted recently on another thread about opening URLs in email. So on that I got everything working great then I added a 3 click process through the link web browser. All very nice. So after that process is finished I get a confirmation email that confirms that process and contains client info... Only the body of the email contains client information,(adddress, phone , time , date, etc). So I have tried to create a rule, that automatically, sets category, priority, and moves it to a (active work orders) folder, and then a copy to the calendar. But the calendar does NOT automatically post a appointment. So my question is. Does script 2 in this post work for my needs. Its NOT a a appointment invitation that I'm receiving, but just a email that contains that info in the message body. Advice?

    Reply
    • Diane Poremsky says

      August 2, 2017 at 1:00 am

      The second one should work for you - either leave these two lines commented out or delete them to create appointments:
      '.MeetingStatus = olMeeting
      '.RequiredAttendees = Item.SenderEmailAddress

      You'll need to change this line to watch the active work orders folder - this assumes a subfolder of inbox -
      Set olInbox = NS.GetDefaultFolder(olFolderInbox).folders("active work orders").Items
      more info here -https://www.slipstick.com/developer/working-vba-nondefault-outlook-folders/

      you could watch the inbox, create the appointment, move the message and set the flags etc from this macro instead of using a rule. Or use the rule to call a Script that does everything (all actions need to be in the script). You have lots of options!

      Reply
      • David says

        August 9, 2017 at 12:39 pm

        so I am already running the open url Macro out of project1.vbs as module1. Do I just insert a second module, save it and it will work? Or do I create a different project?

      • Diane Poremsky says

        August 16, 2017 at 12:05 am

        You can add it to the same module or to a new one, whichever makes it easier for you. I prefer separate modules if the macros aren't similar and put all functions into a one module since they can be shared by other macros.

        Outlook only uses one project file.

      • David says

        August 22, 2017 at 2:14 am

        And to separate them into 2 modules. I would change the above text to a Public Sub? Is that what this 3rd bit of code is for? Sorry I haven't had much time lately to work on this, but It would really stream line things if I got it working.If I recall making it public lets Outlook populate the 2nd module option in the script selection list correct?

      • Diane Poremsky says

        December 31, 2017 at 11:00 pm

        Correct making it public lets outlook use the value in another sub.

        (Sorry I missed this earlier.)

  6. Ken says

    January 18, 2017 at 1:04 pm

    HI Diane,
    As before, your code works great and thank you for the headstart in the outcome I was looking for.

    It seems my question from 5 days ago about showing conflicting times for an appointment created in a non-default calendar didn't make the cut/got deleted. Found a solution.

    Reply
    • Diane Poremsky says

      January 18, 2017 at 11:16 pm

      Not deleted, I'm just way behind on answering. :) Do you mind sharing your solution?

      Reply
  7. Matt Sweet says

    November 7, 2016 at 10:24 am

    Hi Diane,

    How would you alter this macro to cancel meetings using the same fields? For example a meeting cancellation email is received and the macro scans the message and cancels an appointment at that time.

    Reply
    • Diane Poremsky says

      January 18, 2017 at 11:31 pm

      Sorry I missed this. You can use an if statement to find it based on the subject (and date). There is sample code at the end of https://www.slipstick.com/developer/copy-new-appointments-to-another-calendar-using-vba/

      Reply
  8. Pat says

    September 14, 2016 at 11:58 am

    I am struggling with this and I can not figure out why... my code had to be modified for the purpose of having a folder that requests I recieve go directly into. Other than that it won't even bring up the appointment. Nothing. Here is what I have:
    Dim WithEvents olInbox As Items

    Private Sub Application_Startup()
    Dim NS As Outlook.NameSpace
    Set NS = Application.GetNamespace("MAPI")
    Set Items = NS.GetDefaultFolder(olFolderInbox).Folders("Outsource Requests").Items
    Set NS = Nothing
    End Sub

    Private Sub olInbox_ItemAdd(ByVal Item As Object)

    Please help!

    Reply
    • Diane Poremsky says

      January 18, 2017 at 11:40 pm

      Sorry I missed this so long ago.
      This: Set Items = NS.GetDefaultFolder(olFolderInbox).Folders("Outsource Requests").Items
      Sets Items, it should be olInbox.
      Private Sub olInbox_ItemAdd(ByVal Item As Object)

      Reply
  9. Shiv says

    August 11, 2016 at 2:39 pm

    Hi Diane,

    Great article. Just what i was looking for. Just a little help though. I changed the name of the folder to be watched by this macro. Is the syntax of this code correct? Will this work?

    Dim WithEvents olITSC As Items

    Private Sub Application_Startup()
    Dim NS As Outlook.NameSpace
    Set NS = Application.GetNamespace("MAPI")
    Set olITSC = NS.GetDefaultFolder(olFolderITSC).Items
    Set NS = Nothing
    End Sub

    Private Sub olITSC_ItemAdd(ByVal Item As Object)

    If InStr(1, LCase(Item.Subject), "Change") Then
    Dim objAppt As Outlook.AppointmentItem
    Dim Reg1 As Object
    Dim M1 As Object
    Dim M As Object
    Dim strSubject As String
    Dim strLocation As String
    Dim sDate

    Set Reg1 = CreateObject("VBScript.RegExp")

    With Reg1
    For i = 1 To 3

    Select Case i
    Case 1
    .pattern = "(Subject[:](.*))\r"
    .Global = False
    Case 2
    .pattern = "(Date[:](.*))\r"
    .Global = False
    Case 3
    .pattern = "(Location[:](.*))\r"
    .Global = False

    End Select

    If Reg1.test(Item.Body) Then
    On Error Resume Next
    Set M1 = Reg1.Execute(Item.Body)
    For Each M In M1
    Debug.Print M.SubMatches(1)

    If i = 1 Then strSubject = Trim(M.SubMatches(1))
    If i = 2 Then sDate = Trim(M.SubMatches(1))
    If i = 3 Then strLocation = Trim(M.SubMatches(1))

    Next
    End If

    Next i
    End With

    Set objAppt = Application.CreateItem(olAppointmentItem)

    With objAppt
    '.MeetingStatus = olMeeting
    '.RequiredAttendees = Item.SenderEmailAddress
    .Subject = strSubject
    .Location = strLocation
    .Start = sDate
    .Duration = 60
    .Save
    '.Send
    End With

    Set Reg1 = Nothing

    Set objAppt = Nothing
    End If
    End Sub

    Reply
    • Diane Poremsky says

      August 13, 2016 at 10:54 am

      No, it's not correct. You can't get getdefault folders with non-default folders - you need to use getfolder function if it's in a different data file or use .folders("name") if it's a subfolder of the default. See https://www.slipstick.com/developer/working-vba-nondefault-outlook-folders/ for the function and more information.

      Reply
  10. Jon says

    July 13, 2016 at 4:31 pm

    How do i add the mail item as an attachement

    Reply
    • Diane Poremsky says

      July 14, 2016 at 12:00 am

      you'd use .attachments add item - put it as the first line under with objAppt.

      Reply
  11. Lane says

    April 22, 2016 at 6:10 pm

    If I understand this correctly - this code will only run when the application starts.

    Is it possible to have it run every time an item is received by a folder - without using a custom rule in the rule wizard?

    Reply
    • Diane Poremsky says

      April 23, 2016 at 12:11 am

      That would be an itemadd macro - and yes, you can watch a folder and run the macro on each item as it drops in the folder. The frist two samples are items adds - they watch the inbox, but that can be changed to any folder.

      Reply
  12. Lane says

    April 22, 2016 at 2:54 pm

    Two questions!

    1) Is it possible to use Rules to Run a Script on a *shared* folder? From my Outlook client?

    2) You mentioned above to get rid of the 'application startup macro' - does that mean getting rid of these lines?

    Dim WithEvents olInbox As Items

    Private Sub Application_Startup()
    Dim NS As Outlook.NameSpace
    Set NS = Application.GetNamespace("MAPI")
    Set olInbox = NS.GetDefaultFolder(olFolderInbox).Items
    Set NS = Nothing
    End Sub

    (I'm not sure if I get rid of Dim WithEvents olInbox As Items)

    Reply
    • Diane Poremsky says

      April 23, 2016 at 12:15 am

      1. No, rules only work on the inboxes for accounts in your profile. If you add the shared mailbox as an account, you could do it. The itemadd macros can watch any folder.

      2. yes, including Dim with events.

      Reply
      • Lane says

        April 25, 2016 at 2:56 pm

        For 2. -

        Getting rid of the Application Macro leaves me with this -

        Private Sub olInbox_ItemAdd(ByVal Item As Object)

        ' subject is arranged like this:
        ' new appointment, appointment subject, location, start date & time 1/1/2016 4 PM, duration in minutes
        ' do not use commas except as separators

        If InStr(1, LCase(Item.Subject), "new appointment") Then
        Dim objAppt As Outlook.AppointmentItem
        Dim apptArray() As String

        'split the subject at the comma
        apptArray() = Split(Item.Subject, ",")

        Set objAppt = Application.CreateItem(olAppointmentItem)

        With objAppt
        ' .MeetingStatus = olMeeting
        ' .RequiredAttendees = Item.SenderEmailAddress
        .Subject = apptArray(1)
        .Location = apptArray(2)
        .Start = apptArray(3)
        .Duration = apptArray(4)
        .Body = Item.Body
        .Save
        ' .Send
        End With

        Set objAppt = Nothing
        End If
        End Sub

        I'm a little confused, because my assumption is this is placed into "ThisOutlookSession" - but I'm not sure what line of code in here is dictating which folder to watch.

        I'm actually certain there is no line doing that, and was wondering what line of code might work (and where in the code) to watch a certain folder?

        Thanks.

      • Diane Poremsky says

        April 26, 2016 at 12:45 am

        You need the application_startup macro to set the folder to watch. This line tells it which folder to watch: Set olInbox = NS.GetDefaultFolder(olFolderInbox).Items

        If you wanted to use a rule or run the macro manually you don't need the app startup macro, but you do need to tweak the itemadd macro to work with either rules or manually.

      • Lane says

        April 26, 2016 at 2:57 pm

        I was being silly. I'll be using the application_startup macro.
        Does this code below look correct?

        Dim WithEvents olInbox As Items

        Private Sub Application_Startup()
        Dim NS As Outlook.NameSpace
        Dim objOwner As Outlook.Recipient

        Set NS = Application.GetNamespace("MAPI")
        Set objOwner = NS.CreateRecipient("Shared Calendar")
        objOwner.Resolve

        If objOwner.Resolved Then
        MsgBox objOwner.Name
        Set newCalFolder = NS.GetSharedDefaultFolder(objOwner, olFolderCalendar)
        End If
        MsgBox "Yay. The application started."
        End Sub

        Private Sub olInbox_ItemAdd(ByVal Item As Object)

        MsgBox "I recognize the folder received an item"

        If Item.Subject = "Test" Then
        Dim objAppt As Outlook.AppointmentItem
        MsgBox "I see the subject in this shared folder item is Test"
        End If

        Set objAppt = newCalFolder.Items.Add(olAppointmentItem)
        Set calFolder = Item.Parent
        With objAppt

        Dim subjectTextRemove As String
        subjectTextRemove = Item.Location
        subjectTextRemove = Replace(subjectTextRemove, "X", "")
        subjectTextRemove = Replace(subjectTextRemove, "Y", "y")
        subjectTextRemove = Replace(subjectTextRemove, "Z", "z")

        .Subject = subjectTextRemove
        .Location = Item.Location
        .Categories = "ROOM SET/STRIKE"
        .Start = DateAdd("n", -30, Item.Start)
        .Save
        .Move calFolder
        End With

        Set objAppt = newCalFolder.Items.Add(olAppointmentItem)

        With objAppt
        .Subject = "Strike WVHD"
        .Location = Item.Location
        .Categories = "ROOM SET/STRIKE"
        .Start = DateAdd("n", 0, Item.End)
        .Save
        .Move calFolder
        End With

        Set objAppt = Nothing

        End Sub

        This is being placed into "ThisOutlookSession".
        From what I understand, this will create two new appointments before and after the item that triggers this. Any glaringly obvious mistakes?

        Thanks a ton!

  13. Lane says

    April 15, 2016 at 2:20 pm

    Hey Diane.

    I'm trying to just copy paste what you've got in "Use Appointment Data in the Message Body".

    I don't seem to be able to assign this as a macro in the Ribbon. After I get rid of the word "Private" in the line, I can assign the macro.

    After that however, I'm still not capable of producing any created appointment.

    Can you think of anything that might be preventing that?

    Reply
    • Diane Poremsky says

      April 15, 2016 at 9:15 pm

      That is an automatic macro - it runs as messages arrive. It can be changed into a sript that works with a rule or to run it manually, you need to make a couple of changes.

      You don't need the application_start up part - replace all of the lines down to If InStr(1, LCase(Item.Subject), "new appointmnt") Then with the following. You could actually remove that line too, and the last end if if you are running it manually on a selected message. Select a message, run the macro.

      Private Sub createappt()
      Dim Item As Outlook.MailItem
      Set Item = Application.ActiveExplorer.Selection.Item(1)

      If InStr(1, LCase(Item.Subject), "new appointmnt") Then

      Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Visit Slipstick Forums.
What's New at Slipstick.com

Latest EMO: Vol. 31 Issue 3

Subscribe to Exchange Messaging Outlook






Support Services

Do you need help setting up Outlook, moving your email to a new computer, migrating or configuring Office 365, or just need some one-on-one assistance?

Our Sponsors

CompanionLink
ReliefJet
  • Popular
  • Latest
  • Week Month All
  • Jetpack plugin with Stats module needs to be enabled.
  • Error Opening iCloud Appointments in Classic Outlook
  • Opt out of Microsoft 365 Companion Apps
  • Mail Templates in Outlook for Windows (and Web)
  • Urban legend: Microsoft Deletes Old Outlook.com Messages
  • Buttons in the New Message Notifications
  • Move Deleted Items to Another Folder Automatically
  • Open Outlook Templates using PowerShell
  • Count and List Folders in Classic Outlook
  • Google Workspace and Outlook with POP Mail
  • Import EML Files into New Outlook
Ajax spinner

Recent Bugs List

Microsoft keeps a running list of issues affecting recently released updates at Fixes or workarounds for recent issues in classic Outlook (Windows).

For new Outlook for Windows: Fixes or workarounds for recent issues in new Outlook for Windows .

Outlook for Mac Recent issues: Fixes or workarounds for recent issues in Outlook for Mac

Outlook.com Recent issues: Fixes or workarounds for recent issues on Outlook.com

Office Update History

Update history for supported Office versions is at Update history for Office

Outlook Suggestions and Feedback

Outlook Feedback covers Outlook as an email client, including Outlook Android, iOS, Mac, and Windows clients, as well as the browser extension (PWA) and Outlook on the web.

Outlook (new) Feedback. Use this for feedback and suggestions for Outlook (new).

Use Outlook.com Feedback for suggestions or feedback about Outlook.com accounts.

Other Microsoft 365 applications and services




New Outlook Articles

Error Opening iCloud Appointments in Classic Outlook

Opt out of Microsoft 365 Companion Apps

Mail Templates in Outlook for Windows (and Web)

Urban legend: Microsoft Deletes Old Outlook.com Messages

Buttons in the New Message Notifications

Move Deleted Items to Another Folder Automatically

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Google Workspace and Outlook with POP Mail

Import EML Files into New Outlook

Newest Code Samples

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Insert Word Document into Email using VBA

Warn Before Deleting a Contact

Use PowerShell to Delete Attachments

Remove RE:, FWD:, and Other Prefixes from Subject Line

Change the Mailing Address Using PowerShell

Categorize @Mentioned Messages

Send an Email When You Open Outlook

Delete Old Calendar Events using VBA

VBA Basics

How to use the VBA Editor

Work with open item or selected item

Working with All Items in a Folder or Selected Items

VBA and non-default Outlook Folders

Backup and save your Outlook VBA macros

Get text using Left, Right, Mid, Len, InStr

Using Arrays in Outlook macros

Use RegEx to extract message text

Paste clipboard contents

Windows Folder Picker

Custom Forms

Designing Microsoft Outlook Forms

Set a custom form as default

Developer Resources

Developer Resources

Developer Tools

VBOffice.net samples

SlovakTech.com

Outlook MVP David Lee

Repair PST

Convert an OST to PST

Repair damaged PST file

Repair large PST File

Remove password from PST

Merge Two Data Files

Sync & Share Outlook Data

  • Share Calendar & Contacts
  • Synchronize two computers
  • Sync Calendar and Contacts Using Outlook.com
  • Sync Outlook & Android Devices
  • Sync Google Calendar with Outlook
  • Access Folders in Other Users Mailboxes

Diane Poremsky [Outlook MVP]

Make a donation

Mail Tools

Sending and Retrieval Tools

Mass Mail Tools

Compose Tools

Duplicate Remover Tools

Mail Tools for Outlook

Online Services

Calendar Tools

Schedule Management

Calendar Printing Tools

Calendar Reminder Tools

Calendar Dates & Data

Time and Billing Tools

Meeting Productivity Tools

Duplicate Remover Tools

Productivity

Productivity Tools

Automatic Message Processing Tools

Special Function Automatic Processing Tools

Housekeeping and Message Management

Task Tools

Project and Business Management Tools

Choosing the Folder to Save a Sent Message In

Run Rules on messages after reading

Help & Suggestions

Submit Outlook Feature Requests

Slipstick Support Services

Buy Microsoft 365 Office Software and Services

Visit Slipstick Forums.

What's New at Slipstick.com

Home | Outlook User | Exchange Administrator | Office 365 | Outlook.com | Outlook Developer
Outlook for Mac | Common Problems | Utilities & Addins | Tutorials
Outlook & iCloud Issues | Outlook Apps
EMO Archives | About Slipstick | Slipstick Forums
Submit New or Updated Outlook and Exchange Server Utilities

Send comments using our Feedback page
Copyright © 2026 Slipstick Systems. All rights reserved.
Slipstick Systems is not affiliated with Microsoft Corporation.