#8335
Support 3
Participant

Please see below the source code of the “Quick Send” applet. You need to copy the source code and paste into an applet. You need the Formativ Creator or Studio (http://www.advansyscorp.com/formativ_framework.htm) to create and manage the applet. Please note, Advansys do not provide support for the example and cool solutions solution. Hope this helps.

'-------------------------------------------------------------------------------
' Formativ Solutions for GroupWise
' Quick Send
' Designed by: Formativ Business Solution Team
' Copyright (c) 2003 Advansys Pty Limited (www.advansyscorp.com)
' Version 1.0
' 
' DESCRIPTION:
' Sends one copy of the current open email message to each recipient email
' address stored in a flat text file.
' 
' 
' NOTES:
' - The text file must contain one email address per line. 
' - The email address must contain the '@' character.  The applet ignores 
'   address(s) not containing the '@' character.
' - Run the applet by pressing the button that appears on a composing email
'   message toolbar.
' - You must save the composing email message before you can run the applet.
' - The applet has been tested with GroupWise 6.5.1 and 6.0.2
' 
' 
' HISTORY:
' 19 June 2003 MA: Initial release
'
' 2006-08-08  MA 1.0.1
'     - Utilities.doevents added when sending and cloning messages.
'       We need to forces Windows to process any pending messages in the Windows application message queue
'       when sending large groups.
'-------------------------------------------------------------------------------


const IDS_CAPTION               = "Formativ Business Solutions"
const IDS_NO_MSG_VIEW           = "An error occurred while locating the saved message.  Close all message(s) views, then open the master draft message and run the applet again."
const IDS_SAVE_MSG              = "Please save the message (CTRL+S) and run the applet again to proceed."
const IDS_EMPTY_FILE            = "The selected recipients file is empty."
const IDS_CONFIRMATION          = " email messages will be generated.  Do you want to proceed?"
const IDS_MSG_BOX_TYPE          = "The message is not draft.  Please run the applet from a composing or draft message toolbar."
const IDS_INVALID_MSG           = "Unable to access the message.  Please save and close the message, then open the message and try again."
const IDS_FILE_SELECT_DLG       = "Select the address text file..."
const IDS_INVALID_ADDRESS       = "This file does not contains any valid email addresses."
const IDS_STATUS_INIT           = "Initializing...[Please wait]"
const IDS_STATUS_SEND           = "Sending Messages...[Please wait]"
const IDS_MESSAGES_SENT         = "Total messages sent: "

'-->Flexalock
dim gStatusDlg


'-------------------------------------------------------------------------------
' Main Line processing 
'-------------------------------------------------------------------------------
Sub Main(Client, GWEvent)
  
  dim iRecipientsList

  on error resume next
  
  set gStatusDlg = Utilities.NewStatusDialog
    
  iMessageID = GroupWise.ItemMessageIDFromView
  
  ' Do we have a valid message ID?
  if not IsValidMessageID(iMessageID) then
    exit sub
  end if  
  
    
  ' Find the message 
  set iMsg = groupwise.account.GetMessage(iMessageID) 
  
  ' Do we have the message object?
  if not isobject(iMsg) then
    gStatusDlg.hide
    call msgbox(IDS_INVALID_MSG, vbCritical, IDS_CAPTION)
    exit sub
  end if
  
  ' Make sure the message type is draft
  if (iMsg.BoxType <> fgwDraft) then
    gStatusDlg.hide
    call msgbox(IDS_MSG_BOX_TYPE, vbCritical, IDS_CAPTION)
    exit sub  
  end if

  set iRecipientsList = utilities.stringlist
  
  ' Select the addresses list file and validate the addresses  
  if not SelectRecipientsList(iRecipientsList) then
    exit sub
  end if
  
  gStatusDlg.hide
  
  ' Confirmation message box before sending the message to the recipients
  if (MsgBox (iRecipientsList.count & IDS_CONFIRMATION, vbOKCancel+vbInformation, IDS_CAPTION) = vbCancel) then
    exit sub
  end if
  
  
  ' Send messages
  call SendMessage(iRecipientsList, iMsg)  
  
  Set iMsg = nothing  
    
End Sub



'-------------------------------------------------------------------------------
' Send the message to the recipients
'-------------------------------------------------------------------------------
sub SendMessage(aList, aMsg)
  
  dim x
  dim iDlg
  dim iAddress
  dim iMasterMsg
  dim iCloneMsg
  dim iCounter
  dim iListBoxCtl
  dim iSentMsg
  dim iTotalMessages

  on error resume next
  iTotalMessages = 0

  if not isobject(aMsg) then
    exit sub
  end if
  
  if (aList.count = 0) then
    exit sub
  end if
  
  gStatusDlg.Title = IDS_STATUS_SEND
  gStatusDlg.ProgressRange = aList.count
  gStatusDlg.show  
    
  set iSentItemsList = utilities.stringlist

  utilities.doevents
  set iMasterMsg = aMsg.Clone
  
  set iDlg = Utilities.NewControlBoxDialog
  set iListBoxCtl = iDlg.AddListBoxControl   
  
  ' Clear all recipients if exists
  iCounter = iMasterMsg.Recipients.count
  if (iCounter > 0) then
    for x = 1 to iCounter
      iMasterMsg.Recipients.item(x).delete
    next
  end if
    
  
  
  ' Sending messages to each recipients
  for x = 0 to aList.count -1
    iAddress = trim(aList.strings(x))
    if (iAddress <> "") then

      'utilities.trace("iAddress: " & iAddress)

      ' Clone the message
      utilities.doevents
      set iCloneMsg = nothing
      set iCloneMsg = iMasterMsg.clone

      utilities.doevents
      call iCloneMsg.Recipients.add(iAddress)        
      
      ' Send the message
      set iSentMsg = nothing
      set iSentMsg = iCloneMsg.send
      
      ' Make sure we have send the message
      if (iSentMsg.MessageID <> "") then
        iListBoxCtl.items.add(iAddress)
      end if

      utilities.doevents
      iCloneMsg.delete

      if not iSentMsg is nothing then
        iTotalMessages = iTotalMessages + 1
        gStatusDlg.StatusText = IDS_MESSAGES_SENT & iTotalMessages
      end if

      set iSentMsg = nothing
      set iCloneMsg = nothing
      
    end if

    gStatusDlg.ProgressPosition = x
  next
  
  iMasterMsg.delete
  iMasterMsg.delete
  
  gStatusDlg.hide
  
  iDlg.Caption = IDS_CAPTION
  iDlg.title = iListBoxCtl.items.count & " messages sent to:"
  iDlg.Button2Visible = FALSE
  iDlg.execute
  
  set iMasterMsg = nothing
  
end sub




'-------------------------------------------------------------------------------
' Is the message ID is valid?
'-------------------------------------------------------------------------------
function IsValidMessageID(aID)

  IsValidMessageID = FALSE
    
  if (len(aID) = 0) then
    exit function
  end if
        
  if (instr(1, aID, "Token failed execution", 1) <> 0) then
    gStatusDlg.hide
    call msgbox(IDS_NO_MSG_VIEW, vbExclamation, IDS_CAPTION)  
    exit function
  end if

  if (aID = "X00") then
    gStatusDlg.hide
    call msgbox(IDS_SAVE_MSG, vbExclamation, IDS_CAPTION)
    exit function
  end if
  
  IsValidMessageID = TRUE 
  
end function



'-------------------------------------------------------------------------------
' Select the recipients list file and make sure the contents are valid
'-------------------------------------------------------------------------------
function SelectRecipientsList(byref aList)
  
  aList.clear
  SelectRecipientsList = FALSE
  
  dim iFileCTL
  
  ' Display file select dialog
  Set iFileCTL = Utilities.NewOpenFileDialog
  iFileCTL.Title = IDS_FILE_SELECT_DLG
   iFileCTL.Filter = "Text File (*.txt)|*.TXT"
 
  gStatusDlg.hide
  
  ' Execute the file select dialog
  if not iFileCTL.execute then
    exit function
  end if
    
  dim x
  dim iAddress
  dim iTempList
  
  set iTempList = utilities.stringlist
  iTempList.LoadFromFile(iFileCTL.Filename)

  gStatusDlg.Title = IDS_STATUS_INIT
  gStatusDlg.ProgressRange = iTempList.count
  gStatusDlg.show  
    
  if (iTempList.count = 0) then
    gStatusDlg.hide
    call msgbox(IDS_EMPTY_FILE, vbExclamation, IDS_CAPTION)  
    exit function
  end if
  
  
  ' Validate the address(s). 
  ' - Make sure we have @ characters in the address
  ' - Do not include duplicate address
  for x = 0 to iTempList.count -1
    iAddress = iTempList.strings(x)
    if (instr(1, iAddress, "@", 1) <> 0) and (len(iAddress) > 1) and (aList.indexof(iAddress) = -1) then
      aList.add(iAddress)
    end if
    gStatusDlg.ProgressPosition = x
  next
     
  
  ' Do we have any address(s) after validate? 
  if (aList.count = 0) then
    gStatusDlg.hide
    call msgbox(IDS_INVALID_ADDRESS, vbExclamation, IDS_CAPTION)  
    exit function  
  end if
  
  SelectRecipientsList = TRUE
  
end function  

Regards,
Advansys Support