Отправка почты нескольким получателям - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть простой интерфейс, который выглядит следующим образом:

enter image description here

Это довольно очевидно, и я могу ввести адрес электронной почты получателя, и он передаст значение функции.

Моя функция JavaScript (когда вызывается кнопка отправки):

<script>
    //function to insert content of email to table

    function sendmessage(){

        var recipient = document.getElementById("recipient").value;    
        var subject = document.getElementById("subject").value;    
        var content=document.getElementById("content").value;    

        $.ajax({    
            url: 'sendemail.jsp',
            type: 'POST',
            data: {
                recipient:recipient,
                subject:subject,
                content:content    
            },    
            success: function (data) {
                alert("Successfully send email");
            },
            error: function (request, error) {
                alert("Request: " + JSON.stringify(error));
            }
        });    
    } 
</script>    

<body>    
To:<input type="text" style="font-size: 10pt;" size="30" id="recipient"  ><br><br>    
Subject:<input type="text" style="font-size: 10pt" size="70" id="subject" ><br><br>  
Content:<br><textarea cols="100"  rows="10" id="content"  style="font-size: 13pt;">
    <%=files%>:   <%=url%>
</textarea><br>  
<div class="Send">
    <button type="button" onclick="sendmessage()"> Send </button>
</div>

Он переходит к моему sendemail.jsp (фрагмент):

<%   
    String recipient=request.getParameter("recipient");
    String subject=request.getParameter("subject");
    String content=request.getParameter("content");

    fileFacade.sendEmail(recipient,subject,content);  
%>

И моя функция электронной почты:

public void sendEmail(String recipient,String subject,String content) {
        try {    
            final String fromEmail = "xxxxx@gmail.com"; //requires valid gmail id
            final String password = "xxxx"; // correct password for gmail id   
            System.out.println("Please Wait, sending email...");

            /*Setup mail server */
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
            props.put("mail.smtp.port", "25"); //TLS Port
            props.put("mail.smtp.auth", "true"); //enable authentication
            props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS

            //create Authenticator object to pass in Session.getInstance argument
            Authenticator auth = new Authenticator() {
                //override the getPasswordAuthentication method
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(fromEmail, password);
                }
            };
            Session session = Session.getInstance(props, auth);    
            session.setDebug(true);

            // Define message
            MimeMessage message = new MimeMessage(session);
            // Set From: header field of the header.
            message.setFrom(new InternetAddress(fromEmail));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            // Set Subject: header field
            message.setSubject(subject);

            // Now set the actual message
            message.setText(content);

            try {
                Transport.send(message);
            } catch (AddressException addressException) {
                addressException.printStackTrace();
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }    
    }

Мой код выше работает для одного получателя, и теперь я хотел бы разрешить его отправку нескольким получателям, как в формате, показанном на скриншоте выше. Я не хочу создавать столбец CC по причинам.

Как передать несколько значений электронной почты нескольким получателям так, как я хочу?

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вам не нужно использовать «split». Просто используйте:

message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
1 голос
/ 02 апреля 2019

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

ОБНОВЛЕНИЕ : Вам не нужно вызывать send метод в цикле.просто добавив несколько рецептов, вы отправите электронное письмо всем сразу.

String[] receipentList = recipient.split(",");
for (String to : receipentList) {
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
}
try {
      Transport.send(message);
} catch (AddressException addressException) {
      addressException.printStackTrace();
}

Полный код:

public void sendEmail(String recipient, String subject, String content) {
        try {
            final String fromEmail = "xxxxx@gmail.com"; //requires valid gmail id
            final String password = "xxxx"; // correct password for gmail id
            System.out.println("Please Wait, sending email...");
            /*Setup mail server */
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
            props.put("mail.smtp.port", "25"); //TLS Port
            props.put("mail.smtp.auth", "true"); //enable authentication
            props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
            //create Authenticator object to pass in Session.getInstance argument
            Authenticator auth = new Authenticator() {
                //override the getPasswordAuthentication method
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(fromEmail, password);
                }
            };
            Session session = Session.getInstance(props, auth);
            session.setDebug(true);
            // Define message
            MimeMessage message = new MimeMessage(session);
            // Set From: header field of the header.
            message.setFrom(new InternetAddress(fromEmail));
            // Set Subject: header field
            message.setSubject(subject);
            // Now set the actual message
            message.setText(content);
            String[] receipentList = recipient.split(",");
            for (String to : receipentList) {
                 message.addRecipient(Message.RecipientType.TO, new 
                  InternetAddress(to));
            }
            try {
                 Transport.send(message);
            } catch (AddressException addressException) {
                  addressException.printStackTrace();
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
...