Récuperer les mails d'une boite aux lettres outlook en filtrant sur certaine propriétés

Contenu du snippet

Il faut impérativement avoir installer OUTLOOK (et pas le Express!)

Récupere dans une collection d'élément "Mails" les mails rangé dans la boite aux lettres X en filtrant sur la date de réception et/ou de création et/ou le sujet et/ou l'expéditeur :
GetAllMailInBox(ByVal MailBoxPath As String, _
Optional ByVal MailBoxFrom As OlDefaultFolders, _
Optional ByVal FilterMail As Collection)

'--- MailBoxPath = Nom de la boite au lettre
'--- MailBoxFrom = 6 'C'est ce qu'il y a de mieux
'--- FilterMail = Collection de type simple ex :
FilterMail.ADD "21/11/2003", "RECEIVEDTIME"

ex :

Dim MailReceived as New Collection
Dim FilterMail as New Collection

FilterMail.ADD "CodeS-SourceS du","SUBJECT"

Set MailReceived = GetAllMailInBox("Code source",olFolderInbox,FilterMail)

Source / Exemple :


Option Explicit

Dim MSOE_App       As New Outlook.Application
Dim MSOE_NameSpace As NameSpace
Dim MSOE_Folder    As MAPIFolder
Dim MSOE_Mail      As MailItem

Public Function GetAllMailInBox(ByVal MailBoxPath As String, _
                                Optional ByVal MailBoxFrom As OlDefaultFolders, _
                                Optional ByVal FilterMail As Collection) As Collection
  Dim ReturnValue As New Collection
  
  Dim SubFolder   As Variant
  Dim Ok          As Integer
  
  On Error GoTo GetAllMailInBox_Fail
  
  Set MSOE_NameSpace = MSOE_App.GetNamespace("MAPI")
  Set MSOE_Folder = MSOE_NameSpace.GetDefaultFolder(MailBoxFrom)
  For Each SubFolder In Split(MailBoxPath, "\")
    If SubFolder <> "" Then Set MSOE_Folder = MSOE_Folder.Folders(SubFolder)
  Next SubFolder
  
  On Error Resume Next
  For Each MSOE_Mail In MSOE_Folder.Items
    If TypeOf MSOE_Mail Is MailItem Then
      With FilterMail
        Ok = 0
        Ok = Ok - (UCase(Left(MSOE_Mail.Subject, Len(.Item("SUBJECT")))) = UCase(.Item("SUBJECT")))
        Ok = Ok - (Format(MSOE_Mail.CreationTime, "dd/mm/yyyy") = Format(CDate(.Item("CREATIONTIME")), "dd/mm/yyyy"))
        Ok = Ok - (Format(MSOE_Mail.ReceivedTime, "dd/mm/yyyy") = Format(CDate(.Item("RECEIVEDTIME")), "dd/mm/yyyy"))
        Ok = Ok - (UCase(Left(MSOE_Mail.ReceivedByName, Len(.Item("SENDERNAME")))) = UCase(.Item("SENDERNAME")))
      End With
      If Ok = FilterMail.Count Then ReturnValue.Add MSOE_Mail
    End If
  Next MSOE_Mail
  
GetAllMailInBox_Fail:
  Set GetAllMailInBox = ReturnValue
End Function

Conclusion :


Pas trop top si l'on veux filtrer sur d'autres propriétés !!! (on ouvre le code et on code...)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.