Java에서 여러 수신자에게 메일 보내기
다음 방법을 사용하여 여러 수신자에게 메시지를 보내고 싶습니다.
message.addRecipient(Message.RecipientType.TO, String arg1);
또는
message.setRecipients(Message.RecipientType.TO,String arg1);
그러나 한 가지 혼란은 두 번째 주장에서 다음과 같은 여러 주소를 전달하는 방법입니다.
message.addRecipient(Message.RecipientType.CC, "abc@abc.com,abc@def.com,ghi@abc.com");
또는
message.addRecipient(Message.RecipientType.CC, "abc@abc.com;abc@def.com;ghi@abc.com");
다른 방법을 사용하여 메시지를 보낼 수도 있지만 위 방법의 목적을 알고 싶습니다. 내가 그것을 사용할 수 없다면 (지금까지 위의 요구 사항에 대한 답을 얻지 못한 것처럼)이 방법이 메일 API에 있어야 할 필요성은 무엇입니까?
addRecipient
여러 번 호출 하면 지정된 시간 (TO, CC, BCC)의 수신자 목록에 지정된 수신자가 추가됩니다.
예를 들면 :
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("abc@abc.com"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("abc@def.com"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("ghi@abc.com"));
CC에 3 개의 주소를 추가합니다.
한 번에 모든 주소를 추가하려면 주소 배열을 사용 setRecipients
하거나 addRecipients
제공해야합니다.
Address[] cc = new Address[] {InternetAddress.parse("abc@abc.com"),
InternetAddress.parse("abc@def.com"),
InternetAddress.parse("ghi@abc.com")};
message.addRecipients(Message.RecipientType.CC, cc);
InternetAddress.parse
주소 목록을 구문 분석하는 데 사용할 수도 있습니다.
message.addRecipients(Message.RecipientType.CC,
InternetAddress.parse("abc@abc.com,abc@def.com,ghi@abc.com"));
안녕하세요이 코드가 저를 위해 작동하는 모든 사람에게 여러 수신자에게 메일을 보내기 위해 이것을 시도하십시오.
private String recipient = "yamabs@gmail.com ,priya@gmail.com ";
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);
이 방법을 시도하십시오.
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("mail3@mail.com"));
String address = "mail@mail.com,mail2@mail.com";
InternetAddress[] iAdressArray = InternetAddress.parse(address);
message.setRecipients(Message.RecipientType.CC, iAdressArray);
여러 주소를 쉼표로 구분하여 message.setRecipients 메소드를 사용하면됩니다.
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("abc@abc.com,abc@def.com,ghi@abc.com"));
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse("abc@abc.com,abc@def.com,ghi@abc.com"));
하나의 주소로도 잘 작동합니다.
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("abc@abc.com"));
쉼표로 구분 된 여러 주소를 가질 수 있습니다.
if (cc.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
else
message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));
그래서 ... 몇 달이 걸렸지 만 여전히 ... 구분 기호로 ','를 사용하여 여러 수신자에게 이메일을 보낼 수 있습니다.
message.setRecipients(Message.RecipientType.CC, "abc@abc.com,abc@def.com,ghi@abc.com");
괜찮습니다. JavaMail 1.4.5 이상
InternetAddress.Parse가 당신의 친구가 될 것입니다! 아래의 작동 예를 참조하십시오.
String to = "med@joe.com, maz@frank.com, jezz@jam.com";
String toCommaAndSpaces = "med@joe.com maz@frank.com, jezz@jam.com";
- 쉼표로 구분 된 이메일 주소 목록을 구문 분석합니다. 엄격 해지세요. 쉼표로 구분 된 목록이 필요합니다.
strict가 true이면 전자 메일에 대한 RFC822 구문 규칙 의 많은 (전부는 아님) 이 적용됩니다.
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(to, true));
쉼표 / 공백으로 구분 된 목록을 구문 분석합니다. 약간의 여유를 줄이십시오. 공백으로 구분 된 목록과 잘못된 이메일 형식도 허용됩니다.
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(toCommaAndSpaces, false));
String[] mailAddressTo = new String[3];
mailAddressTo[0] = emailId_1;
mailAddressTo[1] = emailId_2;
mailAddressTo[2] = "xyz@gmail.com";
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];
인터넷 이메일 주소 형식 ( RFC 822
)
(,)
쉼표로 구분 된 주소 시퀀스
javax.mail-1.4.7 parse( String[] )
은 허용되지 않습니다. 따라서 쉼표로 구분 된 주소 시퀀스를 InternetAddress
객체 로 제공해야 합니다. 주소는 RFC822 구문을 따라야합니다.
String toAddress = "mail@mail.com,mail2@mail.com";
InternetAddress.parse( toAddress );
(;)
세미콜론으로 구분 된 주소 시퀀스« 주소 목록 그룹에 구분 기호 가 ";"로 제공되는 경우 그런 다음 split 메소드를 사용하여 String 배열로 변환하여 다음 함수를 사용하십시오.
String[] addressList = { "mail@mail.com", "mail2@mail.com" };
String toGroup = "mail@mail.com;mail2@mail.com";
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( "mail@mail.com", "Yash" );
String[] toAddressList = { "mail@mail.com", "mail2@mail.com" }
email.addTo( addressList );
email.setTLS(true);
email.setStartTLSEnabled( true );
email.send();
System.out.println("Mail sent!");
}
아래 방법으로 n-number의 수신자를 사용할 수 있습니다.
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);
MimeMessageHelper를 사용하여 Cc로 보내려면
List<String> emails= new ArrayList();
email.add("email1");
email.add("email2");
for (String string : emails) {
message.addCc(string);
}
여러 수신자를 추가하는 데 사용할 수 있습니다.
쉬운 방법
String[] listofIDS={"ramasamygms@gmail.com","ramasamycse94@gmail.com"};
for(String cc:listofIDS){
message.addRecipients(Message.RecipientType.CC,InternetAddress.parse(cc));
}
참고 URL : https://stackoverflow.com/questions/13854037/send-mail-to-multiple-recipients-in-java
'IT TIP' 카테고리의 다른 글
vb.net에서 dbnull 데이터 처리 (0) | 2020.10.25 |
---|---|
설치시에만 사용자 지정 작업을 실행하는 방법 (제거 아님) (0) | 2020.10.25 |
연관 배열을 PHP에서 값의 간단한 배열로 변환 (0) | 2020.10.25 |
Ajax에서 GET 대 POST (0) | 2020.10.25 |
UILabel의 배경색에 애니메이션을 적용하는 방법은 무엇입니까? (0) | 2020.10.25 |