views:

1294

answers:

3

I'm using Interop.Domino.dll to retrieve E-mails from a Lotus "Database" (Term used loosely). I'm having some difficulty in retrieving certain fields and wonder how to do this properly. I've been using NotesDocument.GetFirstItem to retrieve Subject, From and Body.

My issues in this regard are thus:

  1. How do I retrieve Reply-To address? Is there a list of "Items" to get somewhere? I can't find it.
  2. How do I retrieve friendly names for From and Reply-To addresses?
  3. When I retrieve Body this way, it's formatted wierdly with square bracket sets ([]) interspersed randomly across the message body, and parts of the text aren't where I expect them.

Related code:

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

Hah, got it!

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";
}

This returned a list of indices, names, and values:

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   <redacted@LocalDomain>
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

Now, who can tell me why the Body keeps getting messed up?

tsilb
A: 

The Body item is a NotesRichTextItem, not a regular NotesItem. They are a different type of object in the Lotus Notes world (and often the source of much developer frustration!)

I don't have much experience with using COM to connect to Domino, and I know there are differences in what you have access to, but the Domino Designer Help should give you lots of information the classes, such as NotesRichTextItem.

Perhaps the method "GetFormattedText" would work better for you than accessing the item's Text property.

Here's an example of the method (taken from Domino Designer Help)

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
Ken Pespisa
Thanks, but I got the same wierdly-formatted string. I'm hoping for a way to retrieve this plaintext, but in such a way that it mimicks Notes's plaintext view. At the very least, the text should be in order and not contain these [] strings.
tsilb
A: 

It may not work depending on how your environment is set up, but the easiest way to deal with mail in domino is to leave them as MIME and get at the values via the NotesMIMEEntity and NotesMIMEHeader. This will only work if the mail came in from the web rather than native Notes and the environment has been set up to store mail in MIME format.

Otherwise you need to access the body as a NotesRichTextItem. From that item you need to get a NotesRichTextNavigator that will allow you move around the rich text structure if you need to.

If you think the struture should be relatively simple try calling NotesRichTextItem.GetFormattedText(). If that still isn't working then you're going to need to work out what is happeing by playing with an example doument and seeing what the structure looks like to the NotesRichTextNavigator.

kerrr
Dang; these messages are coming from within the network... - Hmm; though they do go through an SMTP server... will check
tsilb