org.apache.james.transport.mailets
Class JDBCVirtualUserTable
java.lang.Object
org.apache.mailet.GenericMailet
org.apache.james.transport.mailets.AbstractVirtualUserTable
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 |
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 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 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.