|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]