Java 将邮件发送到收件人数组列表

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19853828/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 20:43:26  来源:igfitidea点击:

Send mail to an array list of recipients

javajspservletsjavamailnetbeans-7

提问by toink

I got this tutorial here...

我在这里得到了这个教程...

how to send an email from jsp/servlet?

如何从jsp/servlet发送电子邮件?

However What if I have list of email addresses from DATABASE where I want to send the email to

但是,如果我有来自 DATABASE 的电子邮件地址列表,我想将电子邮件发送到

TestMail class

测试邮件类

public class TestMail {
    public static void main(String... args) throws Exception {
        // Create mailer.
        String hostname = "smtp.example.com";
        int port = 2525;
        String username = "nobody";
        String password = "idonttellyou";
        Mailer mailer = new Mailer(hostname, port, username, password);

        // Send mail.
        String from = "[email protected]";
        String to = "[email protected]";
        String subject = "Interesting news";
        String message = "I've got JavaMail to work!";
        mailer.send(from, to, subject, message);
    }
}

jsp

jsp

<form action="contact" method="post">
    <p>Your email address: <input name="email"></p>
    <p>Mail subject: <input name="subject"></p>
    <p>Mail message: <textarea name="message"></textarea></p>
    <p><input type="submit"><span class="message">${message}</span></p>
</form>

Servlet

小服务程序

public class ContactServlet extends HttpServlet {
    private Mailer mailer;
    private String to;

    public void init() {
        // Create mailer. You could eventually obtain the settings as
        // web.xml init parameters or from some properties file.
        String hostname = "smtp.example.com";
        int port = 2525;
        String username = "nobody";
        String password = "forgetit";
        this.mailer = new Mailer(hostname, port, username, password);
        this.to = "[email protected]";
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String email = request.getParameter("email");
        String subject = request.getParameter("subject");
        String message = request.getParameter("message");
        // Do some validations and then send mail:

        try {
            mailer.send(email, to, subject, message);
            request.setAttribute("message", "Mail succesfully sent!");
            request.getRequestDispatcher("/WEB-INF/contact.jsp").forward(request, response);
        } catch (MailException e) {
            throw new ServletException("Mailer failed", e);
        }
    }
}

采纳答案by Ravi

      ArrayList email= new ArrayList();
      while(rs.next()) {

                email.add(rs.getString("column_name"));
      }


    Message message = new MimeMessage(session);

   InternetAddress[] address = new InternetAddress[email.size()];
    for (int i = 0; i < email.size(); i++) {
        address[i] = new InternetAddress(email.get(i));
    }
     message.setRecipients(Message.RecipientType.TO, address);

回答by Anuj Patel

You can retrieve ArrayListof emails in your init method, convert that ArrayListof Stringto array of Addressobjects.

您可以检索ArrayList您的init方法的电子邮件,该转换ArrayListString到的数组Address对象。

Pass that array in setRecipients()method of your message and you're done.

将该数组传递到setRecipients()您的消息方法中,您就完成了。

Example :

例子 :

ArrayList<String> listOfEmails    = SOME DB CALL TO GET ARRAYLIST OF EMAILS;
ArrayList<InternetAddress> listOfToAddress = new ArrayList<InternetAddress>();

for (String temp : listOfEmails) {
    if (temp != null) {
        listOfToAddress.add(new InternetAddress(temp));
    }
}

回答by BURHANUDDIN

ArrayList email= new ArrayList();
  while(rs.next()) {

            email.add(rs.getString("column_name"));
  }


Message message = new MimeMessage(session);

InternetAddress[] address = new InternetAddress[email.size()];
for (int i = 0; i < email.size(); i++) {
    address[i] = new InternetAddress(email.get(i));
}
 //message.setRecipients(Message.RecipientType.TO, address); this not work
  message.addRecipients(Message.RecipientType.TO, address);

it works.. try this.

它有效..试试这个。

回答by Jaspal Jessy

ArrayList<String> listOfEmails = //getListofEmails

InternetAddress[] address = listOfEmails.stream()
                 .toArray(InternetAddress[]::new);