Объектная модель Outlook, как правило, не позволяет создавать сообщения в состоянии отправки - свойство MailItem.Sent
доступно только для чтения.Даже на уровне MAPI (C ++ или Delphi) бит MSGFLAG_UNSENT
можно удалить из свойства PR_MESSAGE_FLAGS
только до того, как сообщение будет сохранено в первый раз.Единственный вид элемента, созданного OOM в состоянии отправки, - это элемент публикации, поэтому теоретически вы можете создать элемент публикации, сохранить его, сбросить свойство MessageClass
на "IPM.Note",
, разыменовать его, открыть заново по идентификатору записи -Теперь у вас будет MailItem в отправленном состоянии.Вам не нужно будет задавать все свойства отправителя и получателя (около десятка из них) и удалять определенные для публикации свойства - посмотрите на отправленное сообщение с помощью OutlookSpy (нажмите кнопку IMessage).
Если используется Погашение (любой язык), это может легко создать поддельное отправленное сообщение:
Set MySession = CreateObject("Redemption.RDOSession")
MySession.MAPIOBJECT = Application.Session.MAPIOBJECT
Set Folder = MySession.GetDefaultFolder(olFolderSentMail)
Set msg = Folder.Items.Add("IPM.Note")
msg.Sent = True
msg.Recipients.AddEx "The user", "user@domain.demo", "SMTP", olTo
msg.Sender = MySession.CurrentUser
msg.SentOnBehalfOf = MySession.CurrentUser
msg.subject = "Test sent message"
msg.Body = "test body"
msg.SentOn = Now
msg.ReceivedTime = Now
msg.Save