Java – Sending Email

To send an e-mail using your Java Application is simple enough but to start with you should haveJavaMail API and Java Activation Framework (JAF) installed on your machine.

Download and unzip these files, in the newly created top level directories you will find a number of jar files for both the applications. You need to add mail.jar and activation.jar files in your CLASSPATH.

Send a Simple E-mail

Here is an example to send a simple e-mail from your machine. It is assumed that your localhost is connected to the Internet and capable enough to send an e-mail.

Example

// File Name SendEmail.javaimport java.util.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;publicclassSendEmail{publicstaticvoid main(String[] args){// Recipient's email ID needs to be mentioned.String to ="abcd@gmail.com";// Sender's email ID needs to be mentionedStringfrom="web@gmail.com";// Assuming you are sending email from localhostString host ="localhost";// Get system propertiesProperties properties =System.getProperties();// Setup mail server
      properties.setProperty("mail.smtp.host", host);// Get the default Session object.Session session =Session.getDefaultInstance(properties);try{// Create a default MimeMessage object.MimeMessage message =newMimeMessage(session);// Set From: header field of the header.
         message.setFrom(newInternetAddress(from));// Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));// Set Subject: header field
         message.setSubject("This is the Subject Line!");// Now set the actual message
         message.setText("This is actual message");// Send messageTransport.send(message);System.out.println("Sent message successfully....");}catch(MessagingException mex){
         mex.printStackTrace();}}}

Compile and run this program to send a simple e-mail −

Output

$ java SendEmail
Sent message successfully....

If you want to send an e-mail to multiple recipients then the following methods would be used to specify multiple e-mail IDs −

void addRecipients(Message.RecipientType type, Address[] addresses)
   throws MessagingException

Here is the description of the parameters −

  • type − This would be set to TO, CC or BCC. Here CC represents Carbon Copy and BCC represents Black Carbon Copy. Example:Message.RecipientType.TO

  • addresses − This is an array of e-mail ID. You would need to use InternetAddress() method while specifying email IDs.

Send an HTML E-mail

Here is an example to send an HTML e-mail from your machine. Here it is assumed that yourlocalhost is connected to the Internet and capable enough to send an e-mail.

This example is very similar to the previous one, except here we are using setContent() method to set content whose second argument is “text/html” to specify that the HTML content is included in the message.

Using this example, you can send as big as HTML content you like.

Example

// File Name SendHTMLEmail.javaimport java.util.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;publicclassSendHTMLEmail{publicstaticvoid main(String[] args){// Recipient's email ID needs to be mentioned.String to ="abcd@gmail.com";// Sender's email ID needs to be mentionedStringfrom="web@gmail.com";// Assuming you are sending email from localhostString host ="localhost";// Get system propertiesProperties properties =System.getProperties();// Setup mail server
      properties.setProperty("mail.smtp.host", host);// Get the default Session object.Session session =Session.getDefaultInstance(properties);try{// Create a default MimeMessage object.MimeMessage message =newMimeMessage(session);// Set From: header field of the header.
         message.setFrom(newInternetAddress(from));// Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));// Set Subject: header field
         message.setSubject("This is the Subject Line!");// Send the actual HTML message, as big as you like
         message.setContent("<h1>This is actual message</h1>","text/html");// Send messageTransport.send(message);System.out.println("Sent message successfully....");}catch(MessagingException mex){
         mex.printStackTrace();}}}

Compile and run this program to send an HTML e-mail −

Output

$ java SendHTMLEmail
Sent message successfully....

Send Attachment in E-mail

Here is an example to send an e-mail with attachment from your machine. Here it is assumed that your localhost is connected to the internet and capable enough to send an e-mail.

Example

// File Name SendFileEmail.javaimport java.util.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;publicclassSendFileEmail{publicstaticvoid main(String[] args){// Recipient's email ID needs to be mentioned.String to ="abcd@gmail.com";// Sender's email ID needs to be mentionedStringfrom="web@gmail.com";// Assuming you are sending email from localhostString host ="localhost";// Get system propertiesProperties properties =System.getProperties();// Setup mail server
      properties.setProperty("mail.smtp.host", host);// Get the default Session object.Session session =Session.getDefaultInstance(properties);try{// Create a default MimeMessage object.MimeMessage message =newMimeMessage(session);// Set From: header field of the header.
         message.setFrom(newInternetAddress(from));// Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));// Set Subject: header field
         message.setSubject("This is the Subject Line!");// Create the message part BodyPart messageBodyPart =newMimeBodyPart();// Fill the message
         messageBodyPart.setText("This is message body");// Create a multipar messageMultipart multipart =newMimeMultipart();// Set text message part
         multipart.addBodyPart(messageBodyPart);// Part two is attachment
         messageBodyPart =newMimeBodyPart();String filename ="file.txt";DataSource source =newFileDataSource(filename);
         messageBodyPart.setDataHandler(newDataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);// Send the complete message parts
         message.setContent(multipart );// Send messageTransport.send(message);System.out.println("Sent message successfully....");}catch(MessagingException mex){
         mex.printStackTrace();}}}

Compile and run this program to send an HTML e-mail −

Output

$ java SendFileEmail
Sent message successfully....

User Authentication Part

If it is required to provide user ID and Password to the e-mail server for authentication purpose, then you can set these properties as follows −

props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");

Rest of the e-mail sending mechanism would remain as explained above.

Leave a comment