您好我正在开发outlook addin,这将自动完成提取未读附件的未读电子邮件的任务。提取文件夹的附件。但是,我能够编码从电子邮件到文件夹的附件提取,但我意识到我应该指出的两个问题。有些电子邮件可能包含多个附件,有些附件可能具有相同的文件名(并且在解压缩时需要自动重命名以防止覆盖)。所以我无法理解如何编写它?我还想要代码在特定文件夹中检索到没有附件的电子邮件。请帮助解决此问题。以下是从电子邮件中提取文件夹中的附件的代码。 公共类ThisAddIn
Private Sub ThisAddIn_Startup() Handles Me.Startup
Dim inbox As Outlook.MAPIFolder = Me.Application.ActiveExplorer.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
Dim unreadItems As Outlook.Items = inbox.Items.Restrict("[Unread]=true")
Dim inboxItems As Outlook.Items = inbox.Items.Restrict("[Unread]=true")
Dim newEmail As Outlook.MailItem
MsgBox(String.Format("Unread items in Inbox = {0}", unreadItems.Count))
Try
For Each collectionItem As Object In inboxItems
newEmail = TryCast(collectionItem, Outlook.MailItem)
If newEmail IsNot Nothing Then
If newEmail.Attachments.Count > 0 Then
For i As Integer = 1 To newEmail.Attachments.Count
For j As Integer = i + 1 To newEmail.Attachments.Count
' Dim saveAttachment As Outlook.Attachments = newEmail.Attachments(i)
If newEmail.Attachments(i).FileName.Equals(newEmail.Attachments(j).FileName) Then
newEmail.Attachments(j).SaveAsFile("C:\Attachment\Copy\" & (newEmail.Attachments(j).FileName))
Exit For
End If
Next (j)
newEmail.Attachments(i).SaveAsFile("C:\Attachment\" & (newEmail.Attachments(i).FileName))
Next (i)
End If
End If
Next collectionItem
Catch ex As Exception
If Left(ex.Message, 11) = "Cannot Save" Then
MsgBox("Create Folder C:\Attachment")
End If
End Try
End Sub
答案 0 :(得分:0)
使用System.IO.File.Exists时,您必须使用自己的逻辑来提供唯一的文件名。一个简单的循环并在名称后附一个数字就足以应对文件名冲突。
但你究竟是什么意思“我希望代码中没有在特定文件夹中检索到附件的电子邮件”。是否要挂钩特定文件夹的Folder.Items.ItemAdd事件以检测何时传递新电子邮件或将其添加到该文件夹?或者,您是否要将没有附件的电子邮件移动到特定文件夹?