|set|chunked=0|
|set|toc=cols=2|
|set|toc=format=1………………|
|style|default|
|style|._soymail \
{ font-family: "Lucida Console", Monaco, monospace; letter-spacing:-0.05em; }
h1 ._soymail { font-family: "Lucida Console", Monaco, monospace; }|
|style|.button { border: 1px gray solid; border-radius:3px; \
padding:0.1em; margin:0.1em; font-size:90%; } ||
|style|.smiley::after \
{ font-size:150%; vertical-align:middle; content:'\\263a' }|
|style|.frowny::after \
{ font-size:150%; vertical-align:middle; content:'\\2639' }|
|01'_soymail&font-size:160%;.soyMAIL|
|02Surprisingly Capable Web-mail for OpenVMS|
|03Installation and Administration|
|^ Published February 2024 for |'_soymail.soyMAIL| v2.1.0
|^ Document generated using |'wasdoc.wasDOC| |insert|wasdoc=version|
|^ |*'_soymail.soyMAIL| |-| |*Copyright \© 2005-2024 Mark G. Daniel|
|9Apache License, Version 2.0|
|9License|
|^ Licensed under the |*Apache License||, Version 2.0 (the "License");
|quote&font-size:0.9em;width:49em;margin:-0.5em 0 0 1em;|
you may not use this software except in compliance with the License.
You may obtain a copy of the License at
|^ |link%&margin-left:1em;|https://www.apache.org/licenses/LICENSE-2.0|
|^ Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
|!quote|
|^ |mailto:Mark.Daniel@wasd.vsm.com.au|
|^- |*/A pox on the houses of all spamers. Make that two poxes.|
|^ All trademarks within this document belong to their rightful owners.
|^ The latest release of |'_soymail.soyMAIL| is available for download from
|^+ |%http://wasd.vsm.com.au/wasd/|
|^ Release notes for this version:
|^+ \\
../release_notes.txt\
|01&font-size:120%;.Table of Content|
|toc|
|1Introduction|
|9yahMAIL|
|^ |'_soymail.soyMAIL| is a native VMS application that executes as an HTTP
server script providing authenticated Web access to an account's VMS Mail. All
that is required at the client end is a (relatively) modern browser supporting
CSS2/3. HTTP cookies are required for autogenous authentication.
|^ |'_soymail.soyMAIL| has been built on experience gained hacking about with
its progenitor |=yahMAIL| but unlike |=yahMAIL| was designed from the start to
satisfy all the basic requirements for a Web-based email interface. It is the
author's (perhaps) humble opinion that |'_soymail.soyMAIL| is a more than
worthy successor as the 'son of |=yahMAIL||'.
|^ |'_soymail.soyMAIL| has been developed against these VMS Web server
environments
|bullet#|
|& Apache (SWS) 2.2 and 1.3
|& OSU 3.10
|& WASD 12.|/n||,11.|/n||, 10.|/n||, 9.|/n|
|!bullet|
for building and use on all VMS platforms
|bullet#|
|& Alpha
|& Itanium
|& x86-64
|& (VAX is no longer supported)
|!bullet|
and versions of VMS from V7.0 onwards.
|^ |'_soymail.soyMAIL| supports
|bullet#|
|& receiving and sending
|& native VMS Mail messages
|& Internet (SMTP) mail messages
|& MIME messaging and attachments
|& HTML (rich) message text
|& messages of non-Latin characters and directionality
|^- (for example Arabic, Cyrillic, Greek and Hebrew)
|& message content search
|& contact (address) maintenance
|& VMS style mailing lists
|& context-sensitive help
|& user options (including supported language)
|!bullet|
|^ |'_soymail.soyMAIL| has a |/private access| mode that allows authenticated
access to an underlying VMS account's email facility. This is where it provides
the 'classic' web-mail functionality. It also provides a |/public access| mode
which requires no authentication (though it is not forbidden either) and
provides controlled access to a specific folder, in a specific mail file, in a
specific VMS account, intended to allow general access to a managed subset of a
users Mail.
|^ |'_soymail.soyMAIL| has been carefully and extensively optimized to perform
well within the general VMS environment and when using callable Mail.
|^ It uses VMS callable mail to access an accounts mail repository and to
perform native VMS messaging.
|^ Messages are originated via SMTP by connecting directly to an SMTP server
(usually but not necessarily on the localhost), and therefore requires access
to an (at least local) SMTP relay, in much the same manner as many client-based
email agents.
|9JavaScript required|
|^ |'_soymail.soyMAIL| was originally designed to have the essentials usable
without having JavaScript available or enabled. Increasingly the functionality
allowed using JavaScript has become more entrenched in both browsers and
soyMAIL so that now while it may be still be possible to use soyMAIL without it
the developer neither has that as an objective nor tests that any functionality
works without it. Similarly, backward compatibility with browsers originally
developed and tested against is not guaranteed. |*If you are not using a
relatively up-to-date browser then you should be, if only from the security
consideration.|
|1Installation|
|^ |'_soymail.soyMAIL| requires some configuration before use. It is
recommended that this entire document be read and carefully considered before
installation and attempted usage. Please use the facilities described in
|link|Run-time Problem Solving| when troubleshooting an installation.
|^ |'_soymail.soyMAIL| soyMAIL is distributed as a source-code/run-time resource
ZIP archive, with optional supplementary object code archives for each of the
VMS platforms. For example, version two would be packaged
|mono|
SOYMAIL200.ZIP
SOYMAIL200-AXP.ZIP
SOYMAIL200-IA64.ZIP
SOYMAIL200-VAX.ZIP
|!mono|
|^ It may be built from the primary archive using DECC 6 and later, or
link-only using in addition one of the supplementary object code archives.
|^ Brief installation and other relevant information can be obtained from the
archive using the UNZIP |=-| option.
|0Link-only|
|^ A link-only build has the following alternate steps which can be used in any
environment described below.
|code|
$ UNZIP device:[dir]SOYMAILnnn.ZIP
$ UNZIP device:[dir]SOYMAILnnn-.ZIP
$ @BUILD_SOYMAIL LINK
|!code|
|0Update|
|^ An update (which does not overwrite the configuration file) has the
following alternate step and can be performed in any of the environments
described below.
|code|
$ @INSTALL UPDATE
|!code|
|0Run-time Components|
|^ The following table describes the run-time components. The installation
procedure described below places these in the default locations the startup
procedure expects to find them. Of course the default location and procedures
are not mandatory. Components can be placed anywhere the site requires and a
small, local startup procedure developed to use them from there.
|table|
|~_ |: Component |: Purpose
|~
|~ |. |=.[.OBJ_]SOYMAIL.EXE| |. architecture appropriate soyMAIL script
executable, to [CGI-BIN], [BIN], etc. depending on the server
|~ |. |=.[.HELP]| |. help documentation, located via the logical name SOYMAIL_HELP
|~ |. |=.[.LANG]| |. language files located via the logical name SOYMAIL_LANG
|~ |. |=.[.THEME]| |. CSS and other thematic resource files located by the logical
name SOYMAIL_THEME and by the script via the path /soymail/-/theme/
|~ |. |=.[.TINYMCE]| |. HTML (rich) text editor components
|~ |. |=SOYMAIL.CSS| |. basic style-sheet for soyMAIL
|~ |. |=SOYMAIL.CONF| |. configuration file located by the logical name
SOYMAIL_CONFIG
|~ |. |=SOYMAIL.JS| |. JavaScript used by soyMAIL
|~ |. |=SOYMAIL_STARTUP.COM| |. startup procedure to define required logical
names and install SOYMAIL.EXE image
|!table|
|^ The contents of the |=.[.LANG]||, |=.[.HELP]||, |=.[.THEME]| and
|=.[.TINYMCE]| subdirectories in the soyMAIL distribution must be available to
the server and script.
|^ The |=INSTALL.COM| procedure should provide a default run-time installation
for each of the listed server environments.
|2Authentication|
|^ |'_soymail.soyMAIL| can be configured to depend on the supporting Web server
to perform authentication and authorization using the standard HTTP
challenge/response or to use it's own (autogenous) authentication and state
management.
|^ The configuration guidelines in following sections contain both file mapping
and authorization configuration examples. The file mapping configuration is
always required to allow the client browser to access thematic resources. The
authorization rules should not be configured when using |'_soymail.soyMAIL|
autogenous login and state management. See |link|Autogenous Authentication||.
|2Apache (SWS)|
|^ This installation information is per SWS version 2.1. If you have a
different version the requirements may require adjustment.
|code|
$ SET DEFAULT APACHE$ROOT:[000000]
$ UNZIP device:[dir]SOYMAILnnn.ZIP
$ SET DEFAULT [.SOYMAIL]
$ @BUILD_SOYMAIL
$ @INSTALL INSTALL APACHE
|!code|
After installation files are located as follows.
|table|
|~_ |: File |: Location
|~
|~= |. SOYMAIL.EXE |. APACHE$COMMON:[CGI-BIN]
|~= |. SOYMAIL_APACHE.COM |. APACHE$COMMON:[CGI-BIN]SOYMAIL.COM
|~= |. SOYMAIL_STARTUP.COM |. APACHE$COMMON:[000000]
|~= |. SOYMAIL.CONF |. APACHE$COMMON:[CONF]
|!table|
|^ Apache requires the extra, script 'wrapper' procedure SOYMAIL.COM, so that
the process-level logical name DECC$FILE_SHARING defined in the Apache
scripting environment can be deassigned before the C-RTL is activated by the
soyMAIL executable. This setting interferes with some soyMAIL file operations.
|^ Mapping and authorization examples:
|code|
Alias /soymail/-/ "/apache$common/soymail/"
AuthType Basic
AuthName "OpenVMS authentication"
AuthUserOpenVMS On
require valid-user
|!code|
|^ Depending on the planned authorization source it may also be
necessary to check that the OpenVMS authorization module is
configured.
|code|
LoadModule auth_openvms_module modules/mod_auth_openvms.exe
|!code|
|^ Private access URI:
|code|
/cgi-bin/soymail/~
|!code|
|2OSU|
|^ It is suggested to place the |'_soymail.soyMAIL| kit under WWW_ROOT:[000000].
|code|
$ SET DEFAULT WWW_ROOT:[000000]
$ UNZIP device:[dir]SOYMAILnnn.ZIP
$ SET DEFAULT [.SOYMAIL]
$ @BUILD_SOYMAIL
$ @INSTALL INSTALL OSU
|!code|
|^ After installation files are located as follows.
|table|
|~_ |: File |: Location
|~
|~= |. SOYMAIL.EXE |. WWW_ROOT:[BIN]
|~= |. SOYMAIL_STARTUP.COM |. WWW_ROOT:[SYSTEM]
|~= |. SOYMAIL.CONF |. WWW_ROOT:[CONF]
|!table|
|^ Mapping and authorization examples:
|code|
protect /htbin/soymail/~* www_system:soymail.prot
pass /soymail/-/* /www_root/soymail/*
|!code|
|^ Private access URI:
|code|
/htbin/soymail/~
|!code|
|2WASD|
|^ With WASD the |'_soymail.soyMAIL| kit occupies the usual location for source
under the WASD_ROOT:[SRC] directory.
|code|
$ SET DEFAULT WASD_ROOT:[SRC]
$ UNZIP device:[dir]SOYMAILnnn.ZIP
$ SET DEFAULT [.SOYMAIL]
$ @BUILD_SOYMAIL
$ @INSTALL INSTALL WASD
|!code|
|table|
|~_ |: File |: Location
|~
|~= |. SOYMAIL.EXE |. WASD_ROOT:[-BIN]
|~= |. SOYMAIL_STARTUP.COM |. WASD_ROOT:[STARTUP]
|~= |. SOYMAIL.CONF |. WASD_ROOT:[LOCAL]
|!table|
|^ Mapping and authorization examples:
|code|
# WASD_CONFIG_MAP
pass /soymail/-/* /wasd_root/src/soymail/* search=none
set /**/soymail/~* map=once response=csp=*
redirect /cgi-bin/soymail/~ /cgiplus-bin/soymail/~
# WASD_CONFIG_AUTH
["description"=REALM]
/cgi-bin/soymail/~* r+w
|!code|
|^ Private access URI:
|code|
/cgi-bin/soymail/~
|!code|
|0CGIplus|
|^ WASD provides the persistent scripting environment CGIplus.
|'_soymail.soyMAIL| (1.6 and later) can execute in this environment. It
remains resident and active for a period configured by the server. This can
reduce response latency and system overhead significantly (request duration
measurements indicate reductions of between 50% and 80% depending on activity).
Just map |'_soymail.soyMAIL| into CGIplus space prior to other
|'_soymail.soyMAIL| required rules.
|code|
# WASD_CONFIG_MAP
redirect /cgi-bin/soymail* /cgiplus-bin/soymail*
|!code|
|0Proctor|
|^ |'_soymail.soyMAIL| may be proctored (not sure what this means? |--|
check section "Script Proctor" in "WASD Scripting Environment" document).
|code|
# WASD_CONFIG_GLOBAL
[DclScriptProctor]
1 /cgiplus-bin/soymail /cgiplus-bin/soymail
|!code|
|2SMTP Relay|
|^ |'_soymail.soyMAIL| originates SMTP Mail by directly communicating with a
site's SMTP server. This requires that server to be enabled as an SMTP relay
for at least the VMS system |'_soymail.soyMAIL| will be run on. The
configuration for allowing relay varies on the TCP/IP and/or mail package in
use (i.e. TCP/IP Services, MultiNet, TCPware, MX, PMDF, etc.)
|note><|
|0CAUTION...|
|...||*must| be exercised when changing configuration to allow relay.
|^- The last thing that you need as a result is an open relay being used for
|/spam| propagation!
|!note|
|^ The following example shows a possible configuration for HP TCP/IP Services
(a.k.a. UCX) to provide this for the local VMS system running the
|'_soymail.soyMAIL| script. The configuration option to enable relaying must be
set.
|code|
$ TCPIP
TCPIP> SET CONFIGURATION SMTP/OPTION=RELAY
^Z
|!code|
|^ And an entry placed in the plain-text configuration to enable access
for allowed SMTP clients (the localhost).
|code|
# TCPIP$SMTP_COMMON:SMTP.CONFIG
Good-Clients: 127.0.0.0,localhost
|!code|
|^ The SMTP server that the |'_soymail.soyMAIL| script connects to is commonly
running on the same (VMS) system as the script. It does not need to be. The
configuration directive [SMTP-server-host] (see |link|Directives||) can be
used to specify and alternate host name or IP address (and non-default port if
required) for |'_soymail.soyMAIL| to connect to.
|2HTML Editor|
|^ TinyMCE is supplied as an integrated element of |'_soymail.soyMAIL||.
Although |'_soymail.soyMAIL| itself has no specific requirement for installation
on an ODS-5 volume, TinyMCE has file names containing multiple periods.
UNZIPing the |'_soymail.soyMAIL| archive on an ODS-2 volume will generally
result in UNZIP converting non-ODS-2 syntax elements into something legal for
the file-system. Illegal periods are substituted with underscores. Of course
TinyMCE will still be expecting multiple periods so the |'_soymail.soyMAIL|
script is given these to munge into underscores on behalf of the file-system
(well it's given all resource file requests but only munges those necessary).
This does introduce some additional latency for non-ODS-5 environments. The
capability requires some mapping rules.
|^ These are the WASD example (modify to suit your web server):
|code|
# WASD_CONFIG_MAP
# anything with the usual resource path is given to the script to munge
redirect /soymail/-/* /cgiplus-bin/soymail/soymail/_/*
# the alternate resource path containing ODS-2 legal names is then used
pass /soymail/_/* /wasd_root/src/soymail/*
|!code|
|1Configuration|
|^ |'_soymail.soyMAIL| configuration is provided using a plain-text file located
using the logical name SOYMAIL_CONFIG. The configuration file must exist or all
access is denied. The installation procedure copies an example configuration
file allowing private access and requiring some customization. Updates do not
subsequently change this file. Comments may be included by prefixing the line
with a '#' character. Each directive name is delimited by '[' and ']'
characters and directive parameters comprise all text until the next comment or
directive opening '['. Reserved characters may be escaped using the backslash
character. Leading and trailing white-space is trimmed. Comments and
directives must begin in column 1.
|^ Tpical configuration file might look something like
|code|
########################
# private soyMAIL access
########################
[if-private]
[private-access] */*/*
[page-title] The Company Name
[page-title2] IT Services
[message-list-footer]
~ IT Services can be contacted on 82596189 ~
[print-header] The Company Name
[print-footer] ~ Internet, E-mail and Web Services ~
[help-about-site]
The Company Name provides
OpenVMS consultancy, programming and support, along with Web and Mail hosting.
[end]
|!code|
|^ Comments, directive names and directive data can be seen.
|2Directives|
|^ The following table provides a summary of all directives, with those
requiring more explanation expanded in following sections.
|table|
|~_ |:&width:15em;.Directive |: Description
|~
|~#* |. |=.[access-log]| |. generates a soyMAIL-specific access log file when
autogenous authentication is in use (see |link|Access Log||)
|~ |. |=.[attachment-mime-types]| |. comma-separated MIME types a browser will
display in-window. Others will always be opened in a separate window.
|~ |. |=.[charset-default]| |. character set to use for folder listing, options
and contacts
|~ |. |=.[compose-charsets]| |. comma-separated list of character sets
available on the message composition page (see |link|[compose-charsets]||)
|~ |. |=.[compose-contacts-after]| |. expand the contacts list viewport after
this many entries
|~ |. |=.[compose-contacts-size]| |. expand to this number of lines (em)
|~ |. |=.[compose-edit-cols]| |. comma-separated integers providing the steps
the message edit window columns increment; e.g. 78,96,132
|~ |. |=.[compose-edit-rows]| |. comma-separated integers providing the steps
the message edit window rows increment; e.g. 20,30,40
|~ |. |=.[compose-user-from]| |. When ENABLED allows the user to specify the
message "From:" header line. When DISPLAY just displays it on the page.
|~ |. |=.[compose-wrap-at]| |. comma-separated integers providing the steps
after which the message text should be wrapped; e.g. 78,96,132
|~ |. |=.[context-cache-expires]| |. With WASD CGIplus VMS Mail contexts are
maintained in the persistent script for this number of minutes (default 60)
|~ |. |=.[disk-quota-percent]| |. With each folder opened soyMAIL checks the
users consumed disk quota. When it exceeds this percentage it adds a
notification to the status information. Defaults to 85 percent. To disable
completely set above 100. To display permanently set to 0.
|~ |. |=.[downtime]| |. string disables the use of soyMAIL and gives the
specified string as a simple announcement to users connecting to soyMAIL
|~ |. |=.[font-family-local]| |. Additional font families presented in the user
options font selector. One per line.
|~ |. |=.[greeting]| |. Message presented in the status panel when a client
first accesses soyMAIL, or its help or about pages. Can be used as a welcome
or warning message.
|~ |. |=.[help-about-site]| |. site-specific information presented on the Help
'About' page
|~ |. |=.[html-editor-load]| |. Include and process the specified configuration
file at the point of inclusion. Included files may be nested up to three
deep. Just remember, each configuration file is one that must be read from the
file-system for each soyMAIL request!
|~ |. |=.[login-acme-doi]| |. ACME domain of interpretation (see section
|link|Autogenous Authentication||)
|~ |. |=.[login-acme-no-restrict]| |. ignore any login source restriction (e.g.
/NONETWORK) provided authentication was successful (see section
|link|Autogenous Authentication||)
|~ |. |=.[login-agent]| |. external, site-provided authentication agent (see
|link|Autogenous Authentication||)
|~ |. |=.[login-alias]| |. mapping from user-supplied user-name string to
username used for autogenous authentication (see |link|Autogenous
Authentication||)
|~ |. |=.[login-alias-smtp-from]| |. when ENABLED and building a compose self
address ("From:") use any mapped alias as the local part
|~ |. |=.[login-autocomplete]| |. browser auto-completion of login credentials
(see |link|Autogenous Authentication||)
|~ |. |=.[login-change-page]| |. file-system location for password change page
(see |link|Autogenous Authentication||)
|~ |. |=.[login-idle]| |. seconds idle before credential reentry (see
|link|Autogenous Authentication||)
|~ |. |=.[login-language]| |. language for login page (see |link|Autogenous
Authentication||)
|~ |. |=.[login-no-pwdexp]| |. ignore expired passwords (see section
|link|Autogenous Authentication||)
|~ |. |=.[login-page]| |. file-system location for login page (see section
|link|Autogenous Authentication||)
|~ |. |=.[login-secret]| |. encryption key for credential cookie (see
|link|Autogenous Authentication||)
|~ |. |=.[login-type]| |. integer representing NETWORK, LOCAL, REMOTE, etc.
(see |link|Autogenous Authentication||)
|~ |. |=.[login-verify]| |. seconds between credential verification (see
|link|Autogenous Authentication||)
|~ |. |=.[logout-realm]| |. enables the logout button and functionality (see
|link|[html-editor-load]||).
|~ |. |=.[message-list-footer]| |. site-specific information (HTML text)
presented in a separate panel below the folder message listing
|~ |. |=.[page-title]| |. Superior line in main menu panel. Titles all pages.
|~ |. |=.[page-title3]| |. the text in [page-title] is forced left and the
[page-title2] text is forced right
|~ |. |=.[print-header]| |. text header for printed mail messages
|~ |. |=.[print-footer]| |. text footer for printed mail messages
|~ |. |=.[private-access]| |. allows mapping between authenticated user (CGI
remote-user) and a VMS username (see |link|[private-access]||)
|~ |. |=.[private-request]| |. indicates this request is for private access
(see |link|[private-request]||)
|~ |. |=.[public-access]| |. permits and maps request path strings to VMS Mail
user names, mail file and folders (see |link|[public-access]||)
|~ |. |=.[public-footer]| |. site-specific information (HTML text) presented in a
separate panel below the public message listing ("Thanks to ...")
|~ |. |=.[public-request]| |. Indicates this request is for public access.
Complements the [private-request] directive.
|~ |. |=.[search-control]| |. controls designed to limit the impact of
intensive searching activity on system resources (see |link|[search-control]||)
|~ |. |=.[site-style-sheet]| |. loads the URL-specified style after the theme
(and can therefore also be used to supplement or override a theme style)
|~ |. |=.[smtp-default-host]| |. specifies a host or domain name and makes an
unqualified user address such as Mark.Daniel into an RFC (Internet-style)
address such as Mark.Daniel@vsm.com.au (see |link|[SMTP-default-host]||)
|~ |. |=.[smtp-from-host]| |. used when constructing the 'user@from.host.name'
|~ |. |=.[smtp-server-host]| |. Host name/address of SMTP server soyMAIL
connects to for Internet mail transport (defaults to 'localhost'). A
non-default port may be specified using host:port (e.g. 'localhost.:2525')
|~ |. |=.[soymail-at-title]| |. site description provided in title bar of
browser window (defaults to "soyMAIL @ the.server.name")
|~ |. |=.[update-last-login]| |. update SYSUAF last-login with each initial
access (see |link|Directives||)
|~ |. |=.[user-name-info]| |. When ENABLED display on the status panel the
logged-in user name. When ALIAS (and [login-alias] in use) displays the login
alias.
|~ |. |=.[user-options-default]| |. allows the soyMAIL administrator to preset some
options (e.g. language) by providing options configuration text against this
directive (it is required to escape each leading '[' with a '\')
|~ |. |=.[user-options-override |. allows the soyMAIL administrator to override
user selected options by providing options configuration text against this
directive (it is required to escape each leading '[' with a '\')
|~ |. [vms-occluded]| |. 'hides' obvious VMS-specific aspects of soyMAIL (e.g.
VMS options panel, the extract button on the message read page)
|!table|
|2.[compose-charsets]|
|^ By default |'_soymail.soyMAIL| message composition is performed using the
character set specified by the user-optioned language ([lang_charset] in the
language file, commonly ISO-8859-1). The [compose-charsets] directive allows
composition of a message in another character set and can be enabled in the
user option file (for a per-user configuration) or the |'_soymail.soyMAIL|
configuration file (for site-wide availability). Each item is then displayed
in a selection list on the message composition page.
|^ The format for each item of the directive is
|mono|
|/description| = [<] |/charset-name|
|!mono|
where the |/description| is displayed in the list, the optional '<' flag
indicates the |/script directionality| is right-to-left (as with Arabic and
Hebrew) and the |/charset name| is the MIME (IANA) standard name for the
character set.
|^ The following example provides a selection of Arabic, Greek and Hebrew.
|code|
[compose-charsets] Arabic=| keyword the JavaScript
overrides the default TinyMCE initialisation.
|^ The following is an example:
|code|
[html-editor-load]