Manage Learn to apply best practices and optimize your operations.

Good mail forwarding agent

This agent copies a new e-mail, strips the CC and BCC fields), inserts the original "Send to" field and then sends the e-mail to any e-mail address specified.

View member feedback to this tip.

The following agent makes a copy of a new e-mail, strips it of the CC and BCC fields (to prevent duplicate e-mails to people), inserts the original "Send to" field and then sends the e-mail to any e-mail address specified. This lets a user see who the original sender is. Otherwise, if you're forwarding e-mails to a handheld, the "From" field will always be you.

This new e-mail will also contain a "Header" that gives the user additional information (original recipient, recipients who were copied on the original e-mail, etc.)

This agent must run on the "Before New Mail Arrives" event. Also, set the runtime security level to "2."

Have fun.

Sub Initialize
 Dim s As New NotesSession
 Dim db As NotesDatabase
 Dim doc As NotesDocument
 Dim forward As NotesDocument
 Dim forwardaddress As String
 Dim rtitem As NotesRichTextItem
 Dim rtnav As NotesRichTextNavigator
 
 forwardaddress = "recipient@test.com"
 'set to the address that you would like 
to forward mail to
 Set db = s.currentdatabase
 Set doc = s.DocumentContext
 
 Set forward = New NotesDocument(db)
 Call doc.CopyAllItems(forward, True)
 Set rtitem = forward.GetFirstItem( "Body" )
 Dim newtext As String
 
 Set rtnav = rtitem.CreateNavigator
 Call rtnav.FindFirstElement(RTELEM_
TYPE_TEXTPARAGRAPH) 'navigation element in 
order to place header in front of body text
 
 Dim nn As New NotesName(doc.
GetItemValue("From")(0)) 'determines if this is 
an internal message or not
 Dim cc As New NotesName(doc.
GetItemValue("CopyTo")(0))  
 Dim sto As New NotesName(doc.
GetItemValue("SendTo")(0)) 
 
 
'Set up a header that will be attached 
to the email which specifies additional 
info about the original email
 Dim testcopy As String
 If doc.GetItemValue("CopyTo")(0) = "" Then
  testcopy = "no one."
 Else
  
  Forall x In doc.GetItemValue("CopyTo")
   If testcopy = Null Then
    testcopy = x
   Else
    testcopy = testcopy + x + ", "
   End If
   
  End Forall
  
 End If
 
 
 If nn.IsHierarchical Then 'if it is then get 
their internet address
  If nn.Addr821 <> Null Then 'if they 
have one then use this as the from 
address
   
   Call rtitem.BeginInsert(rtnav)
   Call rtitem.AddNewLine( 1 )
   Call rtitem.AppendText( "Original message 
sent to " + sto.Addr821 + " and 
copies were sent to " + testcopy)
   Call rtitem.AddNewLine( 3 )
   Call rtitem.EndInsert
   
   Call forward.RemoveItem("CopyTo")
   Call forward.RemoveItem("BlindCopyTo")
   Call forward.ReplaceItemValue
("From", nn.Addr821)
   Call forward.Save( True, True )
   
  Else
   Call rtitem.BeginInsert(rtnav)
   Call rtitem.AddNewLine( 1 )
   Call rtitem.AppendText( "Original message 
sent to " + sto.Addr821 + " and 
copies were sent to " + testcopy)
   Call rtitem.AddNewLine( 3 )
   Call rtitem.EndInsert
   
   Call forward.RemoveItem("CopyTo")
   Call forward.RemoveItem("BlindCopyTo")
   Call forward.ReplaceItemValue("iNetFrom",
 nn.Addr821)
   Call forward.Save( True, True )
  End If 'otherwise if this is an internal
 message and the internet address of 
that user is not populated, use the agent 
signer's return address
 Else 
  Call rtitem.BeginInsert(rtnav)
  Call rtitem.AddNewLine( 1 )
  Call rtitem.AppendText( "Original message 
sent to " + doc.GetItemValue
("SendTo")(0) + " and copies were sent to " 
+ testcopy)
  Call rtitem.AddNewLine( 3 )
  Call rtitem.EndInsert
  
  Call forward.RemoveItem("CopyTo")
  Call forward.RemoveItem("BlindCopyTo")
  Call forward.ReplaceItemValue("iNetFrom", 
doc.GetItemValue("From")
(0)) 'otherwise this came in from the internet, 
so just use the from address 
as the inetfrom
  Call forward.Save( True, True )  
 End If
 forward.Send False, forwardaddress 
 Call forward.RemovePermanently(True)
 
End Sub

MEMBER FEEDBACK TO THIS TIP

It's a great script, but is there a possibility to forward without an attachment?

—Ronald V.

******************************************

I haven't tested this, but this may work with a little modification. This routine checks for embedded objects and then deletes them.

  If forward.HasEmbedded Then 
    Forall x In forward.EmbeddedObjects 
      call x.remove 
    End Forall 
  Else

—Steve Pitcher, tip author

Do you have comments on this tip? Let us know.

This tip was submitted to the SearchDomino.com tip exchange by member Steve Pitcher. Please let others know how useful it is via the rating scale below. Do you have a useful Notes/Domino tip or code to share? Submit it to our monthly tip contest and you could win a prize and a spot in our Hall of Fame.

This was last published in December 2004

Dig Deeper on LotusScript

Join the conversation

1 comment

Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.

Can I adapt this to a Journaling Database? I need to journal specific messages coming into the mail.box and then copy or forward them to a secondary database. Any help is appreciated.
Cancel

-ADS BY GOOGLE

SearchWindowsServer

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchDataCenter

SearchExchange

SearchContentManagement

Close