Как переместить почту в папку на основе имени файла вложения?

Мне нужно правило (или, скорее всего, макрос VBA) для сортировки моих писем. В случае, если у меня есть слово «ОТЧЕТ» в имени файла вложения вновь полученного письма, я бы хотел переместить это письмо в другую папку, скажем, в папку «ОТЧЕТЫ».

Как я могу этого добиться?

Я уже установил правило для заголовка почты, но это, похоже, не решило проблему.

Заранее спасибо!


person modzsi    schedule 05.09.2012    source источник
comment
на самом деле я не эксперт в VBA, я еще ничего не пробовал.   -  person modzsi    schedule 05.09.2012


Ответы (1)


Использованный код из http://www.outlookcode.com/article.aspx?id=62 и http://blog.saieva.com/2010/03/27/move-messages-to-folders-with-outlook-vba/

'code goes in "ThisOutlookSession" module
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim arr() As String
    Dim i As Integer
    Dim ns As Outlook.NameSpace
    Dim itm As MailItem
    Dim m As Outlook.MailItem
    Dim att As Outlook.Attachment

    On Error Resume Next
    Set ns = Application.Session
    arr = Split(EntryIDCollection, ",")
    For i = 0 To UBound(arr)
        Set itm = ns.GetItemFromID(arr(i))
        If itm.Class = olMail Then
            Set m = itm
            If m.Attachments.Count > 0 Then
                For Each att In m.Attachments
                    If UCase(att.FileName) Like "*REPORT*" Then
                        MoveToFolder m, "MoveTest"
                        Exit For
                    End If
                Next att
            End If
        End If
    Next
    Set ns = Nothing
    Set itm = Nothing
    Set m = Nothing
End Sub


Sub MoveToFolder(mItem As MailItem, folderName)

 '###you need to edit this for your account name###
 Const mailboxNameString As String = "Mailbox - firstname lastname"

 Dim olApp As New Outlook.Application
 Dim olNameSpace As Outlook.NameSpace
 Dim olDestFolder As Outlook.MAPIFolder

 Set olNameSpace = olApp.GetNamespace("MAPI")
 Set olDestFolder = olNameSpace.Folders(mailboxNameString).Folders(folderName)

 Debug.Print "[" & Date & " " & Time & "] " & _
                ": folder = " & folderName & _
                "; subject = " & mItem.Subject & "..."

 mItem.Move olDestFolder

End Sub
person Tim Williams    schedule 05.09.2012
comment
Спасибо, Тим! Это выглядит великолепно, и мне удалось запустить MoveFolder как отдельный модуль, но если я просто вложу в ThisOutlookSession, ничего не произойдет ... Угадайте, почему? - person modzsi; 06.09.2012
comment
Когда я тестировал, у меня были оба метода в ThisOutlookSession, и он работал нормально. Я не могу сказать, почему это не для тебя ... - person Tim Williams; 06.09.2012
comment
Хорошо, я еще раз посмотрю, раньше я использовал Excel VB, но новичок с Outlook. Ура в любом случае! - person modzsi; 07.09.2012
comment
Последний раз пользовался Office 2010, не получилось. Я пробовал это в Office 2007, но все равно не повезло :( Я тоже изменил имя учетной записи, все еще без изменений. В прошлый раз я использовал davmail как POP3 ... Теперь я использую сервер Exchange. Мне нужно что-то исправлять, или это все еще MAPI? Может быть, нужно внести какие-либо изменения, чтобы он работал в 2007 году? - person modzsi; 05.12.2012
comment
Извините, у меня нет 2007 года для тестирования. Но я использую обмен, поэтому MAPI все равно должен работать. Попробуйте опубликовать новый вопрос, если у вас все еще есть проблемы, но обязательно укажите подробные сведения о том, в чем проблема. - person Tim Williams; 05.12.2012
comment
Наконец-то удалось заставить его работать, только в Office 2010, но он работает. Большое спасибо @Tim Williams - person modzsi; 07.08.2013