2016-07-13 9 views
0

電子メールを送信するコードがあります。デフォルトのメッセージが作成され、ユーザーはそれを変更できます。私がしたいのは、送信されるメッセージをアーカイブすることですが、追加される可能性のある受信者はアーカ​​イブします。問題は、ユーザーがメールオブジェクトの送信をクリックするとnullに設定されることです。Outlookメッセージの本文を取得する方法

Public Shared Function SendRFQ(ByVal strRFQID As String, ByVal strTo As String, ByRef EmailSent As Structs.Email) As Boolean 

    Dim bRC As Boolean 
    Dim objOutlook As Outlook.Application 
    Dim objEmail As Outlook.MailItem 

    objOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application) 
    objEmail = CType(objOutlook.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem) 

    With objEmail 
     .CC = "[email protected]" 
     .Subject = String.Format("RFQ") 
     .To = strTo 
     .Body = Constants.RFQ.Email.Body 
     .Display(True) 
    End With 

    'objEmail is null 
    EmailSent.To = objEmail.To 
    EmailSent.Subject = objEmail.Subject 
    EmailSent.Body = objEmail.Body 

End Function 

COM例外が発生しました。 "アイテムが移動または削除されました。"

これを行う方法はありますか?

+0

'EmailSent'を入力した後でない限り、' Display'を呼び出さないでください。 –

+0

表示は、ユーザーがメッセージをカスタマイズできるようにするものです。私がEmailSentを最初に投入した場合、私は何の変更もしません。 –

答えて

1

あなたはMailItemSendeventを使用してこれを行うことができます。次のコンソールアプリでは、その方法を示します。それをあなたのニーズに適応させることができるはずです。

Imports Microsoft.Office.Interop 

Module Module1 

    Private WithEvents objEmail As Outlook.MailItem 

    Sub Main() 

     Dim objOutlook As Outlook.Application 

     objOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application) 
     objEmail = CType(objOutlook.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem) 

     With objEmail 
      .CC = "[email protected]" 
      .Subject = "Subject" 
      .To = "[email protected]" 
      .Body = "Body" 
      .Display(True) 
     End With 

     objOutlook = Nothing 

    End Sub 

    Private Sub objEmail_Send(ByRef Cancel As Boolean) Handles objEmail.Send 
     Console.WriteLine(objEmail.Body) 
     Console.WriteLine(objEmail.To) 
     Console.WriteLine(objEmail.Subject) 
    End Sub 
End Module 
+0

また、Application.ItemSendイベントを使用することもできます。 –

+0

ありがとうJim!完璧な作品! –

0

あなただけの電子メールの内容の値を保持し、あなたのByRefオブジェクトを移入する必要があります。

Dim cc = "[email protected]" 
Dim subject = String.Format("RFQ") 
Dim body = Constants.RFQ.Email.Body 
With objEmail 
    .CC = cc 
    .Subject = subject 
    .To = strTo 
    .Body = body 
    .Display(True) 
End With 

EmailSent.To = strTo 
EmailSent.Subject = subject 
EmailSent.Body = body 
+0

これは、ユーザーが行った変更を追跡しません。 –

関連する問題