ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Comment lire les courriels du inbox de Outlook Express (ou Outlook)   



L'auteur

Mike Gagnon
Canada Canada
Membre Simple
# 0000000025
enregistré le 14/10/2004

Gagnon Mike
Pte Claire Quebec - Canada
de la société MCRG Software
Fiche personnelle


Note des membres
14/20
2 votes


Contributions > 12 - Envoyer des Emails

Comment lire les courriels du inbox de Outlook Express (ou Outlook)
# 0000000223
ajouté le 23/07/2005 12:51:18 et modifié le 29/03/2006
consulté 6393 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0

Description

Si vous voulez lire les courriels du Inbox de Outlook Express (ou Outlook), il faut mettre Outlook Express (ou Outlook) comme programme de courriels par defaut dans Internet Explorer (Tools->Internet Options->Programs)

Le code qui suit ramasse les courriels du inbox dans un curseur.

Code source :
Declare Integer MAPILogon In mapi32;
  INTEGER ulUIParam, String lpszProfileName,;
  STRING lpszPassword, Integer flFlags,;
  INTEGER ulReserved, Integer @lplhSession

Declare Integer MAPILogoff In mapi32;
  INTEGER lhSession, Integer ulUIParam,;
  INTEGER flFlags, Integer ulReserved

Declare Integer MAPIReadMail In mapi32;
  INTEGER lhSession, Integer ulUIParam,;
  STRING lpszMessageID, Integer flFlags,;
  INTEGER ulReserved, Integer @lppMessage

Declare Integer MAPIFreeBuffer In mapi32 Integer Pv

Declare Integer MAPIFindNext In mapi32;
  INTEGER lhSession, Integer ulUIParam,;
  STRING lpszMsgType, String lpszSeedMsgID,;
  INTEGER flFlags, Integer ulReserved, String @lpszMsgID

Declare RtlMoveMemory In kernel32 As Heap2Str;
  STRING @, IntegerInteger

Private hSession
hSession = getNewSession()
If hSession = 0
  ? "Unable to log on."
Else
  Create Cursor csResult (;
    origname C(50), origaddr C(50), subj C(200), msg M)
  = ScanningMessages()
  = MAPILogoff (hSession, 0, 0, 0)
  Go Top
  Browse Normal Nowait
Endif
Procedure  ScanningMessages
  Local lcBuffer, lnResult, lcMsgId, lnMsgCount
  lcBuffer = Repli(Chr(0), 1024)
  lcMsgId = .Null.
  lnMsgCount = 0
  Do While .T.
    lnResult = MAPIFindNext (hSession, 0, .Null., lcMsgId,;
      16384, 0, @lcBuffer)
    If lnResult = 0
      lnMsgCount = lnMsgCount + 1
      lcMsgId = Substr(lcBuffer, 1,At(Chr(0),lcBuffer)-1)
      = ReadMessage(lcMsgId)
    Else
      Exit
    Endif
  Enddo
  Return
Endproc

Procedure  ReadMessage(lcMsgId)
  Local lnResult, lnMemPtr
  lnMemPtr = 0
  lnResult = MAPIReadMail (hSession, 0, lcMsgId,;
    128+2048, 0,;
    @lnMemPtr)
  If lnResult = 0
    = SaveMessage(lnMemPtr)
    = MAPIFreeBuffer(lnMemPtr)
  Endif
  Return
Endproc

Procedure  SaveMessage(lnMemPtr)
  Local lcBuffer, lcSubject, lcNoteTxt
  lcBuffer = Repli(Chr(0), 48)
  = Heap2Str(@lcBuffer, lnMemPtr, 48)
  lcSubject = GetStruParam(@lcBuffer, 5)
  lcNoteTxt = GetStruParam(@lcBuffer, 9)
  Local lnOrigPtr, lcOrigBuf, lcOrigName, lcOrigAddr
  lnOrigPtr = buf2dword(Substr(lcBuffer, 29,4))
  lcOrigBuf = Repli(Chr(0), 24)
  = Heap2Str(@lcOrigBuf, lnOrigPtr, 24)
  lcOrigName = GetStruParam(@lcOrigBuf, 9)
  lcOrigAddr = GetStruParam(@lcOrigBuf, 13)
  Insert Into csResult Values (m.lcOrigName, m.lcOrigAddr,;
    M.lcSubject, m.lcNoteTxt)
  Return
Endproc

Function  GetStruParam (lcBuffer, lnOffs)
  Local lnPtr, lcResult
  lnPtr = buf2dword(Substr(lcBuffer, lnOffs,4))
  Return Iif(lnPtr=0, "", mem2str(lnPtr))
Endfunc

Function  getNewSession()
  Wait Window "Creating a new MAPI session..." Nowait
  Local lnResult, lnSession, lcStoredPath
  lcStoredPath = Sys(5) + Sys(2003)
  lnSession = 0
  lnResult = MAPILogon (0, "", .Null.,;
    64+2, 0, @lnSession)
  Set Default To (lcStoredPath)
  Wait Clear
  Return Iif(lnResult=0, lnSession, 0)
Endfunc

Function  mem2str(lnMemBlock)
  Local lnPtr, lcResult, lcBuffer, lnPos
  lnPtr = lnMemBlock
  lcResult = ""
  Do While .T.
    lcBuffer = Repli(Chr(0), 16)
    = Heap2Str (@lcBuffer, lnPtr, 16)
    lnPos = At(Chr(0), lcBuffer)

    If lnPos > 0
      lcResult = lcResult + Substr(lcBuffer, 1, lnPos-1)
      Return  lcResult
    Else
      lcResult = lcResult + lcBuffer
      lnPtr = lnPtr + 16
    Endif
  Enddo
Endfunc

Function buf2dword (lcBuffer)
  Return Asc(Substr(lcBuffer, 1,1)) + ;
    Asc(Substr(lcBuffer, 2,1)) * 256 +;
    Asc(Substr(lcBuffer, 3,1)) * 65536 +;
    Asc(Substr(lcBuffer, 4,1)) * 16777216
Endfunc



Commentaires
le 27/07/2005, EmanuelL a écrit :
Génial, est-il possible de récupérer aussi les fichiers attachés? J'image les copiés dans un dossier et mette les liens dans un champ de la table ou curseur csResult!
le 02/08/2005, Mike Gagnon a écrit :
Probablement, mais je n'ai jamais rechercher la solution.

le 07/09/2005, sim a écrit :
excellent programme, est il possible de recuperer les couriers dans un sous repertoire de la boite de reception ?

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2019.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3