Подтвердить что ты не робот

Отправить письмо нескольким получателям в java

Я хочу отправить сообщение нескольким Получателям, используя следующий метод:

message.addRecipient(Message.RecipientType.TO, String arg1);

ИЛИ ЖЕ

message.setRecipients(Message.RecipientType.TO,String arg1);

Но одна путаница заключается в том, что во втором аргументе, как передать несколько адресов, таких как:

message.addRecipient(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");

ИЛИ ЖЕ

message.addRecipient(Message.RecipientType.CC, "[email protected];[email protected];[email protected]");

Я могу также отправить сообщение, используя альтернативные методы, но хочу знать назначение вышеуказанного метода. Если я не могу использовать его (так как до сих пор у меня нет ответа на вышеуказанное требование), тогда зачем нужен этот метод в почтовом API.

4b9b3361

Ответ 1

Если вы вызываете addRecipient несколько раз, он добавит данного получателя в список получателей данного времени (TO, CC, BCC)

Например:

message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("[email protected]"));

Добавит 3 адреса в CC


Если вы хотите сразу добавить все адреса, вы должны использовать setRecipients или addRecipients и предоставить ему массив адресов

Address[] cc = new Address[] {InternetAddress.parse("[email protected]"),
                               InternetAddress.parse("[email protected]"), 
                               InternetAddress.parse("[email protected]")};
message.addRecipients(Message.RecipientType.CC, cc);

Вы также можете использовать InternetAddress.parse для анализа списка адресов

message.addRecipients(Message.RecipientType.CC, 
                      InternetAddress.parse("[email protected],[email protected],[email protected]"));

Ответ 2

Привет всем, этот код работает для меня, попробуйте с этим для отправки почты нескольким получателям.

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);

Ответ 3

Попробуйте следующим образом:

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);

Ответ 4

Просто используйте метод message.setRecipients с несколькими адресами, разделенными запятыми:

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]"));

работает нормально только с одним адресом

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));

Ответ 5

У вас может быть несколько адресов, разделенных запятой

if (cc.indexOf(',') > 0)
    message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));   
else
    message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));

Ответ 6

Итак, это заняло много месяцев, но все же... Вы можете отправить электронное письмо нескольким получателям с помощью разделителя "," и

message.setRecipients(Message.RecipientType.CC, "[email protected],[email protected],[email protected]");

в порядке. По крайней мере, в JavaMail 1.4.5

Ответ 7

InternetAddress.Parse будет вашим другом! См. Приведенный ниже пример:

String to = "[email protected], [email protected], [email protected]";
String toCommaAndSpaces = "[email protected] [email protected], [email protected]";
  • Разберите список адресов электронной почты, разделенный запятыми. Будьте строгими. Требуется список, разделенный запятыми.
  • Если строго верно, многие (но не все) RFC822 правила синтаксиса для электронных писем соблюдаются.

    msg.setRecipients(Message.RecipientType.CC,
    InternetAddress.parse(to, true));
    
  • Разделите список разделяемых запятыми/пробелами. Отрежьте немного. Мы также разрешаем список разделенных пробелов, а также недопустимые форматы электронной почты.

    msg.setRecipients(Message.RecipientType.BCC,
    InternetAddress.parse(toCommaAndSpaces, false));
    

Ответ 8

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]; 

Ответ 9

Формат адреса электронной почты в Интернете ( RFC 822)

(,) последовательность адресов через запятую

javax.mail - parse( String[] ) 1.4.7 parse( String[] ) не разрешен. Таким образом, мы должны задать разделенную запятыми последовательность адресов в объектах InternetAddress. Адреса должны соответствовать синтаксису RFC822.

String toAddress = "[email protected],[email protected]";
InternetAddress.parse( toAddress );

(;) последовательность адресов, разделенных точкой с запятой "Если группа списка адресов снабжена разделителем как"; " затем преобразуйте в массив String, используя метод split, чтобы использовать следующую функцию.

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);
    }
}

Полный пример:

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( "[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!");
}

Ответ 10

Вы можете использовать n-число получателей ниже метода:

  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);

Ответ 11

Если вы хотите отправить Cc с помощью MimeMessageHelper

List<String> emails= new ArrayList();
email.add("email1");
email.add("email2");
for (String string : emails) {
message.addCc(string);
}

То же самое можно использовать для добавления нескольких получателей.

Ответ 12

простой способ сделать

  String[] listofIDS={"[email protected]","[email protected]"};

    for(String cc:listofIDS){
    message.addRecipients(Message.RecipientType.CC,InternetAddress.parse(cc));
    }