How to insert table in mail with java mail service

Inserting a table in an email using JavaMail service can be a bit tricky, but it's doable. Here's a step-by-step guide to help you achieve this:

Step 1: Create a table as a HTML string

First, you need to create a table as a HTML string. You can use a library like Apache POI to generate the table, or you can create it manually. Here's an example of a simple table:

<table border="1" cellpadding="5" cellspacing="0">
  <tr>
    <th>Column 1</th>
    <th>Column 2</th>
  </tr>
  <tr>
    <td>Row 1, Cell 1</td>
    <td>Row 1, Cell 2</td>
  </tr>
  <tr>
    <td>Row 2, Cell 1</td>
    <td>Row 2, Cell 2</td>
  </tr>
</table>

Step 2: Create a MimeMessage

Next, you need to create a MimeMessage object using JavaMail API. You can do this by creating a MimeMessage object and setting its content type to text/html.

import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

// Create a MimeMessage object
MimeMessage message = new MimeMessage(session);

// Set the content type to text/html
message.setContentType("text/html");

Step 3: Set the table as the email body

Now, you need to set the table as the email body. You can do this by creating a MimeBodyPart object and setting its content to the HTML table string.

// Create a MimeBodyPart object
MimeBodyPart bodyPart = new MimeBodyPart();

// Set the content to the HTML table string
bodyPart.setContent(tableHtmlString, "text/html");

Step 4: Add the body part to the message

Finally, you need to add the body part to the message. You can do this by creating a Multipart object and adding the body part to it.

// Create a Multipart object
Multipart multipart = new MimeMultipart();

// Add the body part to the multipart
multipart.addBodyPart(bodyPart);

// Set the multipart as the message body
message.setContent(multipart);

Step 5: Send the email

Now, you can send the email using the Transport object.

// Send the email
Transport.send(message);

Here's the complete code:

import javax.mail.*;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.util.Properties;

public class SendEmailWithTable {
    public static void main(String[] args) {
        // Create a Properties object
        Properties props = new Properties();
        props.put("mail.smtp.host", "your-smtp-host");
        props.put("mail.smtp.port", "your-smtp-port");
        props.put("mail.smtp.auth", "true");

        // Create a Session object
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your-email", "your-password");
            }
        });

        // Create a MimeMessage object
        MimeMessage message = new MimeMessage(session);

        // Set the content type to text/html
        message.setContentType("text/html");

        // Create a table as a HTML string
        String tableHtmlString = "<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n" +
                "  <tr>\n" +
                "    <th>Column 1</th>\n" +
                "    <th>Column 2</th>\n" +
                "  </tr>\n" +
                "  <tr>\n" +
                "    <td>Row 1, Cell 1</td>\n" +
                "    <td>Row 1, Cell 2</td>\n" +
                "  </tr>\n" +
                "  <tr>\n" +
                "    <td>Row 2, Cell 1</td>\n" +
                "    <td>Row 2, Cell 2</td>\n" +
                "  </tr>\n" +
                "</table>";

        // Create a MimeBodyPart object
        MimeBodyPart bodyPart = new MimeBodyPart();

        // Set the content to the HTML table string
        bodyPart.setContent(tableHtmlString, "text/html");

        // Create a Multipart object
        Multipart multipart = new MimeMultipart();

        // Add the body part to the multipart
        multipart.addBodyPart(bodyPart);

        // Set the multipart as the message body
        message.setContent(multipart);

        // Send the email
        Transport.send(message);
    }
}

Note that you need to replace the placeholders (your-smtp-host, your-smtp-port, your-email, and your-password) with your actual email settings.