受信したすべてのメールをプライマリ アカウント (別のサーバー上) に転送するサーバー ルールが有効になっているセカンダリ Exchange アカウントがあります。無意味な転送ヘッダーを回避し、From フィールドと To フィールドを保持するために、メールを添付ファイルとして転送し、
このコードには 3 つの問題があり、少し行き詰っています。そのため、ここに投稿して、何らかの情報を得られることを願っています。
- 添付ファイルの検証を実行して、実際のメッセージ タイプのみが受信トレイに展開されるようにしたいと考えています。プロパティは見つかりました
.Type
が、これは番号しか表示されず、対応する参照が見つかりません。メッセージ以外の添付ファイル (または添付ファイルがない) が見つかった場合は、転送メッセージを保存するか、削除しないでください。 - アイテムは、受信したメール アイテムではなく下書きとして受信トレイに作成されます。ドキュメントの種類を変更する方法が見つかりません。
- 私のコードは、送信トレイに空のメッセージをランダムに作成しているようです。おそらくこれは、メッセージをディスクから開き、移動する以外に何もしていないためですが、今のところ確信が持てません。解凍されたメッセージに添付ファイルがある場合、それらの添付ファイルを含む空の下書きが送信トレイにあります。
以下に、回答から関連する質問への情報のおかげで主に作成されたコード全体を投稿しました。
Public Sub unpackAttachedMessage(itm As Outlook.MailItem)
Dim olApp As New Outlook.Application
Dim olNameSpace As Outlook.NameSpace
Dim olTargetFolder As Outlook.Folder
Dim objAtt As Outlook.Attachment
' Program Configuration Variables and Constants
Const saveFolder As String = "C:\Temp\Outlook"
Const messageCategory As String = "CategoryName"
' Runtime Variables
Dim i As Integer
Dim attachmentCount As Integer
i = 1
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' Folder creation does not seem to work.
If Not fso.FolderExists(saveFolder) Then
fso.CreateFolder (saveFolder)
End If
' For each attachment in the message.
For Each objAtt In itm.Attachments
' Save it to disk as a message.
objAtt.SaveAsFile saveFolder & "\" & i & ".msg"
' Retrieve a message from disk.
Dim message As Outlook.MailItem
Set message = Application.CreateItemFromTemplate(saveFolder & "\" & i & ".msg")
' Modify the Message.
' Note that this and potentially other message options need
' to be set BEFORE you move the item to its destination folder.
' Set the Category.
message.Categories = message.Categories & "," & messageCategory
' Mark as unread.
message.UnRead = True
' MsgBox "Class: " & itm.MessageClass & " --- Attached Item Class: " & message.MessageClass
' Doesn't work
'message.MessageClass = olPostItem
' Save changes to the message.
message.Save
' Move the item to Inbox.
Set olNameSpace = olApp.GetNamespace("MAPI")
Set olTargetFolder = olNameSpace.GetDefaultFolder(olFolderInbox)
message.Move olTargetFolder
' objAtt.DisplayName
Set objAtt = Nothing
i = i + 1
Next
attachmentCount = i
End Sub