sffmail
sffmail - to read from stdin
sffmail -o queuename
sffmail -h FipHdr information
Simple program to read in stream of data and stuff it on disk.
It is used in two main areas - capturing email inbound and capturing file sent
via the W4 module.
When used for receiving mail sent from an email server - usually kicked off by
'sendmail' - then an entry in '/etc/aliases' is required for EACH logon tracked
:
fip: "| /fip/bin/sffmail -o mail_store -h RZ:fip"
It is a good idea to add a FipHdr field - like RZ in the above example -
containing the actual logon as mail from ListServers etc do not usually have a
single address.
For most recent versions of sendmail, you will need to reload aliases once you
have modified it using something like :
/usr/lib/sendmail -bi
or /usr/sbin/newaliases
and on rs6000 refresh -s sendmail
Please check your particular system what is required.
We can also 'sffmail' for receiving files from the browser using W4 using the
'-w' switch.
Input switches :
-e : do NOT add all environment variables as FipHdr fields default: yes
-E : add all environment variables as FipHdr fields default: yes
*note this option was changed in version 01s to ALWAYS put out the envs
-o : output file path and queue default: spool/xsmtp
-h : Fip Header information default: none
-h "#DU:mailsort#SC:ascii#SN:\$e\$y\$i\$d\$z"
-w : use with w4 incoming files default: no
-l : log incoming to fip LOG default: no
-m : For w4, message to send back if no message file
default:<HTML><Head></HEAD><BODY>Thank you for \\SV from \\SA - reference
\\SN</BODY></HTML>
-M : For w4 name of a file of FipSeq to send back
default: /fip/web/template/recvfile.answer
Note old versions (pre 01f) used a default of
/fip/web/setup/w4.incoming.answer
recvfile.answer uses a stylesheet /fip/web/pages/css/recvfilex.css
-r : For w4 multiple files - filename of the TOP
-R : For w4 multiple files - filename of the TAIL
-d : folder into which we can put the raw files. default: none
use this for debugging
-u : default DU if none specified (mainly for W4 traffic). def:
w4remoteUnverified
-z : name of parameter file in tables/mail default: CHECK.MIME
-v : version and exit
For those switches with parameters, the parameter MUST be separated by a space.
FipHdr fields filled in are :
For W4 -
SP - REMOTE_ADDR of the sendert
SN - Name given by sender
ST - Content-type
SW - Full Path of file sent on sender's box
SV - filename on sender's box
SA - Logon
S1 - Publication of that Logon (if there is one)
S2 - Section of that Logon (if there is one)
S3 - UserType of that Logon (if there is one)
S4 - HTTP Host - proxy server
S5 - IPaddress of the sender
S6 - Receiving system hostname
S7 - Receiving system Protocol
S8 - realname/logon
S9 - localhost name
E* - (optional) any mime headers in 'x-(yyy)-SU: (spc) (data)' format where
yyy is the string in the xmime-key: parameter
PLUS a multitude of date and time fields (the 'HX's)
PLUS any field with a name="FIP-XX" in the template is added to the FipHdr
PLUS any mime headers in 'x-fip-SU: (spc) (data)' format
If there is no DU for ipwheel to match, a default is used -
"w4remoteUnverified" (from version 01p)
eg
<input type="hidden" name="FIP-DU" value="remote2cci">
<input type="hidden" name="FIP-SU" value="w4remote">
<input type="radio" name="FIP-WB" value="holding" checked>
<input type="input" name="FIP-WK" value="" size=15>
<input type="input" name="FIP-WN" value="" size=30>
<input type="input" name="FIP-WI" value="" size=5>
Note there is also an (optional) parameter file with a list of mime-types to
allow or disallow. The parameter file is in tables/mail/CHECK.MIME unless
specified otherwise using the '-z' input switch.
The syntax for the parameters are in the normal Fip standard and the keywords
are :
; comment
round-robin: (number) default: none
round-robin-fiphdr: (2 letter FipHdr field) default: none
Round-Robin the output files and add the RR number to the fipHdr.
Both parameters are required - the Number is the MAXimum.
eg to leave the output in folder1 to folder9
round-robin:9
round-robin-fiphdr:RR
and a suitable output folder might be /fip/spool/xchg\RR
Note that the round-robin number is NOT added automatically to any output
folder - ie you MUST specify a FipHdr as in /fip/spool/2xml\RR
save-data-path: (pathname for data)
This puts the data of the incoming data in a file in this folder and creates
a FipHdr file that contains 2 FipHdrs containing the full path/filename
SX: and FTP_EXTERNAL_FILE:
(ipbalan uses SX and ipftp uses FTP_EXTERNAL_FILE)
eq save-data-path:/fip/data/jpegs/\$e\$y\$i\$d/
Use this for big files that you do not want to copy around the Fip Spool
area.
** if specified, ALL non-standalone files will be split like this **
default-allow-mime-types: yes/no/allow/disallow
Make the default to either allow all (except those specifically disallowed)
or vice versa
default is yes - ie allow everything in.
yes or allow are the same
no or disallow are the same
allow-empty-mime-type: yes/no/allow/disallow
default is yes to allow all files with NO mimetype specified to be received.
yes or allow are the same
no or disallow are the same
allow-mime-type
disallow-mime-type
Specify the mimetype you want to accept or reject
There can be up to 100 allow/disallow-mime-types
eg allow-mime-type:text/plain
There are no defaults
Note only the string entered is checked, so :
allow-mime-type:text
will allow ANY text variant - text/plain, text/html, texturally/wonderful.
Normally, if you want to control the types of files received, then :
either 1. make the default ALLOW and list the types to DISALLOW
default-allow-mime-type:yes
disallow-mime-type:application/msword
disallow-mime-type:binary
or 2. make the default DISALLOW and list the types to ALLOW
default-allow-mime-type:no
allow-mime-type:text/plain
allow-mime-type:text/rtf
allow-mime-type:x-fip-quark
Example :
; DISallow all by default and explictly allow a couple
default-allow-mime-types:no
; nothing there - reject it !
allow-empty-mime-types:no
; list of those we want
allow-mime-type:text
allow-mime-type:image/jpeg
allow-mime-type:application/rtf
allow-mime-type:application/x-macbinary
allow-mime-type:application/mac-binhex40
allow-mime-type:application/octet-stream
allow-mime-type:application/zip
allow-mime-type:application/x-msexcel
The following parameters may also be specified and are the equivalent for the
same inputs in the data stream.
extra-fiphdr: Add these extra FipHdr fields to each inbound file
w4-default-dest: (Fip DU or destination in sys/USERS)
Send all files from senders who have NOT logged on to this destination.
default is 'w4remoteUnverified'
filebefore
fileafter contents of these files will be added to the output data - before
or after the main data.
The following 'w4-message*' parameters allow replacement of the standard
messages returned to the client.
(if marked 'file', it is the name of a file in web/templates)
either w4-message-file file - complete HTML page template for a single
incoming file
or w4-message FipSeq - complete HTML page in FipSeq
or w4-message-top file - top response template
w4-message-meta file - first response - poss with FipHdrs and textarea text
w4-message-item file - template for a each FILE sent
w4-message-missing file - if there were NO files send/received (using ..-top
and ..-tail)
w4-message-tail file - tail response template
w4-message-nothing FipSeq - no files message (if no .-top)
w4-message-no-files file template for 'No Files' (if no .-top)
w4-message-bad-authentication file template for 'No Files' (if using
chk-fipid or check-apikey)
w4-message-invalid-mimetype
default is ST:<font color=red>** File ignored - MimeType disallowed - \\ST,
please resend in acceptable format</font>
w4-message-hr FipSeq replacement for <hr> between files
w4-log-accepted: (FipSeq)
Fip Item log line for files accepted and forwarded on to other parts of Fip
default is no string
w4-log-rejected: (FipSeq)
Fip Item log line for rejected files
default is "** File ignored from \\SU - MimeType disallowed - \\ST"
rawque: (FipSeq)
Leave a copy of the incoming file in this folder
eg rawque:/fip/data/raw.data/\$e\$y\$i\$d_sffmail
default: none
package-uid-fiphdr: (2 letter FipHdr)
package-que: (FipSeq folder name)
package-queue: (FipSeq folder name)
package-name: (FipSeq file name)
balance-package: (balance group for package)
hash-in-fiphdr: (FipSeq chr) default:none
A hash/pound (#) in a FipHdr field is mapped to this chr
Normally hashes are end-of-field in a FipHdr. So it needs to be mapped to
something else and we changed it here on outbound.
response-mime-type:( mimetype of the response back)
default: text/html
xmime-key: (string)
xmime-key0: (string)
..
xmime-key9: (string)
Save any mime headers including those starting 'x-(key)-(subkey):(data)
These are saved in E0-9
eg xmime-key3:x-boat-anchor
xmime-key5:x-boat-engine
data = x-boat-anchor:long, blue
x-boat-engine:steam
gives E3:long, blue
E5:steam
Note you can also use the FipSeq filter for the same effect
filter:E3 ZE X-BOAT-ANCHOR:*
filter:E5 ZE X-BOAT-ENGINE:*
in this case, add them to the FipHdr with 'extra-fiphdr:E3:\E3\nE5:\E5\n'
fiphdr-fipid:(2 letter FipHdr field to hold the FipId)
use this to save the FipId
(it requires the Fipid to be in the HTTP_REFERER environment variable)
fiphdr-setup: (2 letter code) FipHdr field for Setup field
fiphdr-subset: (2 letter code) FipHdr field for SubSet field
fiphdr-service: (2 letter code) FipHdr field for Service field
fiphdr-uid: (2 letter code) FipHdr field for Uid field
fiphdr-action: (2 letter code) FipHdr field for Action or Variant field
fiphdr-api-key: (2 letter code) FipHdr field for API-KEY
fiphdr-api-code: (2 letter code) FipHdr field for API-CODE
fiphdr-api-response: (2 letter code) FipHdr field for API-RESPONSE
api-response can be raw, json, xml, html and may be used to vary the format
of the response (if setup so !)
check-fipid:no/yes
check-apikey;no/yes
Check either the Fipid or the ApiKey for IPaddress range, commands, expiry
and logon
If a FipId and/or an APIkey exists, it is checked and metadata added; but
only if the check is set to YES, will it be stopped.
So if set to YES, these params are used to filter UNauthenticated files from
the incoming stream
If set to NO, they are NOT checked and NO metadata stored
trigger-extra: (ExtraFipHDr for an extra trigger file)
Use this FipHdr info to create an extra file AFTER all the others have been
processed.
eg trigger-fiphdr:\nRF:trigger\n
This requires an optional input variable on the form (usually hidden) :
eg <!-- AFTER all the data, metadata and files.. trigger -->
<input type="hidden" name="SFFMAIL_TRIGGER" value="XX:##UID##">
The supplementary file is triggered - maybe for tracking purposes - to a
different DU (using meta specified in the FH parameter)
debug-file:(pathnme in FipSeq)
put all incoming data into a debug file
debug-file:/fip/data/\$e\$y\$i\$d_debug/\$h\$n\$b_xremote_\$z.fip
Note that if defining Unix escape chrs in scripts, you will probably need to
escape the escapes ! eg : \n becomes \\n
Other env varis can be used to define where the system is :
SFFMAIL_Z name of a parameter file
This is overridden by the '-z' input switch.
SFF_HOME where the home or top queue is. default: /fip
eg setenv SFF_HOME /ripexpress/underware
SFF_LOG where the log files queue is default: (SFF_HOME)/log
SFF_SPOOL where the data queues are default: (SFF_HOME)/spool
SFF_TMP where the tmp data queues is default: (SFF_HOME)/x
THIS MUST BE ON THE SAME UNIX VOLUME as SFF_SPOOL queues.
ie if spools are on /data99 which is hard disk /dev/sd0, you MUST also
have the TMP queue on the same disk/partition
NOTE that for all BUT SFF_HOME, if the parameter starts with a '/' then it is a
hard, absolute path; if not then the spool area is under SFF_HOME.
eg setenv SFF_SPOOL /data7 will look under /data7 for queues
while setenv SFF_SPOOL data7 will look under /fip/data7
Version Control
;2h34 05sep04 added zippy and sum: and bugette in copying data..
;c 17oct06 allow alphanumeric Fipids
;d-g 11mar07 added FIP-MULTI-FILE
;h1-7 21dec10 64bit issue ;h2 6dec13 bugette - extra data before start of blob
;3 HR
;8-10 2jun15 added outname, outque, SX and RR
;11 WINNT again ;12 hash-in-fiphdr/isHash added; 13-15 added trigger and
extra-fiphdr better
;16-17 4oct15 added pkg for updating and new HR ;18-21 balance-package
;22-33 action/variant ;34 8may18 added fipseq_extras
;001z 27mar99 chj added w4 bits
;a 29may99 mods to Fiplogon
;b 21oct99 added H* fields
;c 01jan00 envs added
;d 01may00 log added
;e 17jan01 added -m/-M/-d
;f 20feb01 response template is now in /fip/web/templates
;g/h 21feb01 Allow big textarea called FIP-DATA as data
;j 25jul01 bugette - w4 new file overwrote SW (fullpathname)
not XX (short-just filename)
;k 20sep01 RADIUS_* -> use RealName.
;l/m 24jan02 cleaned up multiple files for w4
;n/o 07feb02 added -r/-R
;p 09aug02 added default DU for w4 if none specified and -u
;r 20aug02 seqno increments for every file now - not JUST for multiples
;s 04sep02 allow mime headers -> FipHdrs if in xxx-fip-SU: format
;t 13dec02 added tracking of mime-types with accept/rejects (param file)
;u 04jun03 added extra logon info for w4
;v 21jul03 zapped trailing CR on some binary files
;w 24jul03 chg of param file
;y 17nov03 small adjustments incase the Fip-Data field is > 128k
;z 22jan04 bug tracking...
(copyright) 2025 and previous years FingerPost Ltd.