VBA to remove deferred delivery on a MeetingItem

Status
Not open for further replies.

Michael Nagy

New Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server 2010
To prevent compliance breeches I'm writing some code to delay sending of emails to external recipients.
A familiar problem but solutions I've seen only address email but no other Outlook types.

Most of my code works OK but I am having trouble removing the delay on a delayed MeetingItem.

Urgent items can be sent immediately by re-sending them again from the Outbox. The code should remove any existing delay, therefore sending immediately.

The following works for MailItems but fails for MeetingItem as meeting updates don't seem to inherit the existing delay.

Dim objNamespace As Outlook.NameSpace
Dim objItem As Object ' can be MailItem, MeetingItem etc
Dim objRecips As Outlook.Recipients
Dim objAttachments As Outlook.Attachments

Dim iCounter As Integer
Dim strMsgExtRecips As String
Dim strMsgAttachments As String
Dim strPrompt As String

Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
Const NoDeferredDelivery As String = "1/01/4501" ' Magic number Outlook uses for "delay mail box isn't checked"

Set objNamespace = Application.GetNamespace("MAPI")
Set objItem = Item 'Set object to the email just sent

' If item is currently delayed, remove the delay and quit.
If objItem.DeferredDeliveryTime <> NoDeferredDelivery Then
strPrompt = "Do you want to send immediately?"
If (MsgBox(strPrompt, vbYesNo + vbInformation + vbMsgBoxSetForeground, "Delivery delay will be removed") = vbYes) Then
objItem.DeferredDeliveryTime = NoDeferredDelivery
GoTo Procedure_Exit
Else
Cancel = True
GoTo Procedure_Exit
End If
End If

Any pointers greatly appreciated.
 
How are you adding the delay? It works using a rule or using a send macro -
Code:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
'Defer delivery time
   SendAt = DateSerial(Year(Now), Month(Now), Day(Now) + 1) + #7:00:00 AM#
Item.DeferredDeliveryTime = SendAt
End Sub
 
Thanks for the replying Diane. First post even though Slipstick has been my go to website for Outlook VBA for years.

That's exactly the way I'm adding the delay. But I'm having trouble removing the delay for Meeting Items.
Currently I imagine users will go to the outbox and be able to immediately send any delayed items they find there if it's urgent.
I suspect I don't understand the behaviour of meeting items well enough.

I call this from Application_ItemSend:

Public Sub OutgoingExternalEmails(ByVal Item As Object, Cancel As Boolean)

' Assists in preventing compliance breaches when emails are sent to incorrect recipients
' - Presents a warning message before sending an email to an external address
' - Delays sending of external emails by a set time

Dim objNamespace As Outlook.NameSpace
Dim objItem As Object ' can be MailItem, MeetingItem etc
Dim objRecips As Outlook.Recipients
Dim objAttachments As Outlook.Attachments

Dim iCounter As Integer
Dim strMsgExtRecips As String
Dim strMsgAttachments As String
Dim strPrompt As String

Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
Const NoDeferredDelivery As String = "1/01/4501" ' Magic number Outlook uses for "delay mail box isn't checked"
Const strSecurityGroup As String = "MEL_Outlook2010_PopUpMsg_Enable" ' members of this group are internal recipients. (not used at the moment)
Const iDeferredDeliveryTime As Integer = 5 ' delivery delay in minutes
Const boolDebugMode As Boolean = False ' Set to False when in production. Set to True only when testing and debugging the macro.

On Error GoTo Procedure_Error

Set objNamespace = Application.GetNamespace("MAPI")

Set objItem = Item 'Set object to the email just sent

Select Case TypeName(objItem)

Case "MailItem", "MeetingItem"

' If item is currently delayed, remove the delay and quit.
' This allows a user to go to their Outbox and send items immediately. This method is to be used for urgent items.
If objItem.DeferredDeliveryTime <> NoDeferredDelivery Then
strPrompt = "Do you want to send immediately?"
If (MsgBox(strPrompt, vbYesNo + vbInformation + vbMsgBoxSetForeground, "Delivery delay will be removed") = vbYes) Then
objItem.DeferredDeliveryTime = NoDeferredDelivery
GoTo Procedure_Exit
Else
Cancel = True
GoTo Procedure_Exit
End If
End If

' Get external recipients.
Set objRecips = objItem.Recipients
For iCounter = 1 To objRecips.Count
If objRecips.Item(iCounter).AddressEntry.Type = "SMTP" Then
strMsgExtRecips = strMsgExtRecips & vbNewLine & objRecips.Item(iCounter).Name
End If
Next iCounter

Case Else
MsgBox "Unknown Outlook Item Type"
GoTo Procedure_Exit
End Select

' If no external recipients then exit
If strMsgExtRecips = vbNullString Then GoTo Procedure_Exit

' Get list of attachments
Set objAttachments = objItem.Attachments
If objItem.Attachments.Count > 0 Then
For iCounter = 1 To objAttachments.Count
strMsgAttachments = strMsgAttachments & vbNewLine & objAttachments(iCounter).FileName
Next iCounter
End If

' Present warning message
strPrompt = vbNewLine & "Are the following recipient(s) correct?" & vbNewLine & strMsgExtRecips
strPrompt = strPrompt & vbNewLine

If Not strMsgAttachments = vbNullString Then
strPrompt = strPrompt & vbNewLine & "Are the following attachment(s) correct?" & vbNewLine & strMsgAttachments
Else
End If

If Not (MsgBox(strPrompt, vbYesNo + vbExclamation + vbMsgBoxSetForeground, "External Email") = vbYes) Then
'user has cancelled message: cancel send and exit
Cancel = True
GoTo Procedure_Exit
End If

' Send with delay
If Not objItem Is Nothing Then
objItem.DeferredDeliveryTime = DateAdd("n", iDeferredDeliveryTime, Now())
End If

Procedure_Exit:
On Error Resume Next
' Clean up.
Set objNamespace = Nothing
Set objItem = Nothing
Set objRecips = Nothing
Set objAttachments = Nothing
Exit Sub

Procedure_Error:
Err.Clear
Cancel = boolDebugMode ' don't send if an error occurs while we are testing the macro but send if in production

Resume Procedure_Exit
End Sub
 
Status
Not open for further replies.
Similar threads
Thread starter Title Forum Replies Date
O VBA - Regex - remove double line spacing Outlook VBA and Custom Forms 1
D Remove text in subject using VBA Outlook VBA and Custom Forms 4
G VBA/Macro to remove page colour when replying or forwarding email Outlook VBA and Custom Forms 2
efire9207 VBA Outlook Contacts Outlook VBA and Custom Forms 6
B Requesting VBA code to make Outlook prompt for confirmation when deleting a task? Outlook VBA and Custom Forms 4
M Outlook 365 VBA Auto-Forward Only the first of Duplicate Emails Outlook VBA and Custom Forms 2
N VBA Code Not Working correctly Outlook VBA and Custom Forms 1
L VBA to Triage Incoming Email Outlook VBA and Custom Forms 0
J Outlook VBA to send from Non-default Account & Data Files Outlook VBA and Custom Forms 4
H using VBA to edit subject line Outlook VBA and Custom Forms 0
G Get current open draft message body from VBA Outlook VBA and Custom Forms 1
P VBA to add email address to Outlook 365 rule Outlook VBA and Custom Forms 0
M Outlook 2016 outlook vba to look into shared mailbox Outlook VBA and Custom Forms 0
V VBA Categories unrelated to visible calendar and Visual appointment Categories Outlook VBA and Custom Forms 2
D Outlook VBA forward the selected email to the original sender’s email ID (including the email used in TO, CC Field) from the email chain Outlook VBA and Custom Forms 2
R Outlook 365 VBA AUTO SEND WITH DELAY FOR EACH EMAIL Outlook VBA and Custom Forms 0
R Outlook 2019 VBA to List Meetings in Rooms Outlook VBA and Custom Forms 0
geoffnoakes Counting and/or listing fired reminders via VBA Using Outlook 1
D.Moore Strange VBA error Outlook VBA and Custom Forms 4
B Modify VBA to create a RULE to block multiple messages Outlook VBA and Custom Forms 0
D Outlook 2021 Using vba code to delete all my spamfolders not only the default one. Outlook VBA and Custom Forms 0
K vba code to auto download email into a specific folder in local hard disk as and when any new email arrives in Inbox/subfolder Outlook VBA and Custom Forms 0
D VBA - unable to set rule condition 'on this computer only' Outlook VBA and Custom Forms 5
L Fetch, edit and forward an email with VBA outlook Outlook VBA and Custom Forms 2
BartH VBA no longer working in Outlook Outlook VBA and Custom Forms 1
W Can vba(for outlook) do these 2 things or not? Outlook VBA and Custom Forms 2
MattC Changing the font of an email with VBA Outlook VBA and Custom Forms 1
P MailItem.To Property with VBA not work Outlook VBA and Custom Forms 2
P Tweak vba so it can target another mailbox Outlook VBA and Custom Forms 1
A Outlook 2010 VBA fails to launch Outlook VBA and Custom Forms 2
richardwing Outlook 365 VBA to access "Other Actions" menu for incoming emails in outlook Outlook VBA and Custom Forms 0
W Create a Quick Step or VBA to SAVE AS PDF in G:|Data|Client File Outlook VBA and Custom Forms 1
J Outlook Rules VBA Run a Script - Multiple Rules Outlook VBA and Custom Forms 0
C Outlook (desktop app for Microsoft365) restarts every time I save my VBA? Using Outlook 1
D VBA Macro to Print and Save email to network location Outlook VBA and Custom Forms 1
TedSch Small vba to kill political email Outlook VBA and Custom Forms 3
E Outlook 365 Outlook/VBA Outlook VBA and Custom Forms 11
N VBA Macro To Save Emails Outlook VBA and Custom Forms 1
Z VBA Forward vs manual forward Outlook VBA and Custom Forms 2
J VBA Cannot programmatically input or change Value for User Defined field Using Outlook 1
J VBA for outlook to compare and sync between calendar Outlook VBA and Custom Forms 1
A Any way to force sort by/group by on search results with VBA? Outlook VBA and Custom Forms 1
E Default shape via VBA Outlook VBA and Custom Forms 4
A Change settings Send/receive VBA Outlook VBA and Custom Forms 0
Z Import Tasks from Access Using VBA including User Defined Fields Outlook VBA and Custom Forms 0
E Outlook VBA change GetDefaultFolder dynamically Outlook VBA and Custom Forms 6
justicefriends How to set a flag to follow up using VBA - for addressee in TO field Outlook VBA and Custom Forms 11
M add new attendee to existing meetings with VBA Outlook VBA and Custom Forms 5
D VBA code to select a signature from the signatures list Outlook VBA and Custom Forms 3
D Create advanced search (email) via VBA with LONG QUERY (>1024 char) Outlook VBA and Custom Forms 2

Similar threads

Back
Top