MailSessionFactorypublic class MailSessionFactory extends Object implements ObjectFactoryFactory class that creates a JNDI named JavaMail Session factory,
which can be used for managing inbound and outbound electronic mail
messages via JavaMail APIs. All messaging environment properties
described in the JavaMail Specification may be passed to the Session
factory; however the following properties are the most commonly used:
-
- mail.smtp.host - Hostname for outbound transport
connections. Defaults to
localhost if not specified.
This factory can be configured in a <DefaultContext>
or <Context> element in your conf/server.xml
configuration file. An example of factory configuration is:
<Resource name="mail/smtp" auth="CONTAINER"
type="javax.mail.Session"/>
<ResourceParams name="mail/smtp">
<parameter>
<name>factory</name>
<value>org.apache.naming.factory.MailSessionFactory</value>
</parameter>
<parameter>
<name>mail.smtp.host</name>
<value>mail.mycompany.com</value>
</parameter>
</ResourceParams>
|
Fields Summary |
---|
protected static final String | factoryTypeThe Java type for which this factory knows how to create objects. |
Methods Summary |
---|
public java.lang.Object | getObjectInstance(java.lang.Object refObj, javax.naming.Name name, javax.naming.Context context, java.util.Hashtable env)Create and return an object instance based on the specified
characteristics.
// Return null if we cannot create an object of the requested type
final Reference ref = (Reference) refObj;
if (!ref.getClassName().equals(factoryType))
return (null);
// Create a new Session inside a doPrivileged block, so that JavaMail
// can read its default properties without throwing Security
// exceptions.
//
// Bugzilla 31288, 33077: add support for authentication.
return AccessController.doPrivileged( new PrivilegedAction() {
public Object run() {
// Create the JavaMail properties we will use
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "localhost");
String password = null;
Enumeration attrs = ref.getAll();
while (attrs.hasMoreElements()) {
RefAddr attr = (RefAddr) attrs.nextElement();
if ("factory".equals(attr.getType())) {
continue;
}
if ("password".equals(attr.getType())) {
password = (String) attr.getContent();
continue;
}
props.put(attr.getType(), (String) attr.getContent());
}
Authenticator auth = null;
if (password != null) {
String user = props.getProperty("mail.smtp.user");
if(user == null) {
user = props.getProperty("mail.user");
}
if(user != null) {
final PasswordAuthentication pa = new PasswordAuthentication(user, password);
auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return pa;
}
};
}
}
// Create and return the new Session object
Session session = Session.getInstance(props, auth);
return (session);
}
} );
|
|