Quiero enviar un mensaje a varios destinatarios siguiendo el método:
message.addRecipient(Message.RecipientType.TO, String arg1);
O
message.setRecipients(Message.RecipientType.TO,String arg1);
Pero una confusión es que en el segundo argumento, cómo pasar múltiples direcciones como:
message.addRecipient(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");
O
message.addRecipient(Message.RecipientType.CC, "[email protected];[email protected];[email protected]");
También puedo enviar un mensaje utilizando métodos alternativos, pero quiero saber el propósito del método anterior. Si no puedo usarlo (ya que hasta ahora no tengo ninguna respuesta para el requisito anterior), entonces, ¿cuál es la necesidad de que este método esté en la API de correo?
fuente
addRecipient
/setRecipient
con una sola dirección oaddRecipients
/setRecipients
con una matriz de direccionesjavax.mail
la versión 1.5.5 no tieneInternetAddress.parse()
devolucionesString
. Todos los métodos de análisis devuelven una matriz y, por lo tanto, no son adecuados paraaddRecipient
. ¿Hay otras versiones que tengan dicho método?javax.mail
versión1.5.5
o superior donde no tieneInternetAddress.parse()
que devuelve solo,InternetAddress
pero solo la que devuelveInternetAddress[]
(matriz), puede usar la primera solución que tenga... message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]")[0]); ...
([0] es importante allí) . En la segunda solución:... new Address[] {InternetAddress.parse("[email protected]")[0], ...
la tercera solución debería funcionar sin cambios. Por supuesto, [0] al final debe aplicarse a todas las direcciones en cada solución.Hola a todos, este código me funciona, intente con esto para enviar correo a varios destinatarios
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);
fuente
Prueba de esta manera:
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);
fuente
Simplemente use el método message.setRecipients con varias direcciones separadas por comas:
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]"));
también funciona bien con una sola dirección
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
fuente
Puede tener varias direcciones separadas por comas
if (cc.indexOf(',') > 0) message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); else message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));
fuente
InternetAddress.parse()
para ambos? (Y sí, sé que esto tiene 4 años)setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
debería funcionar incluso si solo hay una dirección. Es solo una forma personal de programación para aumentar la legibilidad.Entonces ... tomó muchos meses, pero aún así ... Puede enviar correos electrónicos a múltiples destinatarios usando ',' como separador y
message.setRecipients(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");
está bien. Al menos en JavaMail 1.4.5
fuente
InternetAddress.Parse va a ser tu amigo! Vea el ejemplo trabajado a continuación:
String to = "[email protected], [email protected], [email protected]"; String toCommaAndSpaces = "[email protected] [email protected], [email protected]";
Si estricto es verdadero, se aplican muchas (pero no todas) las reglas de sintaxis RFC822 para correos electrónicos.
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(to, true));
Analizar lista separada por comas / espacios. Corte algo de holgura. También permitimos espacios en la lista separada, además de formatos de correo electrónico no válidos.
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(toCommaAndSpaces, false));
fuente
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];
fuente
Formato de dirección de correo electrónico de Internet (
RFC 822
)javax.mail - 1.4.7
parse( String[] )
no está permitido. Entonces tenemos que dar una secuencia de direcciones separada por comas enInternetAddress
objetos. Las direcciones deben seguir la sintaxis RFC822.String toAddress = "[email protected],[email protected]"; InternetAddress.parse( toAddress );
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); } }
Ejemplo completo:
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(); }
Ejemplo:
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!"); }
fuente
Puede utilizar n-número de destinatarios a continuación método:
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);
fuente
Si desea enviar como Cc usando MimeMessageHelper
List<String> emails= new ArrayList(); email.add("email1"); email.add("email2"); for (String string : emails) { message.addCc(string); }
Lo mismo puede usar para agregar varios destinatarios.
fuente
Manera fácil de hacer
String[] listofIDS={"[email protected]","[email protected]"}; for(String cc:listofIDS) { message.addRecipients(Message.RecipientType.CC,InternetAddress.parse(cc)); }
fuente