<p>当前,您将所有附加文件保存在磁盘上:</p>
<pre><code> for attachedFile in email.Attachments:
try:
filename = attachedFile.FileName
attachedFile.SaveAsFile("C:\\Outputfolder"+filename)
except Exception as e:
print(e)
</code></pre>
<blockquote>
<p>only email attachments from certain senders of .xls and .docx filetypes to a specified folder.</p>
</blockquote>
<p><a href="https://docs.microsoft.com/en-us/office/vba/api/outlook.attachment.filename?f1url=%3FappId%3DDev11IDEF1%26l%3Den-US%26k%3Dk(vbaol11.chm2366);k(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue" rel="nofollow noreferrer">Attachment.FileName</a>属性返回表示附件文件名的字符串。因此,通过提取文件扩展名来解析文件名将帮助您筛选应该保存在磁盘上的文件</p>
<p>此外,您可能对避免邮件正文中用于内联图像的隐藏附件感兴趣。下面是VBA中的示例代码(Outlook对象模型对于所有编程语言都是通用的,我不熟悉Python),它统计可见附件:</p>
<pre><code>Sub ShowVisibleAttachmentCount()
Const PR_ATTACH_CONTENT_ID As String = "http://schemas.microsoft.com/mapi/proptag/0x3712001F"
Const PR_ATTACHMENT_HIDDEN As String = "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"
Dim m As MailItem
Dim a As Attachment
Dim pa As PropertyAccessor
Dim c As Integer
Dim cid as String
Dim body As String
c = 0
Set m = Application.ActiveInspector.CurrentItem
body = m.HTMLBody
For Each a In m.Attachments
Set pa = a.PropertyAccessor
cid = pa.GetProperty(PR_ATTACH_CONTENT_ID)
If Len(cid) > 0 Then
If InStr(body, cid) Then
Else
'In case that PR_ATTACHMENT_HIDDEN does not exists,
'an error will occur. We simply ignore this error and
'treat it as false.
On Error Resume Next
If Not pa.GetProperty(PR_ATTACHMENT_HIDDEN) Then
c = c + 1
End If
On Error GoTo 0
End If
Else
c = c + 1
End If
Next a
MsgBox c
End Sub
</code></pre>
<p>您还可以检查邮件正文(请参见Outlook项目的<code>HTMLBody</code>属性)是否包含<code>PR_ATTACH_CONTENT_ID</code>属性值。如果不是,则如果未显式设置<code>PR_ATTACHMENT_HIDDEN</code>属性,则用户可以看到附加的属性</p>
<p>此外,您可能会发现<a href="https://stackoverflow.com/questions/13987588/sending-outlook-email-with-embedded-image-using-vbs">Sending Outlook Email with embedded image using VBS</a>线程很有用</p>