This is a document that records what was done between releases. As always, thank you to everyone who contributed code, documentation, bug reports, and feedback.
Released 12 May 2003
- [NjB] (code) Fixed stream handling in MimeMessageWrapper to address a JavaMail issue introduced in v2.1.2
- [NjB] (code) Fixes to AddFooter for text/html parts
- [MI,PG,NjB] (code) Fixes to AddFooter for MimeMultipart messages
- [NjB] (code) Changed ExtraDotOutputStream to enforce RFC 2821 #2.3.7
- [NjB] (code) Corrected allowable characters for localpart of address
- [NjB] (update) Removed generated files from source distributions
- [PG] (code) Corrrected handling of NNTP messages to avoid character encoding issues
- [NjB] (code) James.getId bug - courtesy of Sid Stuart
- [KS} (code) Added NNTP linecounting support
- [KS} (code) Fixed NNTP authentication
- [HJ] (code) Fixed bug 18726 (optional socket factory to specify outgoing bind address)
- [NjB] (code) Fixed bug 19418 (changed notify/wait code in spooler)
- [NjB] (code) Fixed bug 18307 (NotifySender headers)
- [NjB] (code) Fixed bug with non-InternetAddress addresses - courtesy of Steen Jansdal
- [NjB] (code) Fixed bug in NotifySender with complex MIME messages
- [SK, NjB] (code) Added Delivered-To header in LocalDelivery
- [NjB] (code) Fixed Bug 15428 - check for valid user before attempting removal
Released 21 February 2003
- [NjB] (code) Fixed handling of permanent/temporary errors in RemoteDelivery
- [NjB] (code) Fixed bug where connect error could cause outgoing mail to be discarded.
- [PG] (code) Fixed the bounce() method to add the original message as a message MIME type with an attachment disposition.
Released 11 February 2003
- [KL] (code) SMTP AUTH compatibility change
- [NjB] (code) Changed MimeMessageWrapper to use the raw stream when possible
- [NjB] (code) Fixed synchronization bug in AvalonMailRepository
- [NjB] (update) Updated Avalon LogKit
- [NjB] (code) Infinite loops are interruptable
- [HB, NjB] (code) Fixed NNTP crossposting
- [NjB] (code) Fixed synchronizaion bug in file repository
- [NjB] (code) Enabled log rotation
- [NjB] (doc) Fixed broken links
- [DA, NjB] (update) Updated JavaMail and JAF
- [NjB] (code) Updated sqlResources.xml for PostgreSQL with patch from simon
- [NjB] (code) Reorder primary key for JDBCMailRepository to optimize queries using just the repository name.
- [PG,HB] (code) NNTP dot stuffing fix
- [PG] (code) NNTP OVER/XOVER fix
- [NjB] (code) Experimental RegexMatcher classes
Released 29 December 2002
- (AK) (doc) Added LDAP RFCs.
- (PG) (code) Fixed platform-specific performance issue with the POP3 server delivery.
- (PG) (code) Fixed bug where RemoteDelivery did not iterate through all MX records on connect failure.
- (PG) (update) Updated James to use the Avalon Framework version 4.1.3.
- (PG) (update) Updated James to use Avalon Phoenix version 4.0.1.
- (PG) (doc) Added extensive commenting - specifically Javadoced the vast majority of methods.
- (PG,AI) (code) Added a James specific abstract Service implementation. Unified configuration, logging, as well as enabling the use of thread pools and socket types on a per service basis.
- (NjB) (code) Corrected JDBCMailRepository to obey stated contract.
- (NjB,PG) (code) Adjusted service handlers to flush socket output streams to ensure prompt client interactions.
- (PG) (code) Adjusted the NNTP server so that it better conforms to the NNTP specification (see bug #13564 for details).
- (PG) (code) Corrected a typo that had been disabling NNTP using SSL functionality.
- (PG) (code) Corrected an architectural flaw in the NNTP server implemenation that disabled NNTP authentication.
- (NjB) (code) Fixed a bug in the GenericListserv subject normalization. Neatened the code to make later modifications easier.
- (BW) (code) Fixed a bug in the RemoteDelivery mailet that caused the mailet to unnecessarily split the recipient list when using a gateway.
- (NjB,PG) (code) Added object pooling for service handlers to substantially improve performance.
- (AI,PG) (code) Added a new Watchdog interface to effectively support connection timeouts. An implementation of the interface was added that uses a second thread per connection to ensure timeouts.
- (NjB,PG) (code) Resolved a memory leak in the source - a list of files to be deleted was being maintained that was unnecessary. The file to be deleted is now deleted immediately after it is no longer needed.
- (PG) (code) Changed the code to ensure that all thread pool threads are returned to the thread pool in a non-interrupted state.
- (PG) (code) Centralized the file/directory lookup code inside James and fixed it so that it handled absolute URLs properly.
- (AI,PG) (code) Added a more substantial connection manager. This connection manager allows us to limit the maximum number of client connections per server socket. It also allows us to set the socket timeout for client sockets explicitly.
- (DA,PG) (code) Added enabled/disabled switch to main server components.
- (DA) (code) Added new FetchPOP functionality, to allow James to consolidate mail from a number of POP3 servers in a single server.
- (DA) (doc) Added documentation to demonstrate how to configure James as a universal sendmail relay.
- (NjB) (code) Made subject prefix bracketing in GenericListserv configurable.
- (NjB) (code) Added the HasHeader matcher.
- (NjB) (code) Added the JDBCVirtualUserTable mailet.
- (NjB) (code) Enhanced the RemoteAddrInNetwork and RemoteAddrNotInNetwork to accept domain names.
- (PG) (update) Fixed the log configuration so that AM and PM entries are properly distinguishable by default.
- (NjB) (code) Added a configurable debug parameter to several mailets to allow a more granular control of debug logging.
- (NjB) (code) Added the Habeas warrant mailet and matcher.
- (NjB,PG) (update) Changed the server configuration to default log at INFO level. Adjusted logging statements so that they are log level appropriate.
- (PG) (code) Fixed a critical bug in the dbfile implementation. Fixed repository implementation so that db repositories do not behave as dbfile repositories.
- (NjB) (code) Fixed MimeMessageWrapper so that mail headers are properly updated when headers are set on the wrapper.
- (PG) (code) Added UNSETFORWARDING functionality to the RemoteManager.
- (PG) (code) Closed an open relay hole involving an empty Sender header.
- (PG) (code) Fixed Oracle specific bug that limited us to messages of 4K or less in the repository.
- (SS,NjB,PG) (code) Ensured that a number of database and I/O resources are properly closed under all conditions.
- (NjB) (code) Changed default column sizes for JDBC repositories to be RFC compliant.
- (NjB) (code) Fixed exception handling in JdbcDataSource when getConnection() fails.
- (PG) (code) Fixed NotifySender/NotifyPostmaster to be more robust against ill-formed headers in the email being forwarded.
- (SD,SS3) (code) Made a substantial performance enhancement to the LinearProcessor such that mail changes are not persisted to the store until necessary. Also reduced synchronization scope.
- (PG) (code) Converted String concatenation to the use of StringBuffers throughout the code base.
- (PG) (code) Fixed date formatting to be thread safe.
- (NjB) (code) Fixed InSpammerBlacklist
- (PH) (update) Upgrade James to the Avalon 4.0/4.1 actual releases.
- (NjB,SK) (update) Fixed MailImpl.duplicate to include remote addr, remote host, and last updated fields.
- (CB2) (update) Fixed NNTP server bug where the NEXT command was not being properly dispatched and handled.
- (SK) (update) Cleaned up error handling in LocalDelivery.
- (SS2) (code) Changed the default configuration so that log files are appending by default.
- (SS2) (update) Reported the lack of in.close in MimeMessageSource.getSize(), which was causing stranded file handles, especially during large POP3 sessions.
- (AI) (update) Matcher config implementation object now properly set with matcher name.
Released 20 April 2002
- (DA) (update) Fixed POP3 message size bug that prevented retrieval
- (SK) (code) FileRepository should no longer produce 0-byte files. It checks that the source is different than the target, or confirm it is in memory before saving to disk.
- (SK) (update) Removed check that connection is not closed before returning it. The pooler is already confirming the connection was open before putting it in the pool, so this was a big unnecessary performance drain.
- (SK) (update) Fixed the delay in the JDBC mail spool repository as it wasn't rechecking correctly after it emptied the spool.
- (SS2) (code) Added dot-stuffing in POP3 message delivery to fix problems with Netscape and other mail clients and to comply with RFC.
- (JK) (code) Fixed bounce method to use the Return-Path header if there is one.
- (SK) (update) Improved handling of delivery error messages when the remote server returns a specific 5XY complaint.
- (SK) (code) Better diagnosing of temporary vs. permanent delivery exceptions, most notably "Could not connect to host.." is a temporary exception.
- (SK) (code) Remote SMTP delivery now sets the remote hostname using the servername configuration setting (uses the first one).
- (SK) (update) Have it cleanly (not print stack trace) if the remote manager handler has io/socket exceptions.
- (SK) (update) Support in "IsSenderInFakeDomain" to handle null senders properly (was producing a false positive in this case).
- (PH) (update) Added releaseConnection method to BaseConnectionHandler as per Paul H's bug report.
- (SK) (update) Reordered 250 SMTP responses to fix Mac client issue per Giles Chanot's bug report.
Released 1 December 2001
- (*) (update) Moved to Avalon snapshot of November 2001
- (DA) (update) Fixed POP3 message size bug that prevented retrieval
- (SK) (code) Added Mordred database connection pooling. It is the marriage of Town's db pooling code and Excalibur's configuration.
- (SK) (update) Changed MailImpl.getSize() to getMessageSize() and from int to long.
- (SK) (docs) Small updates to documentation
- (SK) (code) Added JDBCListserv, straight JDBC implementation of old TownListserv that extends GenericListserv
- (SK) (update) Patched bug in GenericListserv for when subject was null
- (SK) (update) Got mailets/matchers to load from something besides james.bar
- (SK) (code) Added scheduler notification during SMTP DATA reception and POP3 RETR sending so the connection handler doesn't time out connection while data is being transfered.
- (SK) (code) Support <gatewayPort> setting on RemoteDelivery to send all messages to a non-port 25 SMTP server. Only makes sense when <gateway> is also set.
- (EP) (update) Used getAsBooleanValue in various configuration methods to make code more readable.
- (SS) (update) Added support for Oracle database for mail and spool JDBC repositories.
Released 26 October 2001
- (CB,*) (update) Moved to Avalon snapshot of 9-25-2001.
- (HB) (code) Added NNTP service.
- (SK) (update) Greatly improved multi-threading support for repositories and SMTP reception.
- (JB) (code) SMTP AUTH support
- (SK) (update) Support null senders, i.e., MAIL RCPT: <>.
- (DD,SK) (update) Converted Town mail and user repositories to straight JDBC ones, using Excalibur connection pooling and configurable SQL statements per DB.
- (SK) (update) Messages are no longer loaded until absolutely necessary.
- (GB) (update) Fixed exception being thrown on MailAddress parsing.
- (CB) (update) Rebuilt CVS tree after hack and moved src to src/java.
- (DA) (code) New extensible, flexible Redirect mailet that handles notifications and forwarding.
- (SK) (code) JDBC Alias mailet.
- (various) (docs) Added a whole bunch of related RFCs to the webdocs.
- (DA) (update) Add date to bounced emails.
- (HB) (update) Updated DNS library and started process to move it to Avalon service.
- (various) (update) More checks to fix "stuck file" problem in Avalon mail repository.
- (MP) (code) Limit the size of a message on reception (rather than waiting until processors).
- (SK) (update) Fixed dot-stuffing in SMTP reception/delivery.
- (SK) (update) Improved how Return-Path and Received headers are generated during SMTP reception.
- (SK) (update) More efficient remote delivery code, better error messages, and gateway parameter to route all messages to a single target.
- (DA) (update) Fixed timezone bug in RFC822DateFormat
- (MP) (update) Patch to support username@[yyy.yyy.yyy.yyy] addresses
- (GB) (update) Patch to fix size calculation from headers
- (RS) (image) Contributed James logo
- (SK) (update) Changed MailetException to extend MessagingException, and Mailet.init() throws MailetException.
Released 13 December 2000
- (SK,SR,CB) (update) Fix for "stuck file" problem in Avalon mail repository.
- (SK) (design) Made usernames case insensitive on MailAddress
- (SK) (code) Complete rewrite of processor code to send through Mail object through matchers and mailets. Design might be less efficient but easier to understand and more flexible for later improvements to API. Also no longer "loses" IP address and error message information when Mail object go from one processor/state to the next (ToProcessor changed as well now that processor works).
- (SK) (update) Updated to JavaMail 1.2
- (SK) (update) Changed instantiation of recipients on a Mail object to a Set (HashSet) whenever possible in preparation for the API having this change.
- (IS) (code) Added UsersTownRepository to let you maintain user lists in a database
- (SR) (update) In POP3 handler, properly includes headers in calculating size of messages.
- (SK) (update) Removed "synchronized" attribute on many methods in town and file spool repositories. Should significantly boost performance and multithreaded capabilities.
- (SK) (code) Optimization of town mail repository, introduction of JamesMimeMessageInputStream and the James MimeMessage. Should significantly reduce the number of unnecessary parses or saves on MimeMessages in server.
- (SR) (update) Properly calculates hashCode for MailAddress so duplicates do not exist in Hashmaps
- (SR) (update) Hardcoded serialVerUID on MailAddress and MailImpl to that of James 1.2 release so future releases can continue to use mail stored in earlier releases.
- (IS) (update) Added ability on NotifySender and NotifyPostmaster to attach informative notice.
- (SK) (update) GenericListservManager now requires existsAddress() which it uses to prevent someone already on the list from subscribing or someone not on the list from removing themselves.
- (SK) (update) Changed User repository for file to *always* end the destination with a File.separator. Otherwise if people mixed usage of this, it would crash the repositories with confusing error messages. Child repositories were already properly created with a terminating File.separator.
- (SK) (code) New matcher: IsSingleRecipient
- (SK) (code) Added spam blacklist checking for 3 spam blacklists that make this available in a simple DNS lookup check. All free services through mail-abuse.org. Added to default configuration in config.xml
- (PU) (code) Added first testing program. This would recreate file stuck problem. Would be good to build collection of testing utilities in this new package.
- (SK) (docs) Documented what all the jars are in the lib directory (what they're called, where they're from)
Released 16 October 2000
- (SK) (design) Abstracted mailet API to be Avalon (implementation) independent
- (CB) (code) Abstracted mail repository in JAMES/Avalon to allow more varied implementations.
- (SK) (code) Database implementations of mail repositories
- (SK) (code) Changed remote delivery to use an outgoing spool with a specified number of delivery threads
- (CB) (code) Experimental implementation of LDAP user manager
- (SK) (update) Reworked mailets and matchers to fit new API and added many more classes
- (CB, SK) (update) Fixed some bugs in POP3 server
- (CB) (update) Added full TLS support in POP3 (POP3S)
- (SK) (update) Fixed sorting of MX records so it attempts delivery in correct order
- (SK) (update) Changed remote manager to not allow a login if an admin account's password is empty,
and sets the root account's password empty by default (so you have to set one... prevents someone
from knowing the password to your system out of the box)
Release 27 July 2000
- (??) (code) Unknown changes
- (SK) (code) Made DNS functionality a separate block
Released 26 February 2000
- (SK, FB) (code) Added DNS stuff to remote delivery.
- (FB) (code) Add some autodetect support for easier configuration.
- (FB) (code) Add support for Mailet.
- (FB) (update) Add Mailet interface draft.
Released early 2000
- (FB) (update) Split the SMTP Server in a protocol handler and a MailServer available to
all Avalon blocks.
- (FB) (update) Tune MessageContainer class.
Unknown release date
- (FB) (update) Based on much code from Serge Knystautas first implementation of JAMES on
top of the Avalon framework.
Check out our Who We Are page to see who to thank.