I pick up interesting problems looking for solutions on various forums, such as this one.
Can I create an Outlook Rule that will keep me from sending an email to the wrong address? The reason: I have various email addresses. On occasion, I intend to send a message to my own address and use the wrong address instead, sending an email to the same wrong person more than once.
You can't use a rule to protect you from yourself but if you realize it as soon as you hit send, you can use a rule to delay mail by a minute or two, to give you time to recover the message and change the address. I have more information at Defer delivery in Outlook. You could also disable autocomplete, since it is the main cause of this problem, but because its a very good time saver most of the time, a macro is better.
Alternately, you can use macros to help get the address right. Since the problem is likely due to your selecting the wrong address as you type in the To field, using macros to create and address messages will reduce some, if not all of the problems. You can also use a macro to check outgoing messages for an address.
Forward selected message to specific address
Create a macro for you address and assign the macro to a toolbar or ribbon button. Place the button(s) next to the Forward button to help you remember. You'll need one macro & button for each address you forward messages to.
Public Sub ForwardtoMe() Dim oAccount As Outlook.Account Dim oMail As Outlook.MailItem Set oMail = Application.ActiveExplorer.Selection(1).Forward oMail.Recipients.Add ("firstname.lastname@example.org") oMail.Display End Sub
Check messages you send
This macro checks messages for one specific address and if it finds the address, allows you to cancel the send. On Error Resume Next allows it to work with meetings or task requests, otherwise it kicks up an error message.
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) On Error Resume Next ' use lower case for the address ' LCase converts all addresses in the To field to lower case If InStr(LCase(Item.To), "email@example.com") Then Prompt$ = "You sending this to firstname.lastname@example.org. Are you sure you want to send it?" If MsgBox(Prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then Cancel = True End If End If End Sub
A slightly different version of the above macro checks messages you send for one of several addresses. If the address on the message is not one in the list (or there are multiple addresses in the list), it will ask if you really want to send.
While not the best option in my opinion, because it basically asks for confirmation every time you send, it may be a good solution in some cases.
To use, add your addresses to the Case line. This macro needs to be added to ThisOutlookSession to work.
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) On Error Resume Next Select Case LCase(Item.To) Case "email@example.com", "firstname.lastname@example.org", "email@example.com" Item.Send Case Else Prompt$ = "You are not sending this to one of your addresses. Are you sure you want to send the Mail?" If MsgBox(Prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then Cancel = True End If End Select End Sub
Check addresses in the To, CC, or BCC field using the Recipient Collection
This variation of the code checks all addresses in the recipient collection against the "bad address".
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) Dim Recipients As Outlook.Recipients Dim recip As Outlook.Recipient Dim i Dim prompt As String On Error Resume Next ' use lower case for the address ' LCase converts all addresses in the To field to lower case Set Recipients = Item.Recipients For i = Recipients.Count To 1 Step -1 Set recip = Recipients.Item(i) If InStr(LCase(recip), "firstname.lastname@example.org") Then prompt$ = "You sending this to email@example.com. Are you sure you want to send it?" If MsgBox(prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then Cancel = True End If End If Next i End Sub
How to use VBA code samples
To use either of these macros, open the VBA Editor using Alt+F11. Expand Project1.
The macro that checks addresses when you send messages needs to be in ThisOutlookSession.
The macro that forwards mail to a specific address can go into a separate Module. To add a module, right click on Project1 and choose Insert > Module.
Paste the code into the editor.
Change the addresses in the sample code to your own address.
The macro that checks address will run when you send messages.
To create buttons for the forward macro:
- Go to File, Options, and choose Customize Ribbon.
- Add a New Group to the list on the right side then Add the macro to the new group.
- Select Macros in Choose Commands from.
In Outlook 2007 and older:
- Right click in the toolbar area, choose Customize.
- Switch to the Commands tab.
- Select Macros under Categories.
- Drag the macro to anywhere on the Toolbar.