org.apache.james.transport.mailets
Class JDBCVirtualUserTable
java.lang.Object
org.apache.mailet.base.GenericMailet
org.apache.james.transport.mailets.AbstractVirtualUserTable
org.apache.james.transport.mailets.JDBCVirtualUserTable
- All Implemented Interfaces:
- org.apache.mailet.Mailet, org.apache.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 |
Method Summary |
java.lang.String |
getMailetInfo()
|
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.mailet.base.GenericMailet |
arrayToString, checkInitParameters, destroy, getInitParameter, 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 |
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
JDBCVirtualUserTable
public JDBCVirtualUserTable()
init
public void init()
throws javax.mail.MessagingException
- Initialize the mailet
- Overrides:
init
in class org.apache.mailet.base.GenericMailet
- Throws:
javax.mail.MessagingException
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()
- Specified by:
getMailetInfo
in interface org.apache.mailet.Mailet
- Overrides:
getMailetInfo
in class org.apache.mailet.base.GenericMailet
Copyright ? 2002-2009 The Apache Software Foundation. All Rights Reserved.