Send Mail to multiple Recipients in java

JavaJakarta Mail

Java Problem Overview


I want to send a message to multiple Recipients using following the method :

message.addRecipient(Message.RecipientType.TO, String arg1);
       

OR

message.setRecipients(Message.RecipientType.TO,String arg1);

But one confusion is that in second arguement, how to pass multiple addresses like :

message.addRecipient(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");

OR

message.addRecipient(Message.RecipientType.CC, "[email protected];[email protected];[email protected]");

I can send a message using alternate methods too, but want to know the purpose of the above method. If I cant use it(as till now i haven't got any answer for above requirement) then what is the need for this method to be in mail API.

Java Solutions


Solution 1 - Java

If you invoke addRecipient multiple times, it will add the given recipient to the list of recipients of the given time (TO, CC, and BCC).

For example:

message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]"));

It will add the three addresses to CC.


If you wish to add all addresses at once, you should use setRecipients or addRecipients and provide it with an array of addresses

Address[] cc = new Address[] {InternetAddress.parse("abc@abc.com"),
                               InternetAddress.parse("[email protected]"),
                               InternetAddress.parse("[email protected]")};
message.addRecipients(Message.RecipientType.CC, cc);

You can also use InternetAddress.parse to parse a list of addresses:

message.addRecipients(Message.RecipientType.CC,
                      InternetAddress.parse("[email protected],[email protected],[email protected]"));

Solution 2 - Java

This code is working for me. Please try with this for sending mail to multiple recipients

private String recipient = "[email protected] ,[email protected] ";
String[] recipientList = recipient.split(",");
InternetAddress[] recipientAddress = new InternetAddress[recipientList.length];
int counter = 0;
for (String recipient : recipientList) {
    recipientAddress[counter] = new InternetAddress(recipient.trim());
    counter++;
}
message.setRecipients(Message.RecipientType.TO, recipientAddress);

Solution 3 - Java

Just use the method message.setRecipients with multiple addresses separated by commas:

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected],[email protected],[email protected]"));

message.setRecipients(Message.RecipientType.CC, InternetAddress.parse("[email protected],[email protected],[email protected]"));

It works fine with only one address too:

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));

Solution 4 - Java

Try this way:

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
String address = "[email protected],[email protected]";
InternetAddress[] iAdressArray = InternetAddress.parse(address);
message.setRecipients(Message.RecipientType.CC, iAdressArray);

Solution 5 - Java

You can have multiple addresses separated by comma

if (cc.indexOf(',') > 0)
    message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));   
else
    message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));

Solution 6 - Java

Internet E-mail address format (RFC 822):

> (,)comma separated sequence of addresses

javax.mail - 1.4.7 parse(String[]) is not allowed. So we have to give a comma-separated sequence of addresses into InternetAddress objects. Addresses must follow the RFC822 syntax.

String toAddress = "[email protected],[email protected]";
InternetAddress.parse(toAddress);

> (;) semi-colon separated sequence of addresses « If a group of address list is provided with delimiter as ";", then convert to a string array using the split method to use the following function.

String[] addressList = { "[email protected]", "[email protected]" };

String toGroup = "[email protected];[email protected]";
String[] addressList2 = toGroup.split(";");

setRecipients(message, addressList);

public static void setRecipients(Message message, Object addresslist) throws AddressException, MessagingException {
    if (addresslist instanceof String) { // CharSequence
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse((String) addresslist));
    } else if (addresslist instanceof String[]) { // String[] « Array with collection of Strings/
        String[] toAddressList = (String[]) addresslist;
        InternetAddress[] mailAddress_TO = new InternetAddress[ toAddressList.length ];
        for (int i = 0; i < toAddressList.length; i++) {
            mailAddress_TO[i] = new InternetAddress(toAddressList[i]);
        }
        message.setRecipients(Message.RecipientType.TO, mailAddress_TO);
    }
}

Full example

public static Properties getMailProperties(boolean addExteraProps) {
    Properties props = new Properties();
    props.put("mail.transport.protocol", MAIL_TRNSPORT_PROTOCOL);
    props.put("mail.smtp.host", MAIL_SERVER_NAME);
    props.put("mail.smtp.port", MAIL_PORT);

    // Sending Email to the GMail SMTP server requires authentication and SSL.
    props.put("mail.smtp.auth", true);
    if(ENCRYPTION_METHOD.equals("STARTTLS")) {
        props.put("mail.smtp.starttls.enable", true);
        props.put("mail.smtp.socketFactory.port", SMTP_STARTTLS_PORT); // 587
    } else {
        props.put("mail.smtps.ssl.enable", true);
        props.put("mail.smtp.socketFactory.port", SMTP_SSL_PORT); // 465
    }
    props.put("mail.smtp.socketFactory", SOCKETFACTORY_CLASS);
    return props;
}

public static boolean sendMail(String subject, String contentType, String msg, Object recipients) throws Exception {

    Properties props = getMailProperties(false);
    Session mailSession = Session.getInstance(props, null);
    mailSession.setDebug(true);

    Message message = new MimeMessage(mailSession);
    message.setFrom(new InternetAddress(USER_NAME));

    setRecipients(message, recipients);

    message.setSubject(subject);

    String htmlData = "<h1>This is actual message embedded in HTML tags</h1>";
    message.setContent(htmlData, "text/html");

    Transport transport = mailSession.getTransport(MAIL_TRNSPORT_PROTOCOL);
    transport.connect(MAIL_SERVER_NAME, Integer.valueOf(MAIL_PORT), USER_NAME, PASSWORD);
    message.saveChanges(); // Don't forget this

    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
}


> Using Appache SimpleEmail - commons-email-1.3.1

Example: email.addTo(addressList);

public static void sendSimpleMail() throws Exception {
    Email email = new SimpleEmail();
    email.setSmtpPort(587);

    DefaultAuthenticator defaultAuthenticator = new DefaultAuthenticator(USER_NAME, PASSWORD);

    email.setAuthenticator(defaultAuthenticator);
    email.setDebug(false);
    email.setHostName(MAIL_SERVER_NAME);
    email.setFrom(USER_NAME);
    email.setSubject("Hi");
    email.setMsg("This is a test mail... :-)");

    //email.addTo("[email protected]", "Yash");
    String[] toAddressList = { "[email protected]", "[email protected]" }
    email.addTo(addressList);

    email.setTLS(true);
    email.setStartTLSEnabled(true);
    email.send();
    System.out.println("Mail sent!");
}

Solution 7 - Java

So ... it took many months, but still ... You can send email to multiple recipients by using the ',' as separator and

message.setRecipients(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");

is ok. At least in JavaMail 1.4.5

Solution 8 - Java

InternetAddress.Parse is going to be your friend! See the worked example below:

String to = "[email protected], [email protected], [email protected]";
String toCommaAndSpaces = "[email protected] [email protected], [email protected]";
  1. Parse a comma-separated list of email addresses. Be strict. Require comma separated list.

  2. If strict is true, many (but not all) of the RFC822 syntax rules for emails are enforced.

    msg.setRecipients(Message.RecipientType.CC,
    InternetAddress.parse(to, true));
    
  3. Parse comma/space-separated list. Cut some slack. We allow spaces seperated list as well, plus invalid email formats.

    msg.setRecipients(Message.RecipientType.BCC,
    InternetAddress.parse(toCommaAndSpaces, false));
    

Solution 9 - Java

String[] mailAddressTo = new String[3];    
mailAddressTo[0] = emailId_1;    
mailAddressTo[1] = emailId_2;    
mailAddressTo[2] = "[email protected]";
    
InternetAddress[] mailAddress_TO = new InternetAddress[mailAddressTo.length];
 
for (int i = 0; i < mailAddressTo.length; i++)
{
    mailAddress_TO[i] = new InternetAddress(mailAddressTo[i]);
}

message.addRecipients(Message.RecipientType.TO, mailAddress_TO);ress_TO = new InternetAddress[mailAddressTo.length]; 

Solution 10 - Java

An easy way to do it:

String[] listofIDS = {"[email protected]", "[email protected]"};
        
for(String cc:listofIDS) {
    message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
}

Solution 11 - Java

You can use n number of recipients with the below method:

String to[] = {"a@gmail.com"} // Mail ID you want to send;
InternetAddress[] address = new InternetAddress[to.length];
for(int i=0; i< to.length; i++)
{
    address[i] = new InternetAddress(to[i]);
}

msg.setRecipients(Message.RecipientType.TO, address);

Solution 12 - Java

If you want to send as CC using MimeMessageHelper:

List<String> emails = new ArrayList();
email.add("email1");
email.add("email2");

for (String string : emails) {
    message.addCc(string);
}

In the same way, you can use to add multiple recipients.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPrateekView Question on Stackoverflow
Solution 1 - JavaAviram SegalView Answer on Stackoverflow
Solution 2 - JavaG.KView Answer on Stackoverflow
Solution 3 - JavaLeyoView Answer on Stackoverflow
Solution 4 - Javauser3734721View Answer on Stackoverflow
Solution 5 - JavaThePCWizardView Answer on Stackoverflow
Solution 6 - JavaYashView Answer on Stackoverflow
Solution 7 - Javabes67View Answer on Stackoverflow
Solution 8 - JavaMattView Answer on Stackoverflow
Solution 9 - Javauser2389095View Answer on Stackoverflow
Solution 10 - JavaRamasamyView Answer on Stackoverflow
Solution 11 - JavaDhinakarView Answer on Stackoverflow
Solution 12 - JavaArunView Answer on Stackoverflow