Отправить письмо нескольким получателям в java
Я хочу отправить сообщение нескольким Получателям, используя следующий метод:
message.addRecipient(Message.RecipientType.TO, String arg1);
ИЛИ ЖЕ
message.setRecipients(Message.RecipientType.TO,String arg1);
Но одна путаница заключается в том, что во втором аргументе, как передать несколько адресов, таких как:
message.addRecipient(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");
ИЛИ ЖЕ
message.addRecipient(Message.RecipientType.CC, "[email protected];[email protected];[email protected]");
Я могу также отправить сообщение, используя альтернативные методы, но хочу знать назначение вышеуказанного метода. Если я не могу использовать его (так как до сих пор у меня нет ответа на вышеуказанное требование), тогда зачем нужен этот метод в почтовом API.
Ответы
Ответ 1
Если вы вызываете addRecipient
несколько раз, он добавит данного получателя в список получателей данного времени (TO, CC, BCC)
Например:
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]"));
Добавит 3 адреса в CC
Если вы хотите сразу добавить все адреса, вы должны использовать setRecipients
или addRecipients
и предоставить ему массив адресов
Address[] cc = new Address[] {InternetAddress.parse("[email protected]"),
InternetAddress.parse("[email protected]"),
InternetAddress.parse("[email protected]")};
message.addRecipients(Message.RecipientType.CC, cc);
Вы также можете использовать InternetAddress.parse
для анализа списка адресов
message.addRecipients(Message.RecipientType.CC,
InternetAddress.parse("[email protected],[email protected],[email protected]"));
Ответ 2
Привет всем, этот код работает для меня, попробуйте с этим для отправки почты нескольким получателям.
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);
Ответ 3
Попробуйте следующим образом:
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);
Ответ 4
Просто используйте метод message.setRecipients с несколькими адресами, разделенными запятыми:
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]"));
работает нормально только с одним адресом
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
Ответ 5
У вас может быть несколько адресов, разделенных запятой
if (cc.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
else
message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));
Ответ 6
Итак, это заняло много месяцев, но все же... Вы можете отправить электронное письмо нескольким получателям с помощью разделителя "," и
message.setRecipients(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");
в порядке. По крайней мере, в JavaMail 1.4.5
Ответ 7
InternetAddress.Parse будет вашим другом! См. Приведенный ниже пример:
String to = "[email protected], [email protected], [email protected]";
String toCommaAndSpaces = "[email protected] [email protected], [email protected]";
- Разберите список адресов электронной почты, разделенный запятыми. Будьте строгими. Требуется список, разделенный запятыми.
-
Если строго верно, многие (но не все) RFC822 правила синтаксиса для электронных писем соблюдаются.
msg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(to, true));
-
Разделите список разделяемых запятыми/пробелами. Отрежьте немного. Мы также разрешаем список разделенных пробелов, а также недопустимые форматы электронной почты.
msg.setRecipients(Message.RecipientType.BCC,
InternetAddress.parse(toCommaAndSpaces, false));
Ответ 8
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];
Ответ 9
Формат адреса электронной почты в Интернете ( RFC 822
)
(,)
последовательность адресов через запятую
javax.mail - parse( String[] )
1.4.7 parse( String[] )
не разрешен. Таким образом, мы должны задать разделенную запятыми последовательность адресов в объектах InternetAddress
. Адреса должны соответствовать синтаксису RFC822.
String toAddress = "[email protected],[email protected]";
InternetAddress.parse( toAddress );
(;)
последовательность адресов, разделенных точкой с запятой "Если группа списка адресов снабжена разделителем как"; " затем преобразуйте в массив String, используя метод split, чтобы использовать следующую функцию.
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();
}
Использование Appache SimpleEmail
- commons-email-1.3.1
Пример: 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!");
}
Ответ 10
Вы можете использовать n-число получателей ниже метода:
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);
Ответ 11
Если вы хотите отправить Cc с помощью MimeMessageHelper
List<String> emails= new ArrayList();
email.add("email1");
email.add("email2");
for (String string : emails) {
message.addCc(string);
}
То же самое можно использовать для добавления нескольких получателей.
Ответ 12
простой способ сделать
String[] listofIDS={"[email protected]","[email protected]"};
for(String cc:listofIDS){
message.addRecipients(Message.RecipientType.CC,InternetAddress.parse(cc));
}