2008-11-20 15 views
0

J'utilise Interop.Domino.dll pour récupérer des e-mails à partir d'une "base de données" Lotus (terme utilisé vaguement). J'ai de la difficulté à retrouver certains domaines et je me demande comment faire correctement. J'ai utilisé NotesDocument.GetFirstItem pour récupérer Sujet, De et Corps.C#, Lotus Interop: Obtenir des informations sur les messages

Mes questions à cet égard sont donc:

  1. Comment puis-je récupérer adresse de réponse? Y a-t-il une liste de "Items" pour aller quelque part? Je ne peux pas le trouver.
  2. Comment récupérer des noms conviviaux pour les adresses From et Reply-To?
  3. Lorsque je récupère Body de cette façon, il est formaté wierdly avec des ensembles de crochets ([]) entrecoupés au hasard dans le corps du message, et les parties du texte ne sont pas là où je les attends.

Code connexes:

string 
    ActualSubject = nDoc.GetFirstItem("Subject").Text, 
    ActualFrom = nDoc.GetFirstItem("From").Text, 
    ActualBody = nDoc.GetFirstItem("Body").Text; 
+0

Lotus Notes? Nous sympathisons avec vous. –

+0

Parlez-moi de ça. Je suis arrivé à la conclusion que nous sommes les deux seules entreprises qui l'utilisent ... Et j'ai entendu des parties d'IBM utiliser Outlook. – tsilb

+0

Je me prépare juste à descendre ce trou de lapin. Cela fait quelques années depuis ce post.Des astuces/astuces qui pourraient m'aider? Autre que "ne le fais pas" ce qui n'est pas une option :-) – Scott

Répondre

2

Hah, a!

Object[] ni = (Object[])nDoc.Items; 
string names_values = ""; 
for (int x = 0; x < ni.Length; x++) 
{ 
NotesItem item = (NotesItem)ni[x]; 
if (!string.IsNullOrEmpty(item.Name)) names_values += x.ToString() + ": " + item.Name + "\t\t" + item.Text + "\r\n"; 
} 

Cette retourné une liste d'indices, les noms et les valeurs:

0: Received  from example.com ([192.168.0.1])   by host.example.com (Lotus Domino Release 6.5.4 HF182)   with ESMTP id 2008111917343129-205078 ;   Wed, 19 Nov 2008 17:34:31 -0500 
1: Received  from example.com ([192.168.0.2])   by host2.example.com (Lotus Domino Release 6.5.4 HF182)   with ESMTP id 2008111917343129-205078 ;   Wed, 19 Nov 2008 17:34:31 -0500 
2: X_PGRTRKID  130057945714t 
3: X_PGRSRC  IE 
4: ReplyTo  "example" <[email protected]> 
5: Principal  "example" <[email protected]> 
6: From   "IE130057945714t"<[email protected]> 
7: SendTo  [email protected] 
8: Subject  (Message subject redacted) 
9: PostedDate  11/19/2008 03:34:15 PM 
10: MIME_Version  1.0 
11: $Mailer  SMTP DirectMail 
12: $MIMETrack  Itemize by SMTP Server on xxxPT02-CORP/example(Release 6.5.4 HF182|May 31, 2005) at 11/19/2008 05:34:31 PM;Serialize by Router on xxxPT02-CORP/example(Release 6.5.4 HF182|May 31, 2005) at 11/19/2008 05:34:32 PM;Serialize complete at 11/19/2008 05:34:32 PM;MIME-CD by Router on xxxPT02-CORP/example(Release 6.5.4 HF182|May 31, 2005) at 11/19/2008 05:34:32 PM;MIME-CD complete at 11/19/2008 05:34:32 PM;Itemize by Router on camp-db-05/example(Release 7.0.2 HF76|November 03, 2006) at 11/19/2008 05:34:32 PM;MIME-CD by Notes Client on MyName/Guest/example(Release 6.5.6|March 06, 2007) at 11/20/2008 12:46:25 PM;MIME-CD complete at 11/20/2008 12:46:25 PM 
13: Form  Memo 
14: $UpdatedBy  ;CN=xxxPT02-CORP/O=example 
15: $ExportHeadersConverted  1 
16: $MessageID  <[email protected]> 
17: RouteServers  CN=xxxPT02-CORP/O=example;CN=camp-db-05/O=example 
18: RouteTimes  11/19/2008 03:34:31 PM-11/19/2008 03:34:32 PM;11/19/2008 03:34:32 PM-11/19/2008 03:34:32 PM 
19: $Orig  958F2E4E4B666AB585257506007C02A7 
20: Categories  
21: $Revisions  
22: DeliveredDate  11/19/2008 03:34:32 PM 
23: Body  []exampleexample 

Maintenant, qui peut me dire pourquoi le corps ne cesse de se foiré?

1

L'élément Body est un NotesRichTextItem, pas un NotesItem standard. Ils sont un type différent d'objet dans le monde Lotus Notes (et souvent la source de beaucoup de frustration de développeur!)

Je n'ai pas beaucoup d'expérience avec COM pour me connecter à Domino, et je sais qu'il y a des différences dans ce que vous avez accès à, mais l'aide de Domino Designer devrait vous donner beaucoup d'informations sur les classes, telles que NotesRichTextItem. Peut-être que la méthode "GetFormattedText" fonctionnerait mieux pour vous que d'accéder à la propriété Text de l'élément.

Voici un exemple de la méthode (prise d'aide de Domino Designer)

Dim doc As NotesDocument 
Dim rtitem As Variant 
Dim plainText As String 
Dim fileNum As Integer 
'...set value of doc... 
Set rtitem = doc.GetFirstItem("Body") 
If (rtitem.Type = RICHTEXT) Then 
    plainText = rtitem.GetFormattedText(False, 0) 
End If 
' get a file number for the file 
fileNum = Freefile 
' open the file for writing 
Open "c:\plane.txt" For Output As fileNum 
' write the formatted text to the file 
Print #fileNum, plainText 
' close the file 
Close #fileNum 
+0

Merci, mais j'ai eu la même chaîne au format wierdly. J'espère trouver un moyen de récupérer ce texte en clair, mais de manière à imiter la vue en clair de Notes. À tout le moins, le texte devrait être dans l'ordre et ne pas contenir ces [] chaînes. – tsilb

0

Il peut ne pas fonctionner selon la façon dont votre environnement est mis en place, mais la meilleure façon de traiter avec le courrier en domino est de quitter les comme MIME et obtenir les valeurs via NotesMIMEEntity et NotesMIMEHeader. Cela ne fonctionnera que si le courrier provient du Web plutôt que de Notes natives et que l'environnement a été configuré pour stocker le courrier au format MIME.

Sinon, vous devez accéder au corps en tant que NotesRichTextItem. De cet article, vous devez obtenir un NotesRichTextNavigator qui vous permettra de vous déplacer dans la structure du texte enrichi si vous en avez besoin.

Si vous pensez que la struture devrait être relativement simple, essayez d'appeler NotesRichTextItem.GetFormattedText(). Si cela ne fonctionne toujours pas, alors vous devrez déterminer ce qui se passe en jouant avec un exemple et voir à quoi ressemble la structure de NotesRichTextNavigator.

+0

Dang; ces messages proviennent du réseau ... - Hmm; bien qu'ils passent par un serveur SMTP ... vérifiera – tsilb