MAIL-Func

 

 

NOTE - Use your Browsers BACK Button to return to prior page.
OR Click either FUNCTIONS or TECHNIQUES to return to that MENU.

   Sending EMail in the Windows 95/98/NT Environment (using BLAT)
Zelephant.jpg (20358 bytes) Most information on sending eMail thru SQR seems to be in the Unix environment. I did some research yesterday and finally found a pretty nice command line send utility for Windows. It's a FreeWare product called BLAT. On this page you'll find how to obtain BLAT, a demo SQR and Mail/BLAT API routines (SQC)... ...PLUS an elephant and a camel.

The one thing I really like about BLAT is that it's a no-frills product. There is no
fancy GUI interface to mess around with... it's strictly a command-line utility...
the installation instructions are very simple... and it seems to work very well with
SQR in the Windows environment... one more thing - it's FREE!

Because BLAT was an open-source product it has been developed by a group of people.
See the sites below for more information including history, download, credits, usage, etc.

Also note, no parties assume responsibility for the use of this software. For that matter
I also assume no responsibility or liability for any of the material on this site. As is the
case with all FreeWare - use at your own risk!

See   http://gepasi.dbs.aber.ac.uk/softw/Blat.html
OR    http://www.interlog.com/~tcharron/blat.html

   User Prompts for TDMAIL.SQR Demo Program

Enter Subject Line:

        (or ENTER)... Default subject = 'TDMAIL Test'.

Enter Organization:

        (or ENTER)... This is OPTIONAL.

Enter Recipient Address <or ENTER to break>:

        Builds comma-delimited Recipient List (one address at a time)... REQUIRED.

Enter CC Address <or ENTER to break>:

        Builds comma-delimited CC List (one address at a time)... OPTIONAL.

Enter BCC Address <or ENTER to break>:

        Builds comma-delimited BCC List (one address at a time)... OPTIONAL.

Enter TDMAIL (SQR/SQC) directory (i.e. c:\sqr\):

        Enter directory where you placed TDMAIL.SQR / TDMAIL.SQC
        (Since the DEMO sends these as multiple attachments).

   TDMAIL.SQR - DEMO Program Source code
!**********************************************************************
!*                                                                    *
!*       MODULE: TDMAIL.SQR                                           *
!*       AUTHOR: TONY DELIA.                                          *
!*         DATE: 02/07/2001.                                          *
!*       SYSTEM: TD SQR UTILITY SERIES.                               *
!*         DESC: DEMO - SEND E-MAIL (FROM WINDOWS USING "BLAT").      *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*         NOTE: This demo will send TDMAIL.SQR and TDMAIL.SQC as     *
!*               multiple attachments. A message text file is also    *
!*               produced and sent as the body of the message.        *
!*                                                                    *
!*               To successfully execute this demo you will need to   *
!*               obtain and install the freeware software "BLAT".     *
!*               See TDMAIL.SQC for details.                          *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*      PROMPTS: Subject Line.                                        *
!*               Organization.                                        *
!*               Recipient List  (one at a time)           REQUIRED   *
!*               CC List         (one at a time)                      *
!*               BCC List        (one at a time)                      *
!*               Directory where TDMAIL (SQR/SQC) resides. REQUIRED   *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*        LEGAL:  CONFIDENTIALITY INFORMATION.                        *
!*                                                                    *
!*                This module is the original work of Tony DeLia. It  *
!*                can be considered ShareWare under the following     *
!*                conditions.                                         *
!*                                                                    *
!*                A - The author's name (Tony DeLia) remains on any   *
!*                    and all versions of this module.                *
!*                B - Any modifications must be clearly identified.   *
!*                C - A "vanilla" copy of this module must be kept    *
!*                    alongside any revised versions.                 *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*      WEBSITE:  http://www.sqrtools.com                             *
!*                                                                    *
!*                Questions/Comments: tdelia@erols.com                *
!*                                                                    *
!**********************************************************************

!**********************************************************************
!*       Mainline Processing                                          *
!**********************************************************************

begin-report

  do Set-Defaults
  do Build-Message
  do User-Prompts
  do Process-Main

end-report

!**********************************************************************
!*       Set Defaults                                                 *
!**********************************************************************

begin-procedure Set-Defaults

let $ReportId     = 'TDMAIL'
let $ReportTitle  = 'SEND EMAIL USING BLAT'

display $ReportId    noline
display ' '          noline
display $ReportTitle
display ' '

end-procedure

!**********************************************************************
!*       Process Main                                                 *
!**********************************************************************

begin-procedure Process-Main

do MAIL-Func-Init()

do MAIL-Func-Parm('SUBJECT',      $RC_subject)
do MAIL-Func-Parm('RECIPIENT',    $RC_to)
do MAIL-Func-Parm('ORGANIZATION', $RC_org)
do MAIL-Func-Parm('CC',           $RC_cc)
do MAIL-Func-Parm('BCC',          $RC_bcc)
do MAIL-Func-Parm('ATTACH',       $RC_sqr)
do MAIL-Func-Parm('ATTACH',       $RC_sqc)

do MAIL-Func-Info()

do MAIL-Func-Send($O_file, #BLAT_status)

show 'Status: ' #BLAT_status

end-procedure

!**********************************************************************
!*       User Prompts                                                 *
!**********************************************************************

begin-procedure User-Prompts

let $RC_to          = ''
let $RC_subject     = ''
let $RC_org         = ''
let $RC_cc          = ''
let $RC_bcc         = ''
let $RC_dir         = ''
let $RC_sqr         = ''
let $RC_sqc         = ''

input $RC_subject 'Enter Subject Line'

if  $RC_subject     = ''
    let $RC_subject = 'TDMAIL Test'
end-if

input $RC_org     'Enter Organization'

do Enter-List('TO',  $RC_to)
do Enter-List('CC',  $RC_cc)
do Enter-List('BCC', $RC_bcc)

!  Enter directory where TDMAIL.SQR/TDMAIL.SQC resides

while $RC_dir       = ''

   input $RC_dir  'Enter TDMAIL (SQR/SQC) directory (i.e. c:\sqr\)'

end-while

let #len            = length($RC_dir)
if  substr($RC_dir, #len, 1)  <> '\'
    let $RC_dir     = $RC_dir || '\'
end-if

let $RC_sqr         = $RC_dir || 'tdmail.sqr'
let $RC_sqc         = $RC_dir || 'tdmail.sqc'

end-procedure

!**********************************************************************
!*       Enter List (One Entry at a time)                             *
!**********************************************************************
!*       This routine builds a comma-delimited list (no validation).  *
!**********************************************************************

begin-procedure Enter-List($I_type, :$O_list)

let $O_list = ''

let $c      = ''

while 1 = 1

   evaluate $I_type

      when = 'TO'

         input $addr 'Enter Recipient Address <or ENTER to break>'

      when = 'CC'

         input $addr 'Enter CC Address <or ENTER to break>'

      when = 'BCC'

         input $addr 'Enter BCC Address <or ENTER to break>'

      when-other

         input $addr 'Enter eMail Address <or ENTER to break>'

   end-evaluate

   if  $addr   = ''
       break
   end-if

   let $O_list = $O_list || $c || $addr

   let $c      = ','

end-while

end-procedure

!**********************************************************************
!*       Build Message                                                *
!**********************************************************************

begin-procedure Build-Message

let #O_no    = 1
let $O_file  = 'c:\temp\tdmail.txt'

open $O_file as #O_no for-writing record=1024:vary status=#O_stat

if  #O_stat <> 0

    show ' '
    show 'Output file Error: ' $O_file
    show ' '
    stop

end-if

!   Build Sample E-Mail Message

let $L01 = 'This is a test email message sent thru SQRW.'
let $L02 = 'It uses a freeware product called BLAT to send'
let $L03 = 'a message as well as attachments.'
let $L04 = 'The custom function library TDMAIL.SQC contains the'
let $L05 = 'necessary routines plus information on obtaining'
let $L06 = 'a copy of the BLAT executable and support files.'
let $L07 = 'I guess that does it... good luck...'
let $L08 = ' '
let $L09 = 'Regards,'
let $L10 = '   Tony DeLia'
let $L11 = ' '
let $L12 = 'PS - Please take a moment to fill out this survey: '
let $L13 = ' '
let $L14 = 'Place an X next to all applicable items.'
let $L15 = ' '
let $L16 = '___ This test failed miserably.'
let $L17 = '___ I received this email.'
let $L18 = '___ I received the attachment TDMAIL.SQR'
let $L19 = '___ I received the attachment TDMAIL.SQC'
let $L20 = '___ I am very impressed by all this.'
let $L21 = ' '

write #O_no from $L01
write #O_no from $L02
write #O_no from $L03
write #O_no from $L04
write #O_no from $L05
write #O_no from $L06
write #O_no from $L07
write #O_no from $L08
write #O_no from $L09
write #O_no from $L10
write #O_no from $L11
write #O_no from $L12
write #O_no from $L13
write #O_no from $L14
write #O_no from $L15
write #O_no from $L16
write #O_no from $L17
write #O_no from $L18
write #O_no from $L19
write #O_no from $L20
write #O_no from $L21

close #O_no

end-procedure

!**********************************************************************
!*       Include Members:                                             *
!**********************************************************************

#Include 'tdmail.sqc'    !SQR Mail Send Functions (using BLAT)

!**********************************************************************
!*       End of Program                                               *
!**********************************************************************
               

 

   TDMAIL.SQC - Send Mail API (using BLAT)
!**********************************************************************
!*                                                                    *
!*       MODULE: TDMAIL.SQC                                           *
!*       AUTHOR: TONY DELIA.                                          *
!*         DATE: 02/07/2001.                                          *
!*       SYSTEM: TD SQR UTILITY SERIES.                               *
!*         DESC: SEND E-MAIL USING BLAT.                              *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*        LEGAL:  CONFIDENTIALITY INFORMATION.                        *
!*                                                                    *
!*                This module is the original work of Tony DeLia. It  *
!*                can be considered ShareWare under the following     *
!*                conditions.                                         *
!*                                                                    *
!*                A - The author's name (Tony DeLia) remains on any   *
!*                    and all versions of this module.                *
!*                B - Any modifications must be clearly identified.   *
!*                C - A "vanilla" copy of this module must be kept    *
!*                    alongside any revised versions.                 *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*      WEBSITE:  http://www.sqrtools.com                             *
!*                                                                    *
!*                Questions/Comments: tdelia@erols.com                *
!*                                                                    *
!**********************************************************************

!**********************************************************************
!*       Build MAIL Array                                             *
!**********************************************************************
!*                                                                    *
!*       See MAIL-Func-Init for Initialization.                       *
!*       See MAIL-Func-Parm for Parm Assignment.                      *
!*       See MAIL-Func-Send for Send Mail.                            *
!*       See MAIL-Func-Info for Parm Display.                         *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*        BLAT:  The following SQR procedures send email using a      *
!*               FreeWare Product called BLAT. It is ideal for        *
!*               sending command-line email messages/attachments      *
!*               from the Windows environment.                        *
!*                                                                    *
!*               These routines were tested using Blat 1.8.2b         *
!*               You can download this version at:                    *
!*                                                                    *
!*               http://gepasi.dbs.aber.ac.uk/softw/Blat.html         *
!*                                                                    *
!*               You can also find information on BLAT at:            *
!*                                                                    *
!*               http://www.interlog.com/~tcharron/blat.html          *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*     EXAMPLE:  #define MAIL_path c:\winnt\system32\                 *
!*               ...                                                  *
!*               do MAIL-Func-Init()                                  *
!*               ...                                                  *
!*               do MAIL-Func-Parm('RECIPIENT',   'tdelia@erols.com') *
!*               do MAIL-Func-Parm('SUBJECT',     'MAIL Test')        *
!*               do MAIL-Func-Parm('ORGANIZATION','ABC Company')      *
!*               do MAIL-Func-Parm('CC',          'jsmith@abc.com')   *
!*               do MAIL-Func-Parm('BCC',         'tjones@xyz.com')   *
!*               do MAIL-Func-Parm('FROM',        'fake@alias.com')   *
!*               do MAIL-Func-Parm('ATTACH',      'c:\temp\joke.txt') *
!*               do MAIL-Func-Parm('-noh',        ' ')                *
!*               ...                                                  *
!*               do MAIL-Func-Send('c:\temp\msg.txt', #M_stat)        *
!*               ...                                                  *
!*               if #M_stat <> 0                                      *
!*                  do MAIL-Func-Info()                               *
!*               end-if                                               *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*       NOTES:  Use the MAIL_path substitution variable to point     *
!*               to your directory containing BLAT.EXE.               *
!*               c:\windows\system\ is the default location.          *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*       USAGE:  Below are flags, synonyms and descriptions.          *
!*               See BLAT Documentation for furthur details including *
!*               installation procedure.                              *
!*                                                                    *
!*       FLAG       SYNONYM(S)    DESCRIPTION                         *
!*       ---------  ------------  ----------------------------------  *
!*       -t         RECIPIENT     Recipient List (comma seperated).   *
!*       -t         TO            Same as 'recipient'.                *
!*       -s         SUBJECT       Subject Line.                       *
!*       -o         ORGANIZATION  Organization.                       *
!*       -o         ORG           Same as 'organization'.             *
!*       -c         CC            Copy List (comma seperated).        *
!*       -b         BCC           Blind Copy List (comma seperated).  *
!*       -f         SENDER        Sender Override (known to server).  *
!*       -i         FROM          From Override (any address here).   *
!*       -hostname  HOSTNAME      Hostname.                           *
!*       -hostname  HOST          Same as 'hostname'.                 *
!*       -attach    ATTACH        Binary File Attachment.             *
!*       -attach    BINARY        Same as 'attach'.                   *
!*       -attacht   ATTACHT       Text File Attachment.               *
!*       -attacht   TEXT          Same as 'attacht'.                  *
!*       -noh       NOH           Suppress BLAT URL in X-Mailer.      *
!*       -noh2      NOH2          Suppress Everything in X-Mailer.    *
!*       -server    SERVER        Mail Server.                        *
!*       -port      PORT          Port.                               *
!*       -mime      MIME          MIME.                               *
!*       -uuencode  UUENCODE      UUENCODE.                           *
!*       -base64    BASE64        BASE64.                             *
!*       ---------  ------------  ----------------------------------  *
!*                                                                    *
!**********************************************************************

!**********************************************************************
!*       MAIL-Array                                                   *
!**********************************************************************

begin-procedure MAIL-Array

#define MAILsize  30

create-array name=MAILmtx size={MAILsize} field=MAILflag:char      -
                                          field=MAILparm:char

let #MAILmax = {MAILsize} - 1
let #MAILctr = 0

end-procedure

!**********************************************************************
!*       MAIL-Func-Init - Initialize MAIL Parms                       *
!**********************************************************************
!*                                                                    *
!*        INPUT: n/a        - No input  parameters                    *
!*       OUTPUT: n/a        - No output parameters                    *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*     EXAMPLE:  See MAIL-Array procedure for examples.               *
!*                                                                    *
!**********************************************************************

begin-procedure MAIL-Func-Init()

clear-array name=MAILmtx

let #_MAILctr = 0

end-procedure

!**********************************************************************
!*       MAIL-Func-Parm - Load MAIL Parameters                        *
!**********************************************************************
!*                                                                    *
!*        INPUT: $I_flag    - MAIL Flag                               *
!*               $I_parm    - MAIL Parameter                          *
!*       OUTPUT: n/a        - No output parameters                    *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*     EXAMPLE:  See MAIL-Array procedure for examples.               *
!*                                                                    *
!**********************************************************************

begin-procedure MAIL-Func-Parm($I_flag, $I_parm)

if #_MAILmax = 0
   do MAIL-Array
end-if

let $I_flag  = rtrim($I_flag,' ')
let $I_parm  = rtrim($I_parm,' ')

!  Convert Synonyms to BLAT Flags

if  substr($I_flag,1,1) <> '-'

    uppercase $I_flag

    evaluate $I_flag

       when = 'TO'
       when = 'RECIPIENT'
          let $I_flag = '-t'

       when = 'SUBJECT'
          let $I_flag = '-s'

       when = 'ORG'
       when = 'ORGANIZATION'
          let $I_flag = '-o'

       when = 'CC'
          let $I_flag = '-c'

       when = 'BCC'
          let $I_flag = '-b'

       when = 'SENDER'
          let $I_flag = '-f'

       when = 'FROM'
          let $I_flag = '-i'

       when = 'HOST'
       when = 'HOSTNAME'
          let $I_flag = '-hostname'

       when = 'TEXT'
          let $I_flag = '-attacht'

       when = 'BINARY'

          let $I_flag = '-attach'

       when = 'ATTACH'
       when = 'ATTACHT'
       when = 'NOH'
       when = 'NOH2'
       when = 'SERVER'
       when = 'PORT'
       when = 'MIME'
       when = 'UUENCODE'
       when = 'BASE64'

          let $I_flag = '-' || lower($I_flag)

       when-other

          !   Invalid Synonym - Reject
          let $I_flag = ''
          let $I_parm = ''

    end-evaluate

else

    lowercase $I_flag

end-if

if  $I_flag            <> ''

    if $I_flag          = '-t'
       let #idx         = 0
    else
       if #_MAILctr     = 0
          let #_MAILctr = 1
       end-if
       let #idx         = #_MAILctr
    end-if

    let MAILmtx.MAILflag(#idx) = $I_flag
    let MAILmtx.MAILparm(#idx) = $I_parm

    if #_MAILctr       <= #idx
       let #_MAILctr    = #idx + 1
    end-if

end-if

end-procedure

!**********************************************************************
!*       MAIL-Func-Send - Send Mail Message (via BLAT.EXE)            *
!**********************************************************************
!*                                                                    *
!*        INPUT: $I_file    - MAIL Message File                       *
!*       OUTPUT: #O_stat    - MAIL Send Status                        *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*     EXAMPLE:  See MAIL-Array procedure for examples.               *
!*                                                                    *
!**********************************************************************

begin-procedure MAIL-Func-Send($I_file, :#O_stat)

#ifndef MAIL_path
#define MAIL_path c:\windows\system\
#endif

let #O_stat                   = -1

if  #_MAILctr                 > 0

    let $line                 = ''

    let #idx                  = 0

    while #idx                < #_MAILctr

       let $flag              = MAILmtx.MAILflag (#idx)
       let $parm              = MAILmtx.MAILparm (#idx)

       let $parm              = rtrim($parm,' ')

       !   Enclose in Double-Quotes if embedded spaces exist

       if  instr($parm,' ',1) > 0

           if $flag           = '-s'         ! Subject
           or $flag           = '-o'         ! Organization

              let $parm       = '"' || $parm || '"'

           end-if

       end-if

       !   Ensure required parameters are present (if not ignore)

       if  $parm             <> ''
       or  $flag              = '-noh'
       or  $flag              = '-noh2'
       or  $flag              = '-mime'
       or  $flag              = '-uuencode'
       or  $flag              = '-base64'

           let $line          = $line || $flag || ' ' || $parm || ' '

       end-if

       let #idx               = #idx + 1

    end-while

    if substr($line,1,2)      = '-t'

       let $command           = '{MAIL_path}blat.exe ' ||
                                $I_file                ||
                                ' '                    ||
                                $line

       call system using $command #O_stat WAIT

       if #O_stat            <> 0

          show ' '
          show 'Error Sending Mail'
          show '=================='
          show ' Status: ' #O_stat
          show 'Command: ' $command
          show ' '

       end-if

    else

       !   No Recipient Error

       let #O_stat       = -2

    end-if

end-if

end-procedure

!**********************************************************************
!*       MAIL-Func-Info - Display Current MAIL Parameters             *
!**********************************************************************
!*                                                                    *
!*        INPUT: n/a        - No input  parameters                    *
!*       OUTPUT: n/a        - No output parameters                    *
!*                                                                    *
!**********************************************************************
!*                                                                    *
!*     EXAMPLE:  See MAIL-Array procedure for examples.               *
!*                                                                    *
!**********************************************************************

begin-procedure MAIL-Func-Info()

let $HDR_flag = rpad('=', 15, '=')
let $HDR_parm = rpad('=', 63, '=')

show ' '
show 'MAIL Parameters (BLAT.EXE)'
show ' '
show $HDR_flag ' ' $HDR_parm

let #idx             = 0

while #idx           < #_MAILctr

   let $flag         = MAILmtx.MAILflag (#idx)
   let $parm         = MAILmtx.MAILparm (#idx)

   let $flag         = rpad($flag, 15, ' ')

   show $flag ' ' $parm

   let #idx          = #idx + 1

end-while

show $HDR_flag ' ' $HDR_parm
show ' '

end-procedure

!**********************************************************************
!*       End of Program                                               *
!**********************************************************************
               

   Portion of SQR.LOG (from TDMAIL.SQR execution)

MAIL Parameters (BLAT.EXE)

=============== =====================================
-t              tdelia@erols.com,anyone@somewhere.com
-s              SQRTOOLS Mail Send SQR/SQC (BLAT)
-o              SQRTOOLS.COM
-c
-b
-attach         c:\sqr\tdmail.sqr
-attach         c:\sqr\tdmail.sqc
=============== =====================================
               

   Download Demo Program and MAIL API Functions
TDMAIL.SQR MAIL Demo Program
TDMAIL.SQC MAIL API Functions (using BLAT.EXE)

   Feedback
ftoct01.jpg (12389 bytes) I would appreciate any feedback you may have on this site. Send mail to tdelia@erols.com or click on the Octopus.

   Technical difficulties?
Zcamel.jpg (20954 bytes) Please report any technical difficulties you may encounter to the address above OR click on the Octopus. Thanks.

NOTE - Use your Browsers BACK Button to return to prior page.

Tony DeLia - Updated February 8, 2001