Usability - Productivity - Business - The web - Singapore & Twins

Last usage of a mail file - for all users

My admin is getting a little rusty. When I was asked: " How can I indentify a dormant mailbox?" I couldn't name a place in admin where to look. Of course, there is the NotesDatabase.LastModified property, but that would get updated on a design refresh too. So I asked innocently: " dormant, how?" After an amusing 2 hour discussion between the stake holders (only the popcorn was missing) we concluded that it is either
  • No document has been created for a while (including incoming)
  • No email has been sent for a while
Calendar entries or todo were not part of the consideration, but that's just a question in what view you look. For "any" document it is ($All) and for sent documents ($Sent). The LotusScript code is just a few lines. I needs to be run, so it can access all mailboxes.You can do that in Full-Admin mode or run it with the server id. Important: all servers need to be reachable. Of course the code could be modified to run on the current server only and to send a (MIME) message instead of writing a file. Anyway here you go:
Option Public
Option Declare

Sub Initialize
	Dim s As New NotesSession
	Dim allAdr As Variant
	Dim out As NotesStream
	Dim nab As NotesDatabase
	Set out = s.Createstream()
	'change this - you could write into
	'an eMail or a database or or or
	allAdr = s.Addressbooks
	ForAll oneDB In allAdr
		Set nab = oneDB
		Call recordUsers(out, nab)
	End ForAll
	Call out.Close()
End Sub

Sub recordUsers(out As NotesStream, nab As NotesDatabase)
	On Error GoTo Err_recordUsers
	Dim userView As NotesView
	Set userView = nab.Getview("People")
	If userView Is Nothing Then
		Call out.Writetext("No user view in "+nab.Filepath, EOL_PLATFORM)
		GoTo Exit_recordUsers
	End If
	Dim doc As NotesDocument
	Dim MailServer As String
	Dim MailFile As String
	Dim FullName As String
	Set doc = userView.Getfirstdocument()
	Do Until doc Is Nothing
		'Check for the fields
		If doc.Hasitem("FullName") Then
			FullName = doc.Getitemvalue("FullName")(0)
			If Not doc.Hasitem("MailServer") Or Not doc.Hasitem("MailFile") Then
				Call out.Writetext("No entry for user "+fullName)
				MailServer = doc.Getitemvalue("MailServer")(0)
				MailFile = doc.Getitemvalue("MailFile")(0)
				Call out.Writetext(fullName+", ",EOL_NONE)
				Call fetchLastDocumentDate(out, MailServer, MailFile)
			End If
		End If
		Set doc = userView.Getnextdocument(doc)
	Exit Sub
	MsgBox Error$
	Resume Exit_recordUsers
End Sub

Sub fetchLastDocumentDate(out As NotesStream, MailServer As String, MailFile As String)
	Dim s As New NotesSession
	Dim nsf As NotesDatabase
	Dim v As NotesView
	Dim doc As NotesDocument
	Set nsf = s.Getdatabase(MailServer, MailFile)
	If Not nsf.Isopen Then
		Call nsf.Open("", "")
	End If
	If Not nsf.Isopen Then
		Call out.Writetext("can't open "+MailFile, EOL_PLATFORM)
		Set v = nsf.Getview("$All") 'Change this if your definition of dormant is different
		Set doc = v.Getlastdocument()
		Call out.Writetext(CStr(doc.Created), EOL_PLATFORM)
	End If
	Exit Sub
	Call out.Writetext(Error$, EOL_PLATFORM)
	Resume Err_fetchLastDocumentDate
End Sub

As usual YMMV

Posted by on 21 November 2014 | Comments (4) | categories: IBM Notes


  1. posted by Lars Olufsen on Monday 24 November 2014 AD:
    Brilliant, Stephan. Thanks for sharing!
  2. posted by david on Tuesday 25 November 2014 AD:
    The problem with this approach is that if a spam, newsletter, or a group mail (sent to the whole company for example) has been received in this mailbox it will not be flagged as dormant. We wrote some code to identify inactive mailboxes by going through the db activity instead although that is not straight forward as we had to use API and run this from a machine with a notes client
  3. posted by Stephan H. Wissel on Tuesday 25 November 2014 AD:
    Yes. Incoming emails will keep that account alive. This is why the alternative of using the ($Sent) view is interesting.
  4. posted by Harris Huckabee on Saturday 23 July 2016 AD:
    Thanks, Stephan. I am using both $Sent and $All... I'll let the project people make the call on what they consider dormant.