在 Outlook 中对没有“收件人:”标签的电子邮件进行排序

在 Outlook 中对没有“收件人:”标签的电子邮件进行排序

最近,工作中有人开始使用邮件列表进行密件抄送,而不是直接发送到邮件列表。我认为这是为了防止人们意外地回复所有人,但这意味着这些电子邮件到达时不会被分类到正确的文件夹中。

我希望至少能够将它们分类到一个公共文件夹中,但这些电子邮件的标题中没有“收件人:”行。我使用的是 Outlook 2007,但我不知道如何使用其内置的规则编辑器来创建对这些电子邮件进行分类的规则。

是否有一个插件可以让我像这样对电子邮件进行排序,或者有更好的规则编辑器?

更新:我知道这已经过时了,但这对我来说仍然很烦人。有没有办法将这些类型的电子邮件分类到自己的文件夹中?

再次更新:为了让人们清楚,我认为我需要的规则逻辑应该是这样的......“收件人和抄送人都不包含我或任何包含我的邮件列表。”

答案1

看来您可以在规则向导的第 1 至第 3 步中选择以下条件以取得成功:

  1. 勾选“我的名字不在收件人框中”
  2. 勾选“移动到指定文件夹”,并选择文件夹
  3. 勾选“除非我的名字在“收件人”或“抄送”框中”

我使用工作邮箱对其进行了测试,并通过 Google 向自己发送电子邮件,如果我没有误解你的问题的话,它似乎可以实现你想要的功能。

答案2

如果您有一个 Exchange 服务器,并且这一切都是内部的,那么就不可能知道电子邮件是发送给谁的。

如果是从外部电子邮件服务器或几乎任何电子邮件服务器(Exchange 除外)发送的:在标题中,原始接收行应该有;Outlook 规则可以搜索该行(仅限客户端)。只需为邮件列表的电子邮件地址设置一个条件“邮件标题中包含特定单词”。

Exchange 不会添加标准电子邮件标头,除非它离开 Exchange,这不符合 RFC,但再说一次,它是微软。

答案3

我建议你可以制定一条规则,将所有你发送给或抄送的电子邮件移动到一个文件夹中,这个文件夹将成为你的主文件夹,而所有其他邮件将移至另一个文件夹中

答案4

所以你正在寻找“我的名字不在收件人或抄送字段中”的规则,但这是向导中没有的一条规则。我希望我没看错。

我不知道有任何这样的插件,但是你可以自己开发。这篇 MSDN 文章展示如何访问 Outlook 2007 并构建插件。

或者您也可以在 VBA 宏中执行此操作,实际上...我编写的这个宏可以满足您的要求,只需根据您的喜好配置常量即可。在 Outlook 中打开宏编辑器 (Alt+F11),并将其粘贴到 ThisOutlookSession 模块中。除非您之前在那里添加过宏,否则它应该是空的。

你需要启用宏如果尚未设置,请通过菜单“工具”->“宏”->“安全”进行设置。如果设置为“对所有宏发出警告”,则每次打开 Outlook 时都会提示您,这没问题。保存宏后重新打开 Outlook。

'# [Outlook VBA custom mail mover by keyboardMonkey]
'# Checks new email if YOUR_NAME does not appear in the TO or CC list.
'# moves the message to DESTINATION_FOLDER.
'# Note: DESTINATION_FOLDER must be a child of the Inbox node, not a sibling.

Const YOUR_NAME As String = "Wesley"
Const DESTINATION_FOLDER As String = "testfolder"

'// hook into the outlook items events
Public WithEvents myOlItems As Outlook.Items


Public Sub Application_Startup()

    ' get the inbox item collection
    Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items

End Sub

'// called on mail item add
Private Sub myOlItems_ItemAdd(ByVal Item As Object)

    If TypeName(Item) = "MailItem" Then

        ' get strongly typed object
        Dim mymail As MailItem
        Set mymail = Item

        ' flags if our name appears in each of the fields
        Dim name_in_to As Boolean
        Dim name_in_cc As Boolean
        name_in_to = InStrB(1, mymail.To, YOUR_NAME) > 0
        name_in_cc = InStrB(1, mymail.CC, YOUR_NAME) > 0

        '#Uncomment below to show mail item details
        ' MsgBox (mymail.Subject + " has me in TO: " + Str(name_in_to) + " and CC: " + Str(name_in_cc))

        ' are we mentioned in the header?
        If (Not name_in_to And Not name_in_cc) Then

            ' start with each main mapi folder
            Dim idx As Integer
            For idx = 1 To Outlook.Session.Folders.Count - 1

                ' recurse into subfolders
                Dim dest As Outlook.MAPIFolder
                Set dest = GetFolder(Outlook.Session.Folders.Item(idx), DESTINATION_FOLDER)

                ' we found our destination!
                If Not (dest Is Nothing) Then
                    mymail.Move dest
                    Exit For
                End If

            Next

        End If

        ' house cleaning
        Set mymail = Nothing

    End If

End Sub

'// to iterate is human. to recurse, divine
Private Function GetFolder(parent As Folder, name As String) As Outlook.MAPIFolder
    Dim idx As Integer
    Dim res As Object
    For idx = 1 To parent.Folders.Count
        Set res = GetFolder(parent.Folders.Item(idx), name)
        If Not res Is Nothing Then
            Set GetFolder = res
            Exit For
        End If
    Next
    If (parent.name = name) Then
        Set GetFolder = parent
    End If
End Function

相关内容