Send an email

The JavaMail API is used to send emails:

The JavaMail packages can be accessed in two ways:

The JavaMail API uses a properties file for reading server names and related configuration. These settings will override any system defaults. Alternatively, the configuration can be set directly in code, using the JavaMail API.


An email configuration file (to run the example, substitute valid values for the uncommented items):

# Configuration file for javax.mail
# If a value for an item is not provided, then
# system defaults will be used. These items can
# also be set in code.

# Host whose mail services will be used
# (Default value : localhost)

# Return address to appear on emails
# (Default value : username@host)

# Other possible items include:
# mail.user=
# mail.transport.protocol=
# mail.smtp.user=
# mail.debug=

A class which uses this file to send an email:

import java.util.*;
import java.nio.file.*;
import javax.mail.*;
import javax.mail.internet.*;

* Simple demonstration of using the javax.mail API.
* Run from the command line. Please edit the implementation
* to use correct email addresses and host name.
public final class Emailer {

  public static void main( String... aArguments ){
    Emailer emailer = new Emailer();
    //the domains of these email addresses should be valid,
    //or the example will fail:
      "", "",
       "Testing 1-2-3", "blah blah blah"

  * Send a single email.
  public void sendEmail(
    String aFromEmailAddr, String aToEmailAddr,
    String aSubject, String aBody
    //Here, no Authenticator argument is used (it is null).
    //Authenticators are used to prompt the user for user
    //name and password.
    Session session = Session.getDefaultInstance(fMailServerConfig, null);
    MimeMessage message = new MimeMessage(session);
    try {
      //the "from" address may be set in code, or set in the
      //config file under "mail.from" ; here, the latter style is used
      //message.setFrom(new InternetAddress(aFromEmailAddr));
        Message.RecipientType.TO, new InternetAddress(aToEmailAddr)
    catch (MessagingException ex){
      System.err.println("Cannot send email. " + ex);

  * Allows the config to be refreshed at runtime, instead of
  * requiring a restart.
  public static void refreshConfig() {


  private static Properties fMailServerConfig = new Properties();

  static {

  * Open a specific text file containing mail server
  * parameters, and populate a corresponding Properties object.
  private static void fetchConfig() {
    //This file contains the javax.mail config properties mentioned above.
    Path path = Paths.get("C:\\Temp\\MyMailServer.txt");
    try (InputStream input = Files.newInputStream(path)) {
    catch (IOException ex){
      System.err.println("Cannot open and load mail server properties file.");

See Also :
Launch other applications