Come posso conservare solo il messaggio più recente con un determinato oggetto in Outlook 2007?


2

Abbiamo un sistema automatizzato che invia aggiornamenti via e-mail. Va bene, e per me sono informazioni utili. Preferirei vedere solo l'aggiornamento più recente e fare il resto con il cestino. Cioè, dato il seguente elenco

inserisci qui la descrizione dell'immagine

Vorrei solo che la versione selezionata dell'aggiornamento 34022 rimanga nella mia cartella. Ho cercato in regole, ma nulla sembra adattarsi al conto.

C'è un modo per eliminare (automaticamente) quelli che non voglio?

Risposte:


1

Con un po 'di VBA. È sempre una buona idea testare accuratamente quando è coinvolta l'eliminazione.

Private Sub Application_NewMail()
' In ThisOutlookSession module

' see Create Outlook Rules Programmatically
' http://msdn.microsoft.com/en-us/library/aa163981(v=office.10).aspx

Dim olApp As Outlook.Application
Dim olNs As Outlook.NameSpace
Dim olFld As Outlook.MAPIFolder
Dim objMail As Object

Set olApp = Outlook.Application
Set olNs = olApp.GetNamespace("MAPI")
Set olFld = olNs.GetDefaultFolder(olFolderInbox)

olFld.items.sort "Received", False
'Set objMail = olFld.items.GetFirst ' In Outlook 2003
Set objMail = olFld.items.GetLast ' In Outlook 2010

If TypeOf objMail Is MailItem Then

    If objMail.SenderEmailAddress = "Found in DetermineSenderEmailAddress" And _
        InStr(1, objMail.Subject, "Ticket:") Then

            DeleteOldStatus objMail

    End If

End If

Set objMail = Nothing
Set olFld = Nothing
Set olNs = Nothing
Set olApp = Nothing

End Sub

Sub DeleteOldStatus(objMail As MailItem)

Dim olFld As folder
Dim olNs As NameSpace
Dim olderMail As MailItem

Dim iDel As Long

Set olNs = Application.GetNamespace("MAPI")
Set olFld = olNs.GetDefaultFolder(olFolderInbox)

For iDel = olFld.items.Count To 1 Step -1

    Set olderMail = olFld.items(iDel)

    If olderMail.Subject = objMail.Subject Then

        If olderMail.ReceivedTime < objMail.ReceivedTime Then

            Debug.Print olderMail.Subject & " received  " & olderMail.ReceivedTime & " should be deleted."
            'olderMail.Delete ' Remove leading apostrophe to uncomment when ready

        End If

    End If

Next

Debug.Print "Done - " & objMail.Subject

End Sub


Sub DetermineSenderEmailAddress()

' open up an email then run

Dim currItem As MailItem
Set currItem = ActiveInspector.currentItem

' Copy the text from the immediate pane.
Debug.Print currItem.SenderEmailAddress

End Sub

Guida di editor e pulsanti - http://www.slipstick.com/developer/how-to-use-outlooks-vba-editor/

La sicurezza macro dovrebbe essere impostata su media.

Guida ai pulsanti: http://www.howto-outlook.com/howto/macrobutton.htm

Modifica: risolta la riga InStr


Grazie (me ne ero quasi dimenticato). Sembra che stiamo controllando l'oggetto oldMail (InStr (1, oldMail.Subject, "Ticket:")) prima di impostarlo (in DeleteOldStatus ()), ma questo mi dà sicuramente un punto di partenza da cui lavorare.
StevenV
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.