I found this idea on IdeaJam today. There have been several questions regarding scheduled mails in almost all Lotus Notes related forums in the past years and as far as I recall, Breaking Par has had a solution for this.
Although I do not see any business case for this feature, I like the idea. And yes, Notes cannot do this out of the box. But let’s see, if we can find a solution. As I commented, you can use Trigger Happy to achieve the goal. The solution only needs minor changes on the mail template.
I use Notes and Domino 8.0.1 but the agent code and the modification might work on every other Notes version. I assume that you already have Trigger Happy installed on your server.
Create two new fields in the DelOptions subform. DeliveryDate and DeliveryTime.
and save the subform.
Create an new agent in the triggerhappy.nsf and copy the following code into the agent:
'Agent ScheduledMails
'++Options
Option Public
Option Explicit
'++ Declarations
Const SCHEDULED_MAILS = {@IsAvailable("DeliveryDate") & RoutingState="HOLD"}
Sub Initialize
On Error Goto processError
Dim session As New NotesSession
Dim doc As NotesDocument
Dim item As NotesItem
Dim Scheduled As String
Dim dtNow As New NotesDateTime(Now)
Dim mailbox As New NotesDatabase ( "Serv01/singultus","mail.box" )
Dim col As NotesDocumentCollection
Dim i As Integer
'** make sure we don't mess up the rich text fields stored as MIME
session.ConvertMime = False
Set doc = session.DocumentContext
'** check new mails
If doc.HasItem("DeliveryDate") And (Not doc.HasItem("RoutingState" )) Then
If Trim(doc.DeliveryDate(0)) <> "" Then
Scheduled = _
"Message delivery scheduled: " _
& Cstr(doc.DeliveryDate(0)) & " " & Cstr(doc.DeliveryTime(0))
Print scheduled
doc.RoutingState = "HOLD"
doc.FailureReason = Scheduled
Call doc.save(False,False)
End If
End If
'** scheduled mails to deliver ?
If mailbox.IsOpen() Then
Set col = mailbox.Search(SCHEDULED_MAILS,Nothing,0)
Set doc = col.GetFirstDocument
While ( Not doc Is Nothing )
Dim dtSched As New NotesDateTime _
( Cstr(doc.DeliveryDate(0)) & " " & Cstr(doc.DeliveryTime(0)) )
If dtSched.localtime <= dtNow.LocalTime Then
Call doc.RemoveItem ("RoutingState")
Call doc.RemoveItem ("FailureReason")
Call doc.Save(False,False)
End If
Set doc = col.GetNextDocument(doc)
Wend
End If
session.ConvertMime = True
Exit Sub
processError:
'** use your favorite error logging routine here
Exit Sub
End Sub
Create a trigger in the configuration database.
and save it. Every time, a new mail arrives in the mail.box, the agent is invoked. It checks the new mail, if it has a DeliveryDate item and if the item contains a value.
If so, the RoutingState is set to HOLD. The router will stop to deliver the mail. The second step is to check if the the delivery date and time is reached. If so, the agent removes the RoutingState field from the document and the router will process the document and deliver it.
The FailureReason column contains a hint that the mail is scheduled.
Really good tip! Often requested indeed!
You can actually send a scheduled email with Lotus Notes out-of-the-box, as follows:
Create a reminder in your calendar at the needed time and date. Give it the desired subject and body (including attachments, if necessary). Under the “Notify Me” options, select “Send mail notification”, and enter the neccessary recipients.
It will prepend “Alarm:” to the subject and provide a link to the calendar entry, neither of which may be desirable in your setting; but it does do the job.
Like Volker said: Just post that Notes can’t do this ( http://vowe.net/archives/009460.html ) and you will have some good tips to show that Notes can do what you want to do.
@Todd: Thank you for your tip! 🙂
Hello Ulrich,
this “feature” has been implemented by a very big “German Bank” in their old R4 mail template in the late 90’s.
But not so smart as you did… 😉
Yours, René
Hi,
since i got a lot of time today at work (yes i work between the years) i tried this on our 7.0.3 servers.
The first thing i ran to is that i need a dedicated agent for each mailX.box (we have 4 on each server). so this might be a small problem for admins. don’t forget to:
– add an extra line in notes.ini at the end when adding it as a new parameter
– disable agent trigger in the agent itself
what i also found out is that the date-header in the outgoing smtp-mail is not altered, so in my tests the date and time of mail-creation (not mail delivery) is shown.
and i need to add some code for:
– delivery notice to sender, when message is delivered
– delivery time hint in sent messages (like follow up)
but if you can help me i would be very happy 🙂
Steffen