org.apache.james.transport.mailets
Class JDBCVirtualUserTable

java.lang.Object
  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
JDBCVirtualUserTable()
           
 
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
service
 
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

datasource

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

query

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

Constructor Detail

JDBCVirtualUserTable

public JDBCVirtualUserTable()
Method Detail

init

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

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

mapRecipients

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
Parameters:
recipientsMap - the mapping of virtual to real recipients
Throws:
javax.mail.MessagingException

getMailetInfo

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
Overrides:
getMailetInfo in class GenericMailet
Returns:
information about this mailet, by default an empty string


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