Reputation: 12242
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 the second argument, 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 I want to know the purpose of the above method.
If I can’t 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.
Upvotes: 100
Views: 289537
Reputation: 1167
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]";
Parse a comma-separated list of email addresses. Be strict. Require comma separated list.
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));
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));
Upvotes: 6
Reputation: 223
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
Upvotes: 6
Reputation: 9568
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);
}
}
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!");
}
Upvotes: 7
Reputation: 119
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);
Upvotes: 11
Reputation: 201
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]"));
Upvotes: 20
Reputation: 11120
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("[email protected]"),
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]"));
Upvotes: 135
Reputation: 125
An easy way to do it:
String[] listofIDS = {"[email protected]", "[email protected]"};
for(String cc:listofIDS) {
message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
}
Upvotes: 2
Reputation: 39
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.
Upvotes: 0
Reputation: 309
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);
Upvotes: 30
Reputation: 4151
You can use n number of recipients with the below method:
String to[] = {"[email protected]"} // 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);
Upvotes: 1
Reputation: 3348
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));
Upvotes: 11
Reputation: 39
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];
Upvotes: 3