Yeni gönderen adı için yeni klasör oluşturun ve mesajı yeni klasöre taşıyın


6

Arka fon

Outlook 2010'un e-postaları otomatik olarak kişinin adıyla belirtilen klasörlere taşımasını istiyorum . Örneğin:

  1. Kurallara tıklayın
  2. Kuralları ve Uyarıları Yönet'i tıklayın.
  3. Yeni Kural tıklayın
  4. "İletileri birinden bir klasöre taşı" seçeneğini seçin.
  5. Sonrakine tıkla

Aşağıdaki iletişim kutusu gösterilir:

Kural Sihirbazı

Sorun

Bir sonraki kısım genellikle şu şekilde görünür:

  1. Click people or public group
  2. İstediğiniz kişiyi seçin
  3. Click specified
  4. İstediğiniz klasörü seçin

Soru

Bu sorunlu manuel görevleri nasıl otomatikleştirirsiniz? İşte oluşturmak istediğim yeni kuralın mantığı:

  1. Yeni bir mesaj al.
  2. Gönderenin adını çıkartın.
  3. Yoksa, Gelen Kutusu altında yeni bir klasör oluşturun.
  4. Yeni mesajı, o kişinin adına atanmış klasöre taşıyın.

Bunun bir VBA makrosu gerektireceğini düşünüyorum.

İlgili Bağlantılar

Güncelleme # 1

Kod şöyle bir şeye benzeyebilir:

Public WithEvents myOlApp As Outlook.Application

Sub Initialize_handler()
    Set myOlApp = CreateObject("Outlook.Application")
End Sub

Private Sub myOlApp_NewMail()
    Dim myInbox As Outlook.MAPIFolder
    Dim myItem As Outlook.MailItem

    Set myInbox = myOlApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    Set mySenderName = myItem.SenderName

    On Error GoTo ErrorHandler
    Set myDestinationFolder = myInbox.Folders.Add(mySenderName, olFolderInbox)

    Set myItems = myInbox.Items
    Set myItem = myItems.Find("[SenderName] = " & mySenderName)
    myItem.Move myDestinationFolder

ErrorHandler:
    Resume Next
End Sub

Güncelleme # 2

Kodu aşağıdaki gibi bölün:

VBA Düzenleme

Bir test mesajı gönderdi ve hiçbir şey olmadı. Yeni bir mesaj geldiğinde mesajı gerçekten tetikleme hakkındaki talimatlar ayrıntılara biraz ışık tutar (örneğin, ThisOutlookSessionnasıl bahsedileceğine ve nasıl kullanılacağına değinilmez ).

Teşekkür ederim.

Yanıtlar:


2

Bu sık sorulan soru burada cevaplanır.

http://www.jpsoftwaretech.com/automatically-triage-emails-by-sender-name/

Şimdi NewMailEx'in yapacağı Newmail’in yapması için ItemAdd kullanır.

ThisOutlookSesion modülünde

Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace

  ' set object reference to default Inbox
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub Items_ItemAdd(ByVal item As Object)
' fires when new item added to default Inbox
' (per Application_Startup)

  On Error GoTo ErrorHandler

  Dim Msg As Outlook.MailItem
  Dim olApp As Outlook.Application
  Dim objNS As Outlook.NameSpace
  Dim targetFolder As Outlook.MAPIFolder
  Dim senderName As String

  ' don't do anything for non-Mailitems
  If TypeName(item) <> "MailItem" Then GoTo ProgramExit

  Set Msg = item

  ' move received email to target folder based on sender name
  senderName = Msg.senderName

  If CheckForFolder(senderName) = False Then  ' Folder doesn't exist
    Set targetFolder = CreateSubFolder(senderName)
  Else
    Set olApp = Outlook.Application
    Set objNS = olApp.GetNamespace("MAPI")
    Set targetFolder = _
    objNS.GetDefaultFolder(olFolderInbox).Folders(senderName)
  End If

  Msg.Move targetFolder

ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub

Function CheckForFolder(strFolder As String) As Boolean
' looks for subfolder of specified folder, returns TRUE if folder exists.
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olInbox As Outlook.MAPIFolder
Dim FolderToCheck As Outlook.MAPIFolder

Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olInbox = olNS.GetDefaultFolder(olFolderInbox)

' try to set an object reference to specified folder
On Error Resume Next
Set FolderToCheck = olInbox.Folders(strFolder)
On Error Goto 0

If Not FolderTocheck Is Nothing Then
  CheckForFolder = True
End If

ExitProc:
Set FolderToCheck = Nothing
Set olInbox = Nothing
Set olNS = Nothing
Set olApp = Nothing
End Function

Function CreateSubFolder(strFolder As String) As Outlook.MAPIFolder
' assumes folder doesn't exist, so only call if calling sub knows that
' the folder doesn't exist; returns a folder object to calling sub
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olInbox As Outlook.MAPIFolder

Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olInbox = olNS.GetDefaultFolder(olFolderInbox)

Set CreateSubFolder = olInbox.Folders.Add(strFolder)

ExitProc:
Set olInbox = Nothing
Set olNS = Nothing
Set olApp = Nothing
End Function

Bir şekilde etkinleştirmem gerekiyor mu yoksa sadece çalışıyor mu?
Gqqnbig

1
Daha önce VBA'yı hiç kullanmadıysanız, güvenlik ayarlarının nasıl değiştirileceğini araştırın.
niton

3

Kuralları tamamen kullanmayı unuttum ve bunun yerine SenderName özelliğini temel alan bir klasör ( Folders.Add yöntemini kullanarak) oluşturacak olan NewMail olayına eklenmiş bir VBA makrosu oluşturup MailItem'in Move yöntemiyle oraya taşıyacağım .


1
İşaretçiler için teşekkürler. Keşke o kadar basit olsaydı. Yeni bir posta etkinliği oluşturma talimatları tamamen kapsamlı değildir (örneğin, talimatlar nasıl kullanılacağı bilgisini alır ThisOutlookSession).
Dave Jarvis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.