IBM Support

如何重新构建 Notes 邮件数据库的收件箱

Technote (troubleshooting)


问题

您的 Notes® 邮件收件箱损坏了。因为收件箱是一个文件夹,它并没有使用选择性的公式来提供一个文档的集合。事实上,它就是通过路由器不断的存储消息而构建起来的。一旦这个文件夹损坏了或者是被替换了,它的文档的集合也会丢失。当用一个新的收件箱来替换它时,只有从替换之后开始起,新的文档才会被存储起来。

如何才能重新构建您之前的收件箱呢?


解决问题

对于还没有被移动到其它文件夹中的老的邮件,可以使用下面的样例来重新构建收件箱。

实例1不需要备份文件的存在就可以重新填充收件箱。实例2依赖邮箱文件的备份数据库的存在,来决定哪些文档会被安放在收件箱里面。

注意:从任何视图或者文件夹中删除一个文档,都将会使该文档完全从数据库中被删除。

*非常重要*:在继续下面步骤之前,备份您的邮箱文件。

注意:下面的样例脚本只是用来展现处理这个问题的一种方式。直接按照它们来使用,您需要承担由此带来的风险。为了使这些示例工作如预期所愿,这些脚本在被使用时必须和下面展现的一致。Lotus 产品支持人员不能为特定的环境或者应用程序定制这些脚本。

实例1:不需要一个之前就存在的备份数据库
这个脚本代理将所有不在任何一个文件夹里面的文档移动到收件箱。这也就意味着,一些只存在于“所有文档”视图里面的文档也会被移动,包括 Profile 文档和 Organizer Setup 文档。当操作完成后,选定这些文档然后选择 操作 --> 移出文件夹。

* 此代理应该被设计成运行在“操作目标”为“无”的情况下。

* 此脚本构建一个文档的数组,包含所有在任何文件夹中的文档。之后,它将“所有文档”视图中的每一个文档和数组中的每一个文档比较。

* 如果此脚本发现一个匹配的,它就将其区分开并开始下一个文档的比较。

* 如果它运行到数组的尾部,那么它就把没有找到匹配的文档移到收件箱文件夹。

Sub Initialize
Dim s As New notessession
Dim db As notesdatabase
Dim fDoc As NotesDocument  ' Document in folder
Dim ad As notesview                 ' All Documents view
Dim aDoc As notesdocument  ' document in All Docs view
Dim fUNID() As String      ' array of UNID's of docs in folders
Dim i As Long              ' UNID array index
Dim deldate As notesitem
Dim Chair1 As notesitem

i =0
Set db = s.CurrentDatabase

Redim fUNID(0)

' Build UNID array by looping through folders, then their documents
Forall view In db.views
If view.IsFolder And Not view.Name=("($All)") Then
Set fDoc = view.GetFirstDocument
While Not fDoc Is Nothing
Redim Preserve fUNID(i)
fUNID(i) = fDoc.UniversalID
i=i+1
Set fDoc = view.GetNextDocument(fDoc)
Wend
End If
End Forall

' Loop through docs in the All Documents view and compare UNIDs to each doc in the array
Set ad = db.GetView("($All)")
Set aDoc = ad.GetFirstDocument
While Not aDoc Is Nothing
i = 0
Do While i <= Ubound(fUNID)
If fUNID(i) = aDoc.UniversalID Then
Exit Do
End If
i = i + 1
Loop
Set deldate = adoc.getfirstitem("delivereddate")
Set Chair1 = adoc.getfirstitem("CHAIR")
If i > Ubound(fUNID) And Not deldate Is Nothing And Chair1 Is Nothing Then
Call adoc.PutInFolder( "($Inbox)")
End If
Set aDoc = ad.GetNextDocument(adoc)
Wend
End Sub


实例2:需要一个之前就存在的邮箱文件的备份用来填充收件箱
这个代理遍历备份的邮箱文件的收件箱,然后定位同一文档在当前邮箱文件的位置,并将它们移入收件箱。如果备份的邮箱文件的某个文档没有在当前的邮箱文件中被发现,那么此代理就跳到下一个文档。

* 此代理应该被设计成运行在“操作目标”为“无”的情况下。

* 当前的邮箱文件必须有一个已经存在的收件箱文件夹,该文件夹是之前通过刷新或者替换邮箱文件的设计而生成的。

* 您必须编辑下面的代码来指定:

-- 备份的邮箱文件,调用 GetDatabase 方法,设置变量 "backup"。

-- 当前的邮箱文件,调用 GetDatabase 方法,设置变量 "db"。

(Declarations)
%INCLUDE "lsxbeerr.lss"

Sub Initialize
On Error lsERR_NOTES_BAD_UNID Goto processError
Dim s As New NotesSession
Dim db As NotesDatabase
Dim backup As NotesDatabase
Dim doc As NotesDocument
Dim bdoc As notesdocument
Dim view As NotesView
Set db = s.GetDatabase("Server/Org","mail.nsf")
Set view=db.GetView("($Inbox)")
If Not view Is Nothing Then
Set backup = s.GetDatabase("Server/Org","backup.nsf")
Set view = backup.GetView("($Inbox)")
Set bdoc= view.GetFirstDocument
While Not(bdoc Is Nothing)
Set doc = db.GetDocumentByUNID(bdoc.UniversalID)
Call doc.PutInFolder( "($Inbox)" )
getNextDocument:
Set bdoc = view.GetNextDocument(bdoc)
Wend
Exit Sub
processError:
Resume getNextDocument
Else
Messagebox "The mail file must have a Inbox folder in order to proceed. Refresh the design of the mail file and then rerun the agent"
End If
End Sub

注意: 此代理同样适用于从一个备份数据库中恢复文档到任一已经被删除的文件夹。您只需要修改代码,将 ($Inbox) 中引用的视图的名字改为真正的视图名字。

实例3: 运行 convert 任务(在一个特定的例子中成功)
如果您对一个没有 $Inbox 的邮箱文件运行 convert 任务(convert -u mail\username.nsf inotes6 inotes6.ntf) , convert 任务会替换设计并重新构建收件箱:

样例输出:
datetime Mail Convert: Finished replacing design template in 'mail/username.nsf'
datetime Mail Convert: Started converting categories to folders in 'mail/username.nsf'
datetime Mail Convert: Building a categorized view
datetime Mail Convert: Checking for the maximum number of categories
datetime Mail Convert:
Opening & repopulating existing folder '$Inbox'
datetime Mail Convert: Finished converting categories to folders in 'mail/username.nsf'


如果在收件箱中没有新邮件,那么有可能收件箱会持续处于损坏的状态。备份邮箱文件,删除收件箱文件夹,并且替换设计。这样可以给邮箱文件加上一个新的收件箱文件夹(这种情况下,它会是空的)。

相关信息

An US English translation is available


Document information

More support for: IBM Notes

Software version: 6.0, 6.5, 7.0, 8.0, 8.5

Operating system(s): Linux, Windows

Reference #: 1602338

Modified date: 16 July 2013


Translate this page: