Java에서 여러 수신인에게 메일 보내기
다음 방법을 사용하여 여러 수신자에게 메시지를 보냅니다.
message.addRecipient(Message.RecipientType.TO, String arg1);
또는
message.setRecipients(Message.RecipientType.TO,String arg1);
단, 두 번째 인수에서는 다음과 같이 여러 주소를 전달하는 방법이 혼동됩니다.
message.addRecipient(Message.RecipientType.CC, "abc@abc.example,abc@def.example,ghi@abc.example");
또는 message.addRecipient(Message).Recipient Type(수신자 유형)CC, "abc@abc.example;abc@def.example;ghi@abc.example";
다른 방법으로도 메시지를 보낼 수 있지만, 위의 방법의 목적을 알고 싶습니다.
만약 사용할 수 없다면(지금까지 위의 요건에 대한 답변을 받지 못했다) 메일 API에 이 메서드가 있어야 하는 이유는 무엇입니까?
호출하는 경우addRecipient는, 지정된 수신자를, 지정된 시간의 수신자(TO, CC, 및 BCC)의 리스트에 복수 추가합니다.
예를 들어 다음과 같습니다.
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("abc@abc.example"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("abc@def.example"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("ghi@abc.example"));
그러면 3개의 주소가 CC에 추가됩니다.
모든 주소를 한 번에 추가하려면setRecipients또는addRecipients주소 배열을 제공합니다.
Address[] cc = new Address[] {InternetAddress.parse("abc@abc.example"),
InternetAddress.parse("abc@def.example"),
InternetAddress.parse("ghi@abc.example")};
message.addRecipients(Message.RecipientType.CC, cc);
를 사용할 수도 있습니다.InternetAddress.parse주소 목록을 해석하려면:
message.addRecipients(Message.RecipientType.CC,
InternetAddress.parse("abc@abc.example,abc@def.example,ghi@abc.example"));
이 코드는 나에게 효과가 있다.여러 수신자에게 메일을 보낼 때 사용하세요.
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);
메서드 메시지를 사용합니다.set 여러 주소가 쉼표로 구분된 수신자:
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("abc@abc.example,abc@def.com,ghi@abc.example"));
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse("abc@abc.example,abc@def.com,ghi@abc.example"));
1개의 주소만으로 정상적으로 동작합니다.
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("abc@abc.example"));
여러 주소를 쉼표로 구분하여 사용할 수 있습니다.
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.TO, InternetAddress.parse("mail3@mail.example"));
String address = "mail@mail.example,mail2@mail.example";
InternetAddress[] iAdressArray = InternetAddress.parse(address);
message.setRecipients(Message.RecipientType.CC, iAdressArray);
인터넷 전자 메일 주소 형식(RFC 822):
(,)쉼표로 구분된 주소 시퀀스
javax.mail - 1.4.7parse(String[])사용할 수 없습니다.따라서 쉼표로 구분된 주소 시퀀스를 개체로 지정해야 합니다.주소는 RFC822 구문에 따라야 합니다.
String toAddress = "mail@mail.example,mail2@mail.example";
InternetAddress.parse(toAddress);
(;)세미콜론으로 구분된 주소 시퀀스: 주소 목록 그룹에 딜리미터가 ";"로 지정되어 있는 경우 분할 방식을 사용하여 문자열 배열로 변환하여 다음 함수를 사용합니다.
String[] addressList = { "mail@mail.example", "mail2@mail.example" };
String toGroup = "mail@mail.example;mail2@mail.example";
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.example", "Yash");
String[] toAddressList = { "mail@mail.example", "mail2@mail.example" }
email.addTo(addressList);
email.setTLS(true);
email.setStartTLSEnabled(true);
email.send();
System.out.println("Mail sent!");
}
그래서... 몇 달이 걸렸지만, 그래도...' , 를 구분자로 사용하여 여러 수신자에게 이메일을 보낼 수 있습니다.
message.setRecipients(Message.RecipientType.CC, "abc@abc.example,abc@def.example,ghi@abc.example");
적어도 JavaMail 1.4.5에서는 괜찮습니다.
Internet Address(인터넷 주소)파서가 네 친구가 될 거야!다음의 작업 예를 참조해 주세요.
String to = "med@joe.example, maz@frank.example, jezz@jam.example";
String toCommaAndSpaces = "med@joe.example maz@frank.example, jezz@jam.example";
쉼표로 구분된 전자 메일 주소 목록을 구문 분석합니다.엄격히 하다.쉼표로 구분된 목록이 필요합니다.
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];
간단한 방법:
String[] listofIDS = {"ramasamygms@gmail.com", "ramasamycse94@gmail.com"};
for(String cc:listofIDS) {
message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
}
다음 방법으로 n명의 수신자를 사용할 수 있습니다.
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);
MimeMessage를 사용하여 CC로 전송하는 경우도우미:
List<String> emails = new ArrayList();
email.add("email1");
email.add("email2");
for (String string : emails) {
message.addCc(string);
}
같은 방법으로 를 사용하여 여러 수신인을 추가할 수 있습니다.
언급URL : https://stackoverflow.com/questions/13854037/send-mail-to-multiple-recipients-in-java
'programing' 카테고리의 다른 글
| Java에서의 Log4J 출력 디세이블화 (0) | 2022.11.05 |
|---|---|
| MariaDB가 시작되지 않음: "플러그인 'FEEDB'ACK'는 디세이블입니다. (0) | 2022.11.05 |
| Axios에서 쿼리 파라미터를 게시하는 방법 (0) | 2022.11.05 |
| Mysql - 저장 프로시저를 종료/종료하는 방법 (0) | 2022.11.05 |
| Google Maps API v3: fitBounds 후 줌을 설정할 수 있습니까? (0) | 2022.11.05 |