0

我正在使用Interop.Domino.dll从 Lotus“数据库”(松散使用的术语)中检索电子邮件。我在检索某些字段时遇到了一些困难,想知道如何正确地做到这一点。我一直在使用NotesDocument.GetFirstItem检索主题、发件人和正文。

因此,我在这方面的问题是:

  1. 如何检索回复地址?是否有“物品”列表可以到达某个地方?我找不到它。
  2. 如何检索 From 和 Reply-To 地址的友好名称?
  3. 当我以这种方式检索正文时,它的格式很奇怪,方括号集 ([]) 随机散布在消息正文中,并且部分文本不在我期望的位置。

相关代码:

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

3 回答 3

2

哈哈,明白了!

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

这返回了索引、名称和值的列表:

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" <name@email.example.com>
5: Principal        "example" <customerservice@email.example.com>
6: From         "IE130057945714t"<service@test.email.example.com>
7: SendTo       me@example.com
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

现在,谁能告诉我为什么身体总是一团糟?

于 2008-11-20T19:55:10.517 回答
1

Body 项是 NotesRichTextItem,而不是常规的 NotesItem。它们是 Lotus Notes 世界中的一种不同类型的对象(通常是许多开发人员沮丧的根源!)

我没有太多使用 COM 连接到 Domino 的经验,而且我知道您可以访问的内容有所不同,但是 Domino 设计器帮助应该为您提供大量的类信息,例如 NotesRichTextItem。

也许“GetFormattedText”方法比访问项目的 Text 属性更适合您。

这是该方法的一个示例(取自 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
于 2008-11-20T20:10:18.067 回答
0

它可能不起作用,具体取决于您的环境设置方式,但在 domino 中处理邮件的最简单方法是将它们保留为 MIME,并通过 NotesMIMEEntity 和 NotesMIMEHeader 获取值。这仅在邮件来自 Web 而不是本地 Notes 并且环境已设置为以 MIME 格式存储邮件时才有效。

否则,您需要将正文作为 NotesRichTextItem 访问。从该项目中,您需要获得一个 NotesRichTextNavigator,如果您需要,它将允许您在富文本结构中移动。

如果您认为结构应该相对简单,请尝试调用 NotesRichTextItem.GetFormattedText()。如果这仍然不起作用,那么您将需要通过使用示例文档并查看 NotesRichTextNavigator 的结构来了解正在发生的事情。

于 2008-11-21T13:44:22.107 回答