【问题标题】:Send combined plain text/HTML mail with Spring and JavaMail使用 Spring 和 JavaMail 发送组合的纯文本/HTML 邮件
【发布时间】:2011-11-21 10:16:24
【问题描述】:

我目前正在使用 JavaMail 和 Spring 以 HTML 格式发送电子邮件。碰巧,HTML是由我有的一些Velocity模板生成的,发送代码大致如下:

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);

这很好用,但它发送的邮件只有一个部分为text/html。我需要的是用纯文本部分以多部分替代方式发送它。有没有办法使用 Spring 和 JavaMail 以自动方式执行此操作?


附言

在我以前使用 Visual Basic 和 CDONTS 编程时,这是内置的,但我似乎找不到使用 Java 的简单方法。纯文本版本是否好看并不重要,它必须存在。我要避免的是为此必须维护一整套 Velocity 模板。

【问题讨论】:

  • 去掉 HTML?如果不了解您的 HTML 邮件包含的内容,就很难具有超强的建设性。不过,没有什么是自动的。就个人而言,我转而对文本电子邮件使用类似 Markdown 的语法,并将其转换为 HTML。更简单,如果您不需要花哨的 HTML。否则你可能会被卡住。
  • 嗯...HTML 没有什么花哨的,只有几个<p>s 和<ul>

标签: java spring jakarta-mail mime


【解决方案1】:

为了同时发送 Text 和 HTML 部分,您需要使用不同的setText() 方法:

public void setText(String plainText, String htmlText)

如果您将 纯文本 设置为 HTML 内容,则可能需要解析 HTML 以删除 HTML 标记。

【讨论】:

  • 我明白了。 CDONTS 在 13 年前就有这个,而 JavaMail 现在没有,这似乎仍然很奇怪,但我想它们是具有不同设计方法的不同平台。哦,好吧。
  • 刚刚找到了一个从你的字符串中剥离 HTML 的帖子:stackoverflow.com/questions/240546/…
【解决方案2】:
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();
}

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 2016-06-03
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多