The SubmitMessage method saves all of the message's properties, and marks the message as ready to be sent. Marked messages are automatically moved to the Outbox folder where they will be delivered during the next synchronization.
MAPI passes messages to the underlying messaging system in the order in which they are marked for sending. Because of this functionality, a message might stay in a message store for some time before the underlying messaging system can take responsibility for it. The order of receipt at the destination is in the underlying messaging system's control and does not necessarily match the order in which messages were sent.
When IMessage::SubmitMessage returns, all pointers to the message and its associated sub-objects—messages, folders, attachments, streams, tables, and so on, are no longer valid. MAPI does not permit any further operations on these pointers, except for calling their IUnknown::Release methods. After IMessage::SubmitMessage is called, you should release the message and all associated sub-objects. However, if IMessage::SubmitMessage returns an error value indicating missing or invalid information, the message remains open and the pointers remain valid.
To cancel a send operation, open the Outbox folder and call IMAPIFolder::DeleteMessages on the message. Note, however, that due to timing issues, there is no guarantee that the message has not already been sent.