soyMAIL Release Notes and Change Log ------------------------------------ With thanks to all those who have tried soyMAIL and taken the time to report it wanting in some respect (and apologies if I've neglected to acknowlege your contribution on this list). Jeremy Begg (vsm.com.au) Jerry Alan Braga (flanagan.ca) Verne Britton (wvnet.edu) Alex Daniels (themail.co.uk) Derek Garson (ilg.com.au) Christoph Gartmann (immunbio.mpg.de) Francesco Gennai (isti.cnt.it) Victoriano Giralt (uma.es) Hunter Goatley (goatley.com) Willem Grooters (grootersnet.nl) Dave Jones (ohio-state.edu) Carl Karcher (waisman.wisc.edu) Bill Korendyk (wilkor.ca) Marty Kuhrt (kuhrt.com) Tom Linden (kednos.com) Ira Melamed (farmingdale.edu) Rene Mendoza (coloradomtn.edu) Phil Ottewell (pottsoft.com) Jean-Pierre Petit (esme.fr) Karl Rohwedder (gmx.de) Massimo Vitali (marionegri.it) Frank Weichert (Ruwel-Pfullingen.de) Dean Woodward (locktrack.com) ************ * v1.2.2 * ************ * bugfix; CerealDataOut() perhaps those ambits were not the issue, set a minimum buffer space of 256 (to catch possible zero-length data streams that still need a hash). ************ * v1.2.1 * ************ * Rework reply-all address compilation so that the original 'to:' goes to the new 'to:', original 'cc:' to new 'cc:', and duplicate addresses are eliminated. * Make minor allowances for user option selected monospace font. However the three tested browser families all seem to handle monospace differently so it's all very hit-and-miss. Who selects monospace unless it's fixed format anyway! (Bill? :-) * New user option [message-order] allows the message listing order to be specified. This currently requires a manual edit of the user SOYMAIL_OPTIONS.TXT (as I did not want to have do a round of language-specific message changes for an interim release). Set to 1 for ascending order (more recent messages towards the top - default) or -1 for descending order (more recent towards the bottom). * Ackk!! Looks like I'll need to reinstate the BETA test phase ... * bugfix; ComposePage() HTML-escape the hidden signature. * bugfix; ComposeTextMassage() retain quote-char as a string. * bugfix; ComposeSendMessage() check reply-to for VMS address (Non- info-WASD subscribers are lucky to have info-WASD subscribers get all of my stupid errors winnowed-out before public release.) ************ * v1.2.0 * ************ * New configuration directive [vms-occluded]. This option when enabled 'hides' VMS-specific features and behaviours (e.g. the VMS user options, and [extract] button described below). * New configuration directive [disk-quota-percent]. This option controls the user disk quota used percentage before utilisation notifications are generated. These use the status information to notify the client of disk quota in use with each folder opened once disk quota usage reaches the percentage. It defaults to 85%, can be disabled by setting to anything above 100, and made permanently enabled by setting to 0. * New user option [sig-file] allows the source of the signature file to be specified. That set by the VMS Mail configuration (default), a soyMAIL-specific file (SOYMAIL_SIGNATURE.TXT), or none. * The help "About" page now contains a disk quota report item. * The message read page now contains an [extract] button (if VMS is not occluded). Selecting this button extracts the specified message parts (attachments) as files into the user home directory. File names are prefixed with "SOYMAIL-" to avoid clashes with non-soyMAIL files in the area. The rest of the file name is generated from the part name. * Identify and make available any HTML content in a non-MIME message or in MIME text/plain in-line content. Requested functionality for the occasional broken message that gets through. * The message composition page now provides for the selective [forward]ing (from the message read page) of MIME attachments (without the [save] and 're-attach' of prior versions). It also indicates the presence of MIME attachments in the original by introducing [[attachment-name]] into the message text of [reply..]ed-to messages. * The message composition page has had significant JavaScript enhancements to refine address entry and message reset/clear/new functionality. This reduces the number of times the composition page needs to makes a request of the soyMAIL server. The [normal/wide] button has been replaced with one divided into two segments, [20 x 72] (initial value). The left controls the number of text rows, the right the number of text columns. * The RFC "Date:" field is now derived from the client browser (via JavaScript if enabled) rather than from the system soyMAIL is executing on to better represent message origination date/time. * Configuration directive [SMTP-default-host] has proved to be problematic when interacting with genuine VMS addresses. As a result a VMS address has been defined to be one containing a node specification (i.e. "::") or an all upper-case string. Either of these characteristics is used to determine address type (Internet or VMS) and additional checks have been provided to ensure that appropriate addresses are supplied for copy-self, etc. * Search "Results page every:" option now has an "all hits" item which will return a single listing containing all hits. * German versions of the help files thanks to Karl Rohwedder. * New language file messages; [about_disk_quota], [disk_quota_used], [attach_extract], [attach_extract_done], [option_soy_sig_file], [option_soy_sig_file_default], [option_soy_sig_file_soymail] and [option_soy_sig_file_none]. * Remove language file messages; [vms_foreign], [compose_edit_normal], [compose_edit_wide]. * Modify language file messages; [option_vms_sigfile] to [option_sigfile], [option_vms_sigfile_save] to [option_sigfile_save]. * bugfix; Contact import and merge were severely broken (the author must have been clinically brain-dead at the time). They now work correctly. All contact delete/edit/add/merge/import functionality from the contact maintenance page must be [save]ed to make the changes permanent. * bugfix; ContactsLoadFile() do not munge (upper-case or otherwise fiddle with) non-personal (i.e. site-specific) contact file name. * bugfix; HtmlSkipTagTo() used when sanitising HTML did not allow for single or double quotation marks outside of markup tags. ************ * v1.1.1 * ************ * Configuration directive [smtp-server-host] now allows a port number to be specified with the SMTP server host domain name (i.e. "the.host.name:25"). * Anchors created from Web URLS presented on the message read page are now split into two halves. The left side opens the link in the same window (target="_top") and the right in a child window (target="_blank"). * Do not infinitely increase the number of 'RE:' or 'FW:' (and any language-specific equivalents) in subject lines generated by the compose page. Leave at one, single leading instance of each. * Optimise search activities (in particular) at CallMailMessageHeader() by completely replacing mail$message_get() with mail$message_info() and adding mail$message_get() to CallMailMessageGet() for non-external mail messages only. This change was suggested by Dave Jones after investigations demonstrated a reduction to 35% of original search durations by eliminating an RMS file open implicit in mail$message_get() with external message files. My own testing has shown this delivers a reduction to between 65% and 45% of previous search times depending on the search parameters and the directory content. In other words; well worth the modification but YMMV. * Specialized user option [accessability-1] enables a heavy underscore beneath the detail of each message on the folder message listing page. This is intended to assist those with vision impairment to differentiate each message displayed against it's associated button. This option must be manually enabled by editing the user options file. * bugfix; AddressIsRfc() RFC2822 only allows the double quotation character (0x34) to quote, while AddressIsRfc() and MtaAddressExtract() allows backslash (0x92) to escape a single character. * bugfix; PublicMessageRequest() detect [search] button. * bugfix; ContactsLoadFile() set 'rdptr->ContactsTextPtr = NULL' after parsing LDIF content so that an empty LDIF file is not confused with a VMS mailing list. * bugfix; CallMailFileList() parsing of directory entry name length and entry flags (per Dave Jones) and use memmove() for shuffling inside the one buffer. ************ * v1.1.0 * ************ * Add configuration directive [private-request]. By default private access is recognised with a path (excludes the script component) beginning "/~". This can be overridden using the [private-request] configuration directive. It is intended to be used inside a conditional configuration test to indicate that this request is for private access to mail. It disables use of the "/~" sentinel. This 'conditional' approach was considered the more flexible. * Add configuration directive [update-last-login] with parameter INTERACTIVE or NON-INTERACTIVE. For each initial (GET) session the SYSUAF entry for the authenticated username has it's last-login (interactive or non-interactive) date/time updated. * Christoph Gartmann reports that Camino, Safari and Opera browsers on the Macintosh platform are suitable for soyMAIL (in that order and with some very minor inconsistencies). * bugfix; ComposeSelfAddress() miscalculation of size for calloc() under certain combinations of source address components. * bugfix; RequestPublic() parsing folder with GET. ************ * v1.0.0 * ************ * On the private and public message display (read) page precede each message part/attachment with an anchor/link to allow a right-click, browser 'save-target-as' dialog to be initiated, so allowing the part easily to be saved on the browser-local system. * Configuration directive [public-access] now supports a wildcard folder result (à la yahMAIL) allowing browsing of a public access folders. There are now three variations on public access. * Public access now supports searching. The configuration directive [search-control] may be used to disable and tailor this to suit requirements. * A child ([^]) compose window now has the additional button [send-close] available. After a successful message send the compose window is automatically closed. * Message [compose_send_close] added. * LangLoad() in conjunction with LANGDEF.H used to provide details on missing/extra entries in a language file when SOYMAIL$WATCH is defined. When messages are added/deleted or names changed the data in LANGDEF.H must now be changed (as well as in the language file itself). * soyMAIL messages support five languages at this initial release. de - German Karl Rohwedder en - English yours truly es - Spanish Victoriano Giralt fr - French Jean-Pierre Petit nl - Dutch Willem Grooters Many thanks to these contributors. * In folder listings MAIL and NEWMAIL no longer are shown unless they contain messages. Note that 'newmail', 'newMAIL', 'NeWmAiL' and 'NEWMAIL' are all separate folders (i.e. folder names are case-sensitive). * bugfix; OptionsSoyMail() propagation of personal you-got-mail audio when when changing language option. * bugfix; CerealDataOut() allow ambit 3x intermediate buffer space for data that actually increases in size during cerealising (serialising). For example; a succession of short, null-terminated strings (detected due to the mail file name structure). ************ * v0.4.3 * ************ * User option [wrap-text-at] has been superceded by [massage-read]. * User option [massage-read] is a more comprehensive plain-text message 'massager' providing 1) long line wrapping, 2) removal of extra line breaks, and 3) removes any PGP/GnuPG clear-text signature armor headers (RFC2440) leading and trailing a message. * Messages [message_wrap_on] and [message_wrap_off] changed to [message_massage_on] and [message_massage_off] respectively. Message [options_soy_wrap] changed to [options_soy_massage]. * Successfully tested against "Purveyor Encrypt Export/v1.2.2 OpenVMS". Only two minor code accomodations required. Installation of soyMAIL for this platform must be performed manually. Server environment configuration requires significant understanding of Purveyor. ************ * v0.4.2 * ************ * Configuration directive [SMTP-default-host] allows a host/domain name to be automatically appended to unqualified user parts of an address. With this set entering an address of 'daniel' would result in a send to 'daniel@the.host.name'. This of course disables a default send via VMS Mail. With this directive set VMS Mail can still be used by prepending a node name to the address (e.g. '0::DANIEL', 'DELTA::DANIEL', etc.) * Logout revisited (and can't guarantee it won't be the last)!! Configuration directive [logout-realm] enables the [logout] button and functionality for the VMS Apache and OSU server environments. This is combined with logout funtionality that actually *works* :-) across the three platforms. By default the logout button is 'greyed-out' (italicised) on non-WASD platforms and if pressed provides a status panel informational explaining it's not supported for that site. See the Install and Admin document for further detail. * Dutch language message file courtesy Willem Grooters (grootersnet.nl). * Refine HTML and HTML->plain-text processing to better handle some HTML character entities (HtmlNumericDeEntify() and HtmlCharacterDeEntify()). * AttachFile() ensure any file system path is stripped from the attachment name before saving (MSIE at least supplies the full path). * LangSame() modify comparison so that the message can contain HTML entities useful in some buttons (e.g. ). This will allow some longish, non-English language button labels to be folded with a newline (at least in Firefox, Mozilla and MSIE, Opera 8.5 doesn't seem to support this). * AddressListMassage() refine address reduction (yep - again!) * bugfix; InetMailParseHeader() handling non-MIME MIME-like headers. * bugfix; ContactsSave() to empty LDIF file. * bugfix; MessageBodyIdentify() when generating plain from HTML-only content first call MimeDecProcessPart() to potentially decode it. * bugfix; MessageBodyIdentify() default a non-MIME message message to 8-bit, plain-text. ************ * v0.4.1 * ************ * OOPS! Show-stopping initialization bug described below requires a much too hasty release with a quick bump in the version designation to differentiate it for any who downloaded it yesterday. My regrets to those did :-( * HtmlSanitise() suppress "background-image" in . * bugfix; ComposeSelfAddress() 'len' initialization. Rats! ************ * v0.4.0 * ************ * A NOTE TO LANGUAGE FILE AUTHORS. Messages can be used in all sorts of contexts, particularly inside string literal quotes - both single and double. It is therefore necessary to substitute the HTML entities ", ’, etc., for anything that might be misinterpreted as JavaScript code quotes (i.e. " (0x22) and ' (0x27)). * A NOTE TO VMS APACHE SITES. There is currently an issue with SWS 2.0 and 2.1 when POSTing request bodies greater than 64kB. This potentially affects the uploading of attachment files, personal newmail audio files, and possibly editing the text of extremely large messages. This issue is currently under investigation by the HP OpenVMS Secure Web Browser/Server Project Team. * French language message file courtesy Jean-Pierre Petit (esme.fr). * Ensure detected MIME parse problems are reported by MimeDecParseBody() and all callers of the function act appropriately to suspend MIME processing on that particular message. * Remove the message count from [<<<][9_messages]{range}[>>>] dialog range button. It was observed to be a bit confusing and contributing little of informational value. * Move input focus to the field most appropriate to the stage of message composition. Default to the message body text. * The username is no longer included when generating the form action URI unless the POSTMASTER facility is in use. The URI path shown when using soyMAIL now remains something like /cgi-bin/soymail/~ rather than /cgi-bin/soymail/~DANIEL This reduces the leakage of potentially sensitive information (often the VMS username) through the HTTP "Referer:.." header if links included in email messages are selected. The user of soyMAIL is still available in local access logs via the authenticated username field. * bugfix; Old habits die slowly - do not upper-case the username component when parsing it from the path in RequestPrivate() as this can interfere with VMS external authentication. * bugfix; The self address and the "From:" RFC822 header field should be identical. ComposeSelfAddress() is now used to generate this/these addresses. * bugfix; allow MIME related headers (e.g. "Content-type:") to precede the "MIME-version:" header. Cancel the MIME interpretation if the version header is not ultimately found in the message header. ************ * v0.3.9 * ************ * Corrected the Install and Admin document Apache authorization rule to be (should check my setup rather than just imagining what it might be!) * The message display page now has an additional message disposition button panel after longer messages (currently 32 lines). * Messages [option_soy_apply] and [option_soy_restore] abbreviated. * bugfix; CgiLibEnvironmentInit() for VMS Apache SWS V2.n and later (as with Apache CSWS V1.n) freopen("mrs=16384"). This caused fwrites() (RMS, C-RTL buffer?) larger than some magic number (65535, 32767?) to fail. ************ * v0.3.8 * ************ * Support the VMS Mail copy-send/forward/reply user options in the soyMAIL compose page by appropriately adding the [SELF] address to the CC field when [reply], [reply-all], [forward] or [compose] is used. That address can be cleared from the CC field (if no copy is required for this message) and is only added the once. * As 'convenience functionality' when the new mail message count gets out of step with the actual contents of the NEWMAIL folder (as it sometime is wont to do) then reset it. Implemented by CallMailGoToNewMail(). * Refine [logout] mechanism to improve overall behaviour and avoid a hole if MSIE [cancel]s. Still no guarantees of course because this is basically a kludge that tries to hoodwink the browser into thinking it's cached credentials are no longer valid. The main menu [logout] button now has associated JavaScript confirm explaining the logout basics (see [logout_confirm] below) and allowing an opportunity to cancel. * Language file message [logout_done] removed, [logout_confirm], [logout_not] and [message_html_to_plain] added. * Configuration directive [greeting] added to allow an initial site-specific message shown in the status panel. Overrides the language file [greeting] message. * Add rudimentary HTML to plain-text conversion. This allows HTML-only messages to be read and replied-to as plain text and for sites without an HTML plug-in editor to respond to HTML messages. * Make the message type default plain-text first, then HTML if available, rather than HTML never. * [close] button now has a JavaScript confirm for compose page. * bugfix; MainMenuRequest() FOLDER_LIST_CHANGE detect 't' rather than '1'. * bugfix; CallMailMessageDelete() close mail file to empty the WASTEBASKET before continuing with request. This prevents a 'phantom' WASTEBASKET folder appearing in the folder list. * bugfix; CallMailMessageCopyMove() adjust new message count when changing contents of NEWMAIL folder regardless of whether it's a copy or a move. ************ * v0.3.7 * ************ * Wish-list; main menu [compose][^] (open in new window) button. * The main menu [compose] button should provide a blank message regardless of where it's used from (including the message read page which it didn't prior to this change), with the exception of the message composition page itself when it should propagate any in-composition message. * For child windows (basically those opened with a [^] button) have the main menu provide a [close] button. This both indicates it is not the primary soyMAIL window and provides an obvious mechanism to close it when finished. * Provide a more informative message if CallMailGetUserProfile() reports MAIL$_NOSUCHUSER because of no profile entry (e.g. new account before mail). * bugfix; MimeDecProcessPart() sanity check on pointer not length (after all you can have empty content!) * bugfix; ContactsEdit() no sanity check on un-specified contact, just memset() zero it and continue as a 'new' entry. ************ * v0.3.6 * ************ * Wish-list; optional folder buttons on left-side of message listing. These can be enabled from the options page using the "Folder buttons" selector. * Support saving message as "message/rfc822" 'attachment'. This will allow entire messages to be attached and forwarded with other messages. * Refine MimeDecParseBody() to accomodate "message/rfc822" attachments and any such internal MIME parts. This issue was reported by Frank Weichert. * Modified [reply-to] option to [smtp-from] and in conjunction with [personal-name] have ComposePageRequest() generate a "From:" header more in line (though not identical) with TCPIP$SMTP_FROM behaviour. * Add explicit [reply-to] button and field to the composition page so that messages can individually have a reply-to set against them. * ComposeMime() add client traceability information to "Received:" header and "Message-ID:" fields. These now have the format Received: from () for @ by (SOYMAIL AXP-n.n.n) with HTTP; Message-ID: ...soymail@ * Change default (non-specified) MIME transfer encoding from 7bit to 8bit. This allows sloppy/non-compliant agents a bit more latitude with non-ASCII characters (e.g. umlautes). * Bring 'normal' edit window (and message transmission) line length back from 78 characters to 72 characters (in line with netiquete 'recommendations'). * bugfix; ComposeMime() default charset should be ISO-8859-1 not IS0-8859-1 * bugfix; AttachComposeList() attachment size calculation * bugfix; RequestParsePath() attachment names can contain '/' * bugfix; SearchKeyword() lower-case the keyword! ************ * v0.3.5 * ************ Initial public (well, info-WASD) BETA release.