以下是从Lotus Notes字母中提取附件的工作脚本:
Dim s
s = 1
Do
s = s + 1
Dim Session
Dim Maildb
Dim view
Dim vc
Dim doc
Dim Item
Dim coll
Dim x
Dim Sender
Dim sentTo
Dim viewTimer
Dim ws
Dim Source
Set Session = CreateObject("Lotus.NotesSession")
Call Session.Initialize("password")
Set Maildb = Session.GetDatabase("DOMAIN/Servers/Server-Name/RU", "GroupMail\mailbox.nsf")
Set view = Maildb.GetView("($inbox)")
If Not Maildb.IsOpen = True Then
Call Maildb.Open
End If
With view
x = 0
ReDim LmailID(x)
ReDim HasAttach(x)
Set doc = .GetFirstDocument
If doc Is Nothing Then
else
Call doc.PutInFolder("Processed")
Call doc.Removefromfolder("($inbox)")
Do
fileNames = Session.Evaluate("@AttachmentNames", doc)
For Each Filename In fileNames
Sender = doc.GETITEMVALUE("From")(0)
strSearchForSpecificName = "SpecificName"
If InStr(1, Sender, strSearchForSpecificName) > 0 then
sentTo = "SpecificName@mail.ru"
else
sentTo = Sender
End If
If Filename <> "" Then
Call doc.Save( False, False, True )
Set NotesEmbeddedObject = doc.GetAttachment(FileName)
NotesEmbeddedObject.ExtractFile ("d:\#files\" + Right("0" & Month(Now), 2) & "-" & Right("0" & Day(Now), 2) & "-" & Year(Now) & "-" & Hour(Time) & Minute(time) & Second(time) & "_" & Filename)
Set reply = doc.CreateReplyMessage( False )
Call reply.replaceItemValue("SendTo", sentTo)
Call reply.replaceItemValue("CopyTo", "copy@mail.ru")
Call reply.replaceItemValue("Subject", "Re: " & "файл " + Filename + " передан в обработку " + Right("0" & Month(Now), 2) & "-" & Right("0" & Day(Now), 2) & "-" & Year(Now) & Hour(Time) & ":" & Minute(time) & ":" & Second(time))
doc.SaveMessageOnSend = True
Call reply.Send( False )
End If
Next
x = x + 1
ReDim Preserve LmailID(x)
Set doc = .GetNextDocument(doc)
Loop Until doc Is Nothing
End If
End With
Wscript.Sleep (30 * 1000)
Set Session = Nothing
Set Maildb = Nothing
Set view = Nothing
Set vc = Nothing
Set doc = Nothing
Set Item = Nothing
Set coll = Nothing
Set x = Nothing
s = s - 1
Loop While s > 0
问题是我有时会收到错误:错误:&#34;索引中找不到条目......&#34;程序停在设置doc = .GetNextDocument(doc)行。 有没有解决此错误的解决方案?
答案 0 :(得分:1)
问题很简单:文档已从收件箱中删除,因此不再在索引中。如果其中一个条件成立,则会发生这种情况:
尽管如此,在你的代码中有很多&#34;废话&#34; (遗憾地说),很容易修复此代码:
只需使用这样一个事实,即视图对象可以更新为优势并更改为&#34; getfirstdocument&#34;一直以来:
更改此行:
Set doc = .GetNextDocument(doc)
这些行:
Call .Refresh()
Set doc = .GetFirstDocument
这是做什么的:Refresh
从视图中删除当前处理的文档。 &#34;下一个&#34;文档将是第一个在视图中。你得到的那个,直到没有更多&#34;第一个&#34;文件...
并且:理查德是对的。您需要将Call doc.PutInFolder("Processed")
Call doc.Removefromfolder("($inbox)")
下面的两行移动Do
,以便将所有文档移动到该文件夹而不仅仅是第一个文件夹。
答案 1 :(得分:1)
您的代码正在从$ Inbox中删除第一个文档,因此它不能用作获取$ Inbox中下一个文档的锚点。解决方案通常是确保在删除当前文档之前获取下一个文档。即,改变
Call doc.PutInFolder("Processed")
Call doc.Removefromfolder("($inbox)")
到
Call doc.PutInFolder("Processed")
set nextDoc = .getNextDocument(doc)
Call doc.Removefromfolder("($inbox)")
并更改
Set doc = .GetNextDocument(doc)
到
set doc = nextDoc
但是,使用putInFolder和RemoveFromFolder调用的代码实际上并不在循环内,因此只有您处理的第一个文档将被移动到Processed文件夹,并且在循环的第一次迭代后将无法正确设置nextDoc。如果你真的只想将第一个文件移动到Processed文件夹,那么上面的解决方案仍然是正确的,因为你只需要在循环外设置一次nextDoc,你就会有一个无限循环,因为你永远都是将doc设置为相同的nextDoc值。循环中需要另一个nextDoc = getNextDocument(doc)
实例。如果您确实希望将所有文档移动到Processed文件夹,那么您只需要移动整个代码块来处理文件夹和将nextDoc分配到循环内部。