Like many people I have my outlook configured with multiple mail accounts, one for personal, one for work and a couple for my freelance work. However when you send an email, Outlook assume you want to send it using your default mail account. This can often mean that you send email using the wrong address which can cause problems.
Now, I know you can easily change the Mail account by clicking on the Account button beneath the Send button. However it is very easy to forget or think you have it set right, only to find out later it was wrong. However what I really want is for outlook to prompt me every time I send an email, thus I will never forget and it should stop me from using the wrong account.
After reading many forum posts by people searching for a solution without success, I decided to write code this myself. This is the first time I have programmed Outlook before. But the results are good.
Now whenever I click send I get a small popup form appear (See above) which lists my mail account. It will highlight the current default account, but I can then select a different account if required. Once I press enter or click send its done. Or what is equally convenient is the second chance to cancel.
So how does it work?
Well the first thing to note is that this solution only works for Outlook 2007 or newer as it makes use of the “SendUsingAccount” method, which is new to Outlook 2007.
I then use the function call “Private Sub Application_ItemSend(ByVal item As Object, Cancel As Boolean)” to interrupt the sending of the email, to allow me to open up the form which gets the list of accounts.
I have also added a couple of extra bits of code (while I was on a roll) to prevent me from sending emails without a subject. It also checks to see if I have used the word “attach” in my email and if there are no attachments it will ask me if I meant to send the email without any attachments.
One other setting I had to change, was the security settings, as the code would not run unless I had set the security level to “No security check for macros”. (This is done by going to Tools -> Macros -> Security) – As long as you do not make a habit of installing macros you should be safe, but if anyone has a way of making this code work without having to disable macro security I would be glad to hear from you.
Public blnSend As Boolean Private Sub Application_ItemSend(ByVal item As Object, Cancel As Boolean) If TypeOf item Is Outlook.mailItem Then blnSend = False Load frmAccountList ' Load account list form frmAccountList.Show If blnSend Then ' Check that the message has a subject - Compulsory! If item.Subject = "" Then MsgBox "You forgot the subject." Cancel = True Else ' Check that attachment has been added If InStr(1, item.Body, "attach", vbTextCompare) > 0 Then If item.Attachments.Count = 0 Then ans = MsgBox("There is no attachment, send anyway?", vbYesNo) If ans = vbNo Then Cancel = True End If End If End If End If Else Cancel = True End If End If End Sub
Create a New Form, and layout the two buttons and list box.
Private Sub butCancel_Click() frmAccountList.Hide End Sub Function changeAccount() Dim item As mailItem Set item = Application.ActiveInspector.CurrentItem ' Change Mail Account item.SendUsingAccount = Application.Session.Accounts(lstMailAccounts.Value) ' Enable Sending ThisOutlookSession.blnSend = True frmAccountList.Hide End Function Private Sub butSend_Click() Call changeAccount End Sub Private Sub lstMailAccounts_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = 13 Then ' On Enter Key Press Call changeAccount End If End Sub Private Sub UserForm_Initialize() Dim item As mailItem Set item = Application.ActiveInspector.CurrentItem Dim oAccount As Outlook.Account For Each oAccount In Application.Session.Accounts If oAccount.AccountType = olPop3 Then lstMailAccounts.AddItem (oAccount) If oAccount = item.SendUsingAccount Then lstMailAccounts.Value = oAccount End If End If Next End Sub
And thats it…