Outlook SendUsingAccount to change from account

P

p912s

Hello! I have searched all over the web and have been unable to locate a
solution... the closest I came was a thread on here so I joined.

My problem is sending a message after changing the sending account in
VBA. I get an error - "You Cannot Send An Item That Is Already In The
Process Of Being Sent"

Here is the thread that talked about a solution using a timer to get
the message sent but I don't understand how to implement a timer in
Outlook - http://tinyurl.com/r79d4w

And here is my code - fairly simple, it gathers up the pop3 accounts
and presents them in a popup message to select the account to send from.
The selecting and changing accounts works fine but the messages can't be
sent. I have documented in the code where the error happens.

Thanks.




Option Explicit

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As
Boolean)
Dim oAccount As Outlook.Account
Dim strDefaultAccount As String, strMsg As String, strID As String
Dim strAccounts(100)
Dim c As Integer, i As Integer
Dim result As Variant

c = 1

'get default account
strDefaultAccount = Application.Session.Accounts(1).DisplayName

'get pop3 accounts
For Each oAccount In Application.Session.Accounts
If oAccount.AccountType = olPop3 Then
strAccounts(c) = c & " - " & oAccount
'Debug.Print strAccounts(c)
c = c + 1
End If
Next

'build inputbox account list
strMsg = "Click Ok to use default account or enter the number of
the account to use...." & vbCrLf
For i = 1 To c
strMsg = strMsg & vbCrLf & strAccounts(i)
Next i

'********************************************************
'message id
'I think this is the id i need to recall and send the message?
strID = Item.ConversationIndex
'********************************************************

'display inputbox
result = InputBox(strMsg, "Select Sending Account",
strDefaultAccount)

'act on user input
Select Case result
Case strDefaultAccount
'clicked ok - send from default account
Cancel = True
Set Item.SendUsingAccount =
Application.Session.Accounts(1)
'********************************************************
'send error - "You Cannot Send An Item That Is Already In
The Process Of Being Sent"
Item.Send
'********************************************************
Case IsNumeric(result)
'typed a number
If result <= i Then
Cancel = True
Set Item.SendUsingAccount =
Application.Session.Accounts(result)
'********************************************************
'send error - "You Cannot Send An Item That Is Already
In The Process Of Being Sent"
Item.Send
'********************************************************
Else
'entered incorrect number - stay in message
Cancel = True
End If
Case Else
'clicked cancel or invalid entry - stay in message
Cancel = True
End Select
End Sub
 
K

Ken Slovak - [MVP - Outlook]

Application_ItemSend() is too late, the item has already been submitted to
the mail transport by that time with the original email address. Handle that
earlier in the Item.Send() event.
 
P

p912s

'Ken Slovak - [MVP - Outlook said:
;373238']Application_ItemSend() is too late, the item has already been
submitted to
the mail transport by that time with the original email address. Handle
that
earlier in the Item.Send() event.

--
Ken Slovak
[MVP - Outlook]
'Slovak Technical Services Home' (http://www.slovaktech.com)
Author: Professional Programming Outlook 2007.
Reminder Manager, Extended Reminders, Attachment Options.
'Slovak Technical Services Products'
(http://www.slovaktech.com/products.htm)
[/QUOTE]

Thanks for the reply!

The above code is run from ThisOutlookSession so that when you click
the Send button on a message you're prompted to set the sending account.
Which as you point is to late to change the account.

In that code window my only choices are General and Application... the
only way I know I could get the Item.Send event would be to call it from
a button on a form. And I have tried that, in the Application.Send, set
Cancel =True and then call my form. And then from the form, set the
sending account and try and send the message, but I get the same error.

Is there any way to change the sending account after I have clicked the
Send Button?

Or can I edit the default email message and place my code behind the
Send Button?

Thanks.
 
K

Ken Slovak - [MVP - Outlook]

In ThisOutlookSession put something like this at the module level:

Dim WithEvents colInsp As Outlook.Inspectors
Dim WithEvents oMail As Outlook.MailItem

In the Application_Startup() event handler instantiate the Inspectors
collection:

Set colInsp = Application.Inspectors

That will let you handle the NewInspector() event. In that event handler
something like this:

If Inspector.CurrentItem.Class = olMail Then
Set oMail = Inspector.CurrentItem
End If

That will let you handle the oMail.Send() event, which fires when you click
the Send button.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top