【问题标题】:How to insert for statement in java email message如何在java电子邮件中插入for语句
【发布时间】:2013-10-31 12:43:05
【问题描述】:

我创建了一个动态追加行的 html 页面。 我创建了一个字符串数组来将值放入 servlet。 现在,我正在尝试向自己发送一封包含所有这些价值观的电子邮件。 为此,我在我的 servlet 中使用 java 邮件 API。 我怎样才能给出数组中的字符串 message.setText();

如果不可能,用字符串数组发送电子邮件的不同方法是什么。

String[] items = request.getParameterValues("Item");
    String[] categories = request.getParameterValues("Category");
    String[] names = request.getParameterValues("Name");
    String[] quantities = request.getParameterValues("Quantity");

    System.out.println("************ExperimentServlet************");

    for (String item : items) {
    System.out.println("Item is : "+item);
    }

    for(String category : categories) {
    System.out.println("Category is : "+category);
    }

    for(String name : names) {
    System.out.println("Name is : "+name);
    }

    for(String quantity : quantities) {
    System.out.println("Quantity is : "+quantity);
    }


    for(int i=0; i<20; i++) {
        System.out.println("Item 1 is :" + items[i]);
        System.out.println("Category 1 is :"+ categories[i]);
        System.out.println("Name 1 is :"+ names[i]);
        System.out.println("Quantity 1 is : "+quantities[i]);

    }

Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");

    Session session = Session.getInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("abcdef@gmail.com", "xyz");
                }
            });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("abcdef@gmail.com"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse("jklm@gmail.com"));
        message.setSubject("My eMail First Example");
        message.setText("Dear Mail Crawler,"
                + "\n\n No spam to my email, please!"
           + "\n\n" + items[i] + "  " + categories[i]+ "    "+ names[i]+ "  "+ quantities[i]


                );

        Transport.send(message);

        System.out.println("Done");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }

}

}

如果我这样做,我可以发送值小于 20 组值的电子邮件,但如果我提供的值组少于 20 组,它会显示数组索引超出范围异常。不保证每个用户提供 20 组值。

【问题讨论】:

  • 从那个数组准备一个字符串有什么问题?遍历数组并准备一个字符串。
  • 发送包含所需数据的 CSV 文件(附件),您可以忘记 HTML 消息(仅在需要时)。
  • @PaulVargas 并非所有最终用户都喜欢打开和解析用于阅读电子邮件的 csv =\
  • 我创建了 String[]。要从该数组创建字符串,我需要使用 for 语句。我无法在 message.setText() 中使用 for 语句。
  • @Devi 是那个 setText() 方法没有将字符串作为参数吗?

标签: java html email servlets


【解决方案1】:

【讨论】:

  • 我不能像这样直接给出字符串。当我在 HTML 页面中附加行时,我怎么知道用户提供了多少组值。所以,我做不到。我发布了我的代码,只需通过一次。
  • 是这样的话,那就用 Velocity 或者 freemarker 能帮到你吧。
【解决方案2】:

HTML 中没有循环。

您应该使用 Velocity 之类的模板解决方案,通过循环动态数据然后发送结果来生成电子邮件正文。

Use Velocity to generate HTML based email

【讨论】:

  • @sᴜʀᴇsʜᴀᴛᴛᴀ Servlet 不是为电子邮件生成 HTML 内容的正确位置。出于维护原因,最好使用使用速度或其他库的 HTML 模板。请记住,在 MVC 中,视图逻辑必须在视图中,在这种情况下,在电子邮件 HTML 生成器中,而 Servlet 是仅收集要在视图中使用的数据的控制器。
  • 我给了答案,你没有。我不知道你在想什么。我有时会因为走得太快而误读问题,所以可能是我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
相关资源
最近更新 更多