Class JDBCVirtualUserTable

  extended by org.apache.mailet.GenericMailet
      extended by org.apache.james.transport.mailets.AbstractVirtualUserTable
          extended by org.apache.james.transport.mailets.JDBCVirtualUserTable
All Implemented Interfaces:
Mailet, MailetConfig

public class JDBCVirtualUserTable
extends AbstractVirtualUserTable

Implements a Virtual User Table for JAMES. Derived from the JDBCAlias mailet, but whereas that mailet uses a simple map from a source address to a destination address, this handles simple wildcard selection, verifies that a catchall address is for a domain in the Virtual User Table, and handles forwarding. JDBCVirtualUserTable does not provide any administation tools. You'll have to create the VirtualUserTable yourself. The standard configuration is as follows: CREATE TABLE VirtualUserTable ( user varchar(64) NOT NULL default '', domain varchar(255) NOT NULL default '', target_address varchar(255) NOT NULL default '', PRIMARY KEY (user,domain) ); The user column specifies the username of the virtual recipient, the domain column the domain of the virtual recipient, and the target_address column the email address of the real recipient. The target_address column can contain just the username in the case of a local user, and multiple recipients can be specified in a list separated by commas, semi-colons or colons. The standard query used with VirtualUserTable is: select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user like "\%") and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like "\%" and VUTDomains.domain like ?)) order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1 For a given [user, domain, domain] used with the query, this will match as follows (in precedence order): 1. user@domain - explicit mapping for user@domain 2. user@% - catchall mapping for user anywhere 3. %@domain - catchall mapping for anyone at domain 4. null - no valid mapping You need to set the connection. At the moment, there is a limit to what you can change regarding the SQL Query, because there isn't a means to specify where in the query to replace parameters. [TODO] <mailet match="All" class="JDBCVirtualUserTable"> <table>db://maildb/VirtualUserTable</table> <sqlquery>sqlquery</sqlquery> </mailet>

Field Summary
protected  org.apache.avalon.excalibur.datasource.DataSourceComponent datasource
protected  java.lang.String query
          The query used by the mailet to get the alias mapping
Constructor Summary
Method Summary
 java.lang.String getMailetInfo()
          Returns information about the mailet, such as author, version, and copyright.
 void init()
          Initialize the mailet
protected  void mapRecipients(java.util.Map recipientsMap)
          Map any virtual recipients to real recipients using the configured JDBC connection, table and query.
Methods inherited from class org.apache.james.transport.mailets.AbstractVirtualUserTable
Methods inherited from class org.apache.mailet.GenericMailet
destroy, getInitParameter, getInitParameter, getInitParameterNames, getMailetConfig, getMailetContext, getMailetName, init, log, log
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Detail


protected org.apache.avalon.excalibur.datasource.DataSourceComponent datasource


protected java.lang.String query
The query used by the mailet to get the alias mapping

Constructor Detail


public JDBCVirtualUserTable()
Method Detail


public void init()
          throws javax.mail.MessagingException
Initialize the mailet

init in class GenericMailet
javax.mail.MessagingException - if an exception occurs that interrupts the mailet's normal operation


protected void mapRecipients(java.util.Map recipientsMap)
                      throws javax.mail.MessagingException
Map any virtual recipients to real recipients using the configured JDBC connection, table and query.

Specified by:
mapRecipients in class AbstractVirtualUserTable
recipientsMap - the mapping of virtual to real recipients


public java.lang.String getMailetInfo()
Description copied from class: GenericMailet
Returns information about the mailet, such as author, version, and copyright. By default, this method returns an empty string. Override this method to have it return a meaningful value.

Specified by:
getMailetInfo in interface Mailet
getMailetInfo in class GenericMailet
information about this mailet, by default an empty string

Copyright © 2002-2007 The Apache Software Foundation. All Rights Reserved.