Chcę wysłać wiadomość do wielu Odbiorców w następujący sposób:
message.addRecipient(Message.RecipientType.TO, String arg1);
LUB
message.setRecipients(Message.RecipientType.TO,String arg1);
Ale jedno zamieszanie polega na tym, że w drugim sporze, jak przekazać wiele adresów, takich jak:
message.addRecipient(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");
LUB
message.addRecipient(Message.RecipientType.CC, "[email protected];[email protected];[email protected]");
Mogę wysłać wiadomość za pomocą alternatywnych metod, ale chcę poznać cel powyższej metody. Jeśli nie mogę go użyć (ponieważ do tej pory nie mam odpowiedzi na powyższe wymaganie), to jaka jest potrzeba, aby ta metoda była w API poczty.
java
jakarta-mail
Prateek
źródło
źródło
addRecipient
/setRecipient
z jednym adresem lubaddRecipients
/setRecipients
z tablicą adresówjavax.mail
wersja 1.5.5 nieInternetAddress.parse()
zwraca tegoString
. Wszystkie metody analizy zwracają tablicę, więc nie są odpowiednie dlaaddRecipient
. Czy istnieją inne wersje, które mają taką metodę?javax.mail
wersję1.5.5
lub nowszą, w której nie masz,InternetAddress.parse()
która zwraca single,InternetAddress
ale tylko tę, która zwracaInternetAddress[]
(tablicę), możesz użyć pierwszego rozwiązania, mając... message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]")[0]); ...
([0] jest tam ważne) . W drugim rozwiązaniu:... new Address[] {InternetAddress.parse("[email protected]")[0], ...
Trzecie rozwiązanie powinno działać bez zmian. Oczywiście [0] na końcu należy zastosować do wszystkich adresów w każdym rozwiązaniu.Cześć wszystkim, ten kod działa dla mnie, spróbuj go użyć do wysyłania poczty do wielu odbiorców
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);
źródło
Spróbuj w ten sposób:
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);
źródło
Po prostu użyj metody message.setRecipients z wieloma adresami oddzielonymi przecinkami:
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]"));
działa dobrze z tylko jednym adresem
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
źródło
Możesz mieć wiele adresów oddzielonych przecinkami
if (cc.indexOf(',') > 0) message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); else message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));
źródło
InternetAddress.parse()
do obu? (I tak, wiem, że to ma 4 lata)setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
powinien działać, nawet jeśli jest tylko 1 adres. To tylko osobisty sposób programowania w celu zwiększenia czytelności.Więc ... zajęło to wiele miesięcy, ale nadal ... Możesz wysłać wiadomość e-mail do wielu odbiorców, używając znaku „,” jako separatora i
message.setRecipients(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");
jest ok Przynajmniej w JavaMail 1.4.5
źródło
InternetAddress.Parse będzie Twoim przyjacielem! Zobacz przykład praktyczny poniżej:
String to = "[email protected], [email protected], [email protected]"; String toCommaAndSpaces = "[email protected] [email protected], [email protected]";
Jeśli ścisłe jest prawdziwe, egzekwowanych jest wiele (ale nie wszystkie) reguł składni RFC822 dotyczących wiadomości e-mail.
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(to, true));
Analizuj listę rozdzielaną przecinkami / spacjami. Zwolnij trochę. Dopuszczamy również listy oddzielone spacjami oraz nieprawidłowe formaty wiadomości e-mail.
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(toCommaAndSpaces, false));
źródło
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];
źródło
Format internetowego adresu e-mail (
RFC 822
)javax.mail - 1.4.7
parse( String[] )
jest niedozwolone. Musimy więc nadaćInternetAddress
obiektom sekwencję adresów oddzielonych przecinkami . Adresy muszą być zgodne ze składnią 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); } }
Pełny przykład:
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(); }
Przykład:
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!"); }
źródło
Możesz użyć n-numeru odbiorcy poniżej metody:
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);
źródło
Jeśli chcesz wysłać jako DW przy użyciu MimeMessageHelper
List<String> emails= new ArrayList(); email.add("email1"); email.add("email2"); for (String string : emails) { message.addCc(string); }
To samo, którego możesz użyć, aby dodać wielu odbiorców.
źródło
Łatwy sposób
String[] listofIDS={"[email protected]","[email protected]"}; for(String cc:listofIDS) { message.addRecipients(Message.RecipientType.CC,InternetAddress.parse(cc)); }
źródło