JavaMail File Transport

The JavaMail File Transport allows you to send mail using a "file" protocol, which will instead write the data out to a text file in a directory you specify, which can then be read and examined.

License

License

Categories

Categories

Net
GroupId

GroupId

net.lshift.javamail
ArtifactId

ArtifactId

javamail-file-transport
Last Version

Last Version

1.0
Release Date

Release Date

Type

Type

jar
Description

Description

JavaMail File Transport
The JavaMail File Transport allows you to send mail using a "file" protocol, which will instead write the data out to a text file in a directory you specify, which can then be read and examined.
Project URL

Project URL

http://github.com/lshift/javamail-file-transport
Source Code Management

Source Code Management

https://github.com/lshift/javamail-file-transport

Download javamail-file-transport

How to add to project

<!-- https://jarcasting.com/artifacts/net.lshift.javamail/javamail-file-transport/ -->
<dependency>
    <groupId>net.lshift.javamail</groupId>
    <artifactId>javamail-file-transport</artifactId>
    <version>1.0</version>
</dependency>
// https://jarcasting.com/artifacts/net.lshift.javamail/javamail-file-transport/
implementation 'net.lshift.javamail:javamail-file-transport:1.0'
// https://jarcasting.com/artifacts/net.lshift.javamail/javamail-file-transport/
implementation ("net.lshift.javamail:javamail-file-transport:1.0")
'net.lshift.javamail:javamail-file-transport:jar:1.0'
<dependency org="net.lshift.javamail" name="javamail-file-transport" rev="1.0">
  <artifact name="javamail-file-transport" type="jar" />
</dependency>
@Grapes(
@Grab(group='net.lshift.javamail', module='javamail-file-transport', version='1.0')
)
libraryDependencies += "net.lshift.javamail" % "javamail-file-transport" % "1.0"
[net.lshift.javamail/javamail-file-transport "1.0"]

Dependencies

compile (1)

Group / Artifact Type Version
javax.mail : mail jar 1.4.1

test (1)

Group / Artifact Type Version
junit : junit jar 4.8.1

Project Modules

There are no modules declared in this project.

JavaMail File Transport

When developing applications that send mail, it is often desirable to be able to test the mail sending code. Generally, this requires a functioning mail server setup.

The JavaMail File Transport allows you to send mail using a "file" protocol, which will instead write the data out to a text file in a directory you specify, which can then be read and examined.

As an example, if you were to create and send a mail message with:

public class SendAMailTest {
  public void sendTestMessage() {
	Properties props = new Properties();
	props.put("mail.transport.protocol", "file");
	props.put("mail.from", "[email protected]");
	props.put("mail.senderName", "Test Sender");
	props.put("mail.debug", true);
	props.put("mail.file.dir", "messages");
	
	Session session = Session.getInstance(props);
	MimeMessage message = new MimeMessage(session);
	message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
	message.setSubject("Subject");
	message.setText("Body");

	session.getTransport().sendMessage(message, message.getAllRecipients());
  }
}

Then a file would be created in messages/ using a random UUID and a .msg suffix.

Isolating Mail Configuration from your app

A common pattern is often to inject a mail session in via JNDI. This transport works especially well for that, since it allows your application to be completely agnostic of the mail transport, and for the provided jar to only be used in test scenarios.

For a Jetty application, if the WebAppContext was being configured, a sample context might be injected with configuration such as:

  <New id="mail" class="org.eclipse.jetty.plus.jndi.Resource">
	<Arg>mail/Session</Arg>
	<Arg>
	  <New class="org.eclipse.jetty.jndi.factories.MailSessionReference">
		<Set name="user"></Set>
		<Set name="password"></Set>
		<Set name="properties">
		  <New class="java.util.Properties">
			<Put name="mail.transport.protocol">file</Put>
			<Put name="mail.smtp.host">localhost</Put>
			<Put name="mail.from">[email protected]</Put>
			<Put name="mail.senderName">My Application</Put>
			<Put name="mail.file.dir">target/messages</Put>
		  </New>
		</Set>
	  </New>
	</Arg>
  </New>

Usage With Maven Jetty Plugin

The following fragment shows how the transport is configured with the Maven Jetty plugin:

org.mortbay.jetty jetty-maven-plugin
      <!-- OTHER DEPENDENCIES THAT SHOULD GO INTO JETTY'S LOAD PATH -->          

      <dependency>
        <groupId>net.lshift.javamail</groupId>
        <artifactId>javamail-file-transport</artifactId>
        <version>1.0</version>
      </dependency>

    </dependencies>

    <configuration>
      <systemProperties>
        <systemProperty>
          <name>JETTY_NO_SHUTDOWN_HOOK</name>
          <value>true</value>
        </systemProperty>
        <systemProperty>
          <name>basedir</name>
          <value>${basedir}</value>
        </systemProperty>
        <systemProperty>
          <name>diffa.maildir</name>
          <value>${basedir}/target/messages</value>
        </systemProperty>
      </systemProperties>
      <connectors>
        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
          <port>19093</port>
          <maxIdleTime>60000</maxIdleTime>
        </connector>
      </connectors>
      <scanIntervalSeconds>600</scanIntervalSeconds>
      <stopKey>foo</stopKey>
      <stopPort>19094</stopPort>
      <jettyConfig>${basedir}/src/test/conf/jetty.xml</jettyConfig>
      <webAppXml>${basedir}/src/test/conf/jetty-env.xml</webAppXml>
      <webAppConfig>
        <contextPath>/some-context-path</contextPath>
      </webAppConfig>
    </configuration>
    <executions>
      <execution>
        <id>start-jetty</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <scanIntervalSeconds>0</scanIntervalSeconds>
          <daemon>true</daemon>
        </configuration>
      </execution>
      <execution>
        <id>stop-jetty</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>stop</goal>
        </goals>
      </execution>
    </executions>

License

Copyright 2010 LShift Ltd

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
net.lshift.javamail

LShift

Versions

Version
1.0