vba - 如果主题行匹配,则将电子邮件保存到文件夹
问题描述
如果主题行包含正确的术语,我正在尝试将电子邮件保存到文件夹中。
这段代码最终将被复制用于 75-80 个项目,所有项目都具有不同的主题行。
Option Explicit
Private Sub InboxItems_ItemAdd(ByVal objItem As Object)
Dim msgNew As MailItem
Dim DateYr As Object
Dim DateMonth As Object
If objItem.Class = olMail Then
Set msgNew = objItem
If (msgNew.Subject Like "Client Media Report*") Then
DateYr = Format(Now(), "yyyy", vbUseSystemDayOfWeek, vbUseSystem)
DateMonth = Format(Now(), "mm. mmmm", vbUseSystemDayOfWeek, vbUseSystem)
On Error Resume Next
MkDir "M:\AutoArchive\Client Media Report\" & DateYr
On Error GoTo 0
msgNew.SaveAs "M:\AutoArchive\Client Media Report\" & DateYr & "\" & DateMonth & ".msg"
End If
End If
End Sub
我希望这会将新电子邮件保存到正确的文件夹中。例如,示例将保存到M:\AutoArchive\Client Media Report\2019\08. August
它不会保存,也不会吐出错误。
示例主题行:Client Media Report 05 August 2019
示例文件位置: M:\AutoArchive\Client Media Report\2019\08. August
编辑:使用最新代码更新,事件触发错误
无法打开项目
上
Set mai = Application.Session.GetItemFromID(strEntryId)
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
MsgBox ("Test1")
Dim mai As Object
Dim msgNew As MailItem
Dim DateYr As Object
Dim DateMonth As Object
Set mai = Application.Session.GetItemFromID(strEntryId)
MsgBox mai.Subject
If mai.Class = olMail Then
Set msgNew = objItem
If (msgNew.Subject Like "DPS Front Pages*") Then
DateYr = Format(Now(), "yyyy", vbUseSystemDayOfWeek, vbUseSystem)
DateMonth = Format(Now(), "mm. mmmm", vbUseSystemDayOfWeek, vbUseSystem)
On Error Resume Next
MkDir "D:\AutoArchive\Full Front Pages\" & DateYr
On Error GoTo 0
msgNew.SaveAs "D:\AutoArchive\Full Front Pages\" & DateYr & "\" & DateMonth & msgNew.Subject & ".msg"
End If
End If
End Sub
解决方案
您需要处理在收件箱中收到新项目时触发的 Application 类的NewMailEx事件。
NewMailEx 事件在新邮件到达收件箱时触发,在客户端规则处理发生之前。您可以使用 EntryIDCollection 数组中返回的条目 ID 来调用NameSpace.GetItemFromID方法并处理该项目。请谨慎使用此方法,以尽量减少对 Outlook 性能的影响。但是,根据客户端计算机上的设置,新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。
Private Sub NewMailEx(ByVal EntryIDCollection As String)
Dim mai As Object
Dim msgNew As MailItem
Dim DateYr As Object
Dim DateMonth As Object
Set mai = Application.Session.GetItemFromID(strEntryId)
MsgBox mai.Subject
If mai.Class = olMail Then
Set msgNew = objItem
If (msgNew.Subject Like "Client Media Report*") Then
DateYr = Format(Now(), "yyyy", vbUseSystemDayOfWeek, vbUseSystem)
DateMonth = Format(Now(), "mm. mmmm", vbUseSystemDayOfWeek, vbUseSystem)
On Error Resume Next
MkDir "M:\AutoArchive\Client Media Report\" & DateYr
On Error GoTo 0
msgNew.SaveAs "M:\AutoArchive\Client Media Report\" & DateYr & "\" & DateMonth & msgNew.Subject & ".msg"
End If
End If
End Sub
推荐阅读
- javascript - 如何识别 JavaScript 客户端上的 SignalR 核心集线器错误?
- java - “mvn dependency:tree” 返回无法解析项目 com 的依赖关系。* 被缓存在本地仓库中……
- node.js - 为什么用户电子邮件验证失败?猫鼬验证错误:
- php - 如何在 PHP 中使用 array_map() 修改索引键
- javascript - 如何使用 json-query 更改匹配属性的值?
- android - Dagger2 发现 Android 依赖循环
- javascript - 使用 Yup & formik 验证图像的纵横比(宽度/高度)
- c# - 如果类中没有 Finalizer,GC.SuppressFinalize 是否没用?
- c# - c#编码问题与CsvHelper
- javascript - 等到 forEach 从 db 获取数据