[VB.Net] Afzender adres bij export van Outlook naar bestand

Pagina: 1
Acties:

  • Richard.vL
  • Registratie: April 2007
  • Laatst online: 27-09-2021
LS,

Ik ben bezig met een VB.Net programma dat van mijn Outlook alle mails exporteert naar losse bestanden op de harde schijf. Zodoende kan ik mijn .pst bestanden opruimen (zijn nu veel te groot) en ook voor het back-up'en van mijn pc is dat een stuk makkelijker. Dan kan ik mijn mails op CD zetten en daarop gebruiken (iets wat niet kan met de .PST bestanden van Outlook).

Op zich lukt dit allemaal erg goed, maar er is één veld dat ik niet altijd goed krijg. Het gaat hierbij om het mail adres van de afzender. Soms is deze goed gevuld, waarbij ik hem dan kan afleiden uit het eerste ReplyReciepients.Address, maar vaak ook is deze leeg. Er bestaat een API ReplyRecipientAddress, maar deze is niet gevuld of geeft een foutmelding.

Kan iemand me hier bij helpen? Ik hoef niet om het security model heen, ik vind het juist wel goed dat Outlook aangeeft dat er iets gebeurt, maar om mijn export mogelijk te maken wil ik ook graag dat dit afzender mail adres gevuld is.

Hierbij wat code die ik gebruikt heb:

For iMail = 1 To pstFolder.Items.Count()
Try
mailItem = pstFolder.Items.Item(iMail)
PrintLine(iExport, "SenderName: " & mailItem.SenderName )
PrintLine(iExport, "ReplyRecipients.Count: " & mailItem.ReplyRecipients.Count )
If mailItem.ReplyRecipients.Count > 0 Then
PrintLine(iExport, "ReplyRecipients.Item(1).Address: " & mailItem.ReplyRecipients.Item(1).Address )
End If
PrintLine(iExport, "Sender: " & mailItem.Sender.ToString() )
PrintLine(iExport, "SenderEmailAddress: " & mailItem.SenderEmailAddress )
PrintLine(iExport, "ReplyRecipientNames: " & mailItem.ReplyRecipientNames )
PrintLine(iExport, "Sent: " & mailItem.Sent )
PrintLine(iExport, "SentOn: " & mailItem.SentOn )
PrintLine(iExport, "SentOnBehalfOfName: " & mailItem.SentOnBehalfOfName )
PrintLine(iExport, "Size: " & mailItem.Size )
Dim iTel As Integer
Dim tmpRecipient As Outlook.Recipient
PrintLine(iExport, "Recipients.COUNT: " & mailItem.Recipients.Count )
PrintLine(iExport, "ReplyRecipients.COUNT: " & mailItem.ReplyRecipients.Count )
PrintLine(iExport, "UserProperties.COUNT: " & mailItem.UserProperties.Count )
PrintLine(iExport, "ItemProperties.COUNT: " & mailItem.ItemProperties.Count )
PrintLine(iExport, "Links.COUNT: " & mailItem.Links.Count )
For iTel = 1 To mailItem.ReplyRecipients.Count
tmpRecipient = mailItem.ReplyRecipients.Item(iTel)
PrintLine(iExport, "ReplyRecipients." & iTel & ".Address: " & tmpRecipient.Address )
PrintLine(iExport, "ReplyRecipients." & iTel & ".Name: " & tmpRecipient.Name )
PrintLine(iExport, "ReplyRecipients." & iTel & ".Type: " & tmpRecipient.Type )
Next
Catch e As Exception
PrintLine(ilog, "ERROR PROCESSING ITEM")
End Try
Next

Elke werkende suggestie _/-\o_ wordt erg op prijs _/-\o_ gesteld.
Bij voorbaat dank,
Richard.vL

  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Tja, weet niet of je helemaal nieuw bent met programmeren of niet. In ieder geval lijkt het me logischer als je altijd begint met index 0 om het 1e item te pakken. Deze regel:

Visual Basic .NET:
1
PrintLine(iExport, "ReplyRecipients.Item(1).Address: " & mailItem.ReplyRecipients.Item(1).Address )


Zou dan veranderd worden in:

Visual Basic .NET:
1
PrintLine(iExport, "ReplyRecipients.Item(0).Address: " & mailItem.ReplyRecipients.Item(0).Address )


Maar ik weet dat met COM soms index 1 gebruikt wordt om het eerste item te bereiken, dus wellicht is het toch correct wat je hierboven doet.

Wat wellicht nog een betere oplossing is, is dat je een For Each loop gebruikt wanneer je niet zeker weet uit hoeveel items een collectie bestaat, dan zou je het volgende krijgen:

Visual Basic .NET:
1
2
3
For Each ReplyRecipient As String In ReplyRecipients
    PrintLine(iExport, "ReplyRecipient Address: " & ReplyRecipient )
Next


Op deze manier zou je altijd IEDER item in een collectie moeten bereiken.

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.


  • Richard.vL
  • Registratie: April 2007
  • Laatst online: 27-09-2021
MacWolf,

Dank, ik kan redelijk goed programmeren, alleen is het Outlook deel vrij nieuw voor mij binnen VB.Net. Ik heb veel uitgeprobeerd en kennelijk moet het voor ReplyReciepients beginnen met 1. Dit controleer ik ook door te kijken of de count > 0 is. Dit is een samenvatting van de code, omdat het werkelijke deel XML/HTML genereert en dat veel overbodige info zou zijn.

Het deel:
For Each ReplyRecipient As String In ReplyRecipients
PrintLine(iExport, "ReplyRecipient Address: " & ReplyRecipient )
Next
werkt trouwens niet, omdat mailItem.ReplyRecipients geen collection type is.

Het vervelende is echter dat ik niet bij het mail adres van de afzender kan komen, de rest werkt wel. En het is zonde als ik de mail adressen kwijt raak bij het opslaan van de mails, dan kan ik ze later niet (makkelijk) terug vinden.

Als je suggesties hebt, graag...
Richard.vL

[ Voor 18% gewijzigd door Richard.vL op 06-04-2007 16:56 ]