#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