Question

I'm currently using JavaMail and Spring to send email in HTML. As it happens, the HTML is generated by some Velocity templates I have, and the sending code is roughly as follows:

MimeMessagePreparator preparator = new MimeMessagePreparator() {

    @Override public void prepare(MimeMessage mimeMessage) throws Exception {
            MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8");

            message.setSubject(msgInfo.getSubject());
            message.setFrom(msgInfo.getFrom());
            message.setReplyTo(msgInfo.getFrom());
            message.setTo(address);
            message.setText(someText, true);
    }
}

mailSender.send(preparator);

This works just fine, but it sends the mail with only a single part as text/html. What I need is to send it in multipart alternative with a plain text part. Is there a way, using Spring and JavaMail, to do this in an automatic way?


P.S.

In a former life when I programmed with Visual Basic and CDONTS this was built-in, but I can't seem to find a simple way to do it with Java. It's not terribly important that the plain text version look good, it just has to exist. What I'm trying to avoid is having to maintain a whole second set of Velocity templates just for this.

Was it helpful?

Solution

In order to send both Text and HTML parts, you need to use a different setText() method:

public void setText(String plainText, String htmlText)

If you are setting the plain text to your HTML content, you may need to parse the HTML to remove the HTML tags.

OTHER TIPS

try {

    // Email data
    String Email_Id = "samarthaniket16@gmail.com"; // change to your
                                                    // email ID
    String password = "Your PSWD"; // change to your password
    String recipient_mail_id = "samarthaniket16@gmail.com"; // change to
                                                            // recipient
                                                            // email id
    String mail_subject = "Attendance Report";

    // Set mail properties
    Properties props = System.getProperties();
    String host_name = "smtp.gmail.com";
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", host_name);
    props.put("mail.smtp.user", Email_Id);
    props.put("mail.smtp.password", password);
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.auth", "true");

    Session session = Session.getDefaultInstance(props);
    MimeMessage message = new MimeMessage(session);

    try {
        // Set email data
        message.setFrom(new InternetAddress(Email_Id));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient_mail_id));
        message.setSubject(mail_subject);
        MimeMultipart multipart = new MimeMultipart();
        BodyPart messageBodyPart = new MimeBodyPart();

        // Set key values
        Map<String, String> input = new HashMap<String, String>();
        input.put("User", name.toString());
        input.put("Date", date1);
        input.put("Content In", "English");
        input.put("Absent", absentUser);

        // HTML mail content
        // String htmlText =
        // readEmailFromHtml("/home/techwalnut-pc/mailTemplate.html",
        // input);
        String htmlText = readEmailFromHtml(
                "/home/techwalnut-pc/Development/Aniket/Techwalnut/Project/Java/Spring/Attendance_system/mailTemplate.html",
                input);
        messageBodyPart.setContent(htmlText, "text/html");

        multipart.addBodyPart(messageBodyPart);
        message.setContent(multipart);

        // Conect to smtp server and send Email
        Transport transport = session.getTransport("smtp");
        transport.connect(host_name, Email_Id, password);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
        System.out.println("Mail sent successfully...");

    } catch (MessagingException ex) {
    } catch (Exception ae) {
        ae.printStackTrace();
    }
} catch (Exception exception) {
   exception.printStackTrace();
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top