programing

Java에서 여러 수신인에게 메일 보내기

goodjava 2022. 11. 5. 17:49

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";
  1. 쉼표로 구분된 전자 메일 주소 목록을 구문 분석합니다.엄격히 하다.쉼표로 구분된 목록이 필요합니다.

  2. strict가 true인 경우 이메일에 대한 RFC822 구문 규칙의 많은 부분이(전부는 아님) 적용됩니다.

    msg.setRecipients(Message.RecipientType.CC,
    InternetAddress.parse(to, true));
    
  3. 쉼표/공간 구분 목록을 구문 분석합니다.좀 느슨하게 해라.공백으로 구분된 목록과 유효하지 않은 이메일 형식을 사용할 수도 있습니다.

    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