Как я могу отправить почту более чем одному получателю - PullRequest
0 голосов
/ 27 марта 2019

У меня есть HTML-форма, где у меня есть форма, где пользователь может ввести более одного почтового идентификатора, поэтому я не знаю, как я могу отправить почту более чем одному человеку

Я успешно отправляю почтуодному пользователю, но здесь я застрял в том, как отправить более одного получателя

Что я сделал

Это мой класс EmailUntility

public class EmailUtility {
public static void sendEmail(String host, String port, final String userName, final String password,
        String toAddress, String subject, String message) throws AddressException, MessagingException {


    Properties properties = new Properties();
    properties.put("mail.smtp.host", host);
    properties.put("mail.smtp.port", port);
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");
    Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(userName, password);
        }
    });
    session.setDebug(false);
    Message msg = new MimeMessage(session);

    msg.setFrom(new InternetAddress(userName));
    InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
    msg.setRecipients(Message.RecipientType.TO, toAddresses);
    msg.setSubject(subject);
    msg.setSentDate(new Date());
    msg.setText(message);

    Transport.send(msg);

}

}

А это мой сервлет doPost

        String recipient = request.getParameter("email-ids");
    String subject = request.getParameter("subject");
    String content = request.getParameter("content");
    System.out.println(recipient);

    try {
        EmailUtility.sendEmail(host, port, user, pass, recipient, subject,
                content);

    } catch (Exception ex) {
        ex.printStackTrace();

когда я печатаю recipient на консоли, я получаю идентификаторы почты из пользовательского интерфейса как abc@gmail.com,efg@gmail.com,123@gmail.com все трис , разделитель

Этот работает нормально, когда есть только один получатель, но когда их больше одного, я не знаю, как это сделать

Я использую Java.mail api для отправки почты

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Здесь toAddress - строка, состоящая из идентификаторов электронной почты, разделенных ,

if (toAddress!= null) {
    List<String> emails = new ArrayList<>();
    if (toAddress.contains(",")) {
        emails.addAll(Arrays.asList(toAddress.split(",")));
    } else {
        emails.add(toAddress);
    }
    Address[] to = new Address[emails.size()];
    int counter = 0;
    for(String email : emails) {
        to[counter] = new InternetAddress(email.trim());
        counter++;
    }
    message.setRecipients(Message.RecipientType.TO, to);
}
1 голос
/ 27 марта 2019

Из вашего описания я предполагаю, что параметр email-ids может иметь несколько значений.Следовательно, String recipient = request.getParameter("email-ids"); неверно.

Я приведу Javadoc на ServletRequest.getParamter(String) (выделено мной):

Вы должны использовать только этот методкогда вы уверены , параметр имеет только одно значение.Если параметр может иметь более одного значения, используйте getParameterValues.

Так что вместо него должно быть String[] recipients = request.getParameterValues("email-ids");.(Вы могли бы также попытаться разделить полученную строку с вашим кодом, но если вы уже получили несколько значений, то объединение и повторное их разделение просто показалось неправильным и рискованным.)

С этими отдельными лицамиСтроки, тогда не должно быть проблем с созданием нескольких элементов для массива InternetAddress[] toAddresses, который вы уже используете.

0 голосов
/ 27 марта 2019

Используйте метод InternetAddress.parse .

...