web-dev-qa-db-fra.com

Envoyer un courrier à plusieurs destinataires en java

Je souhaite envoyer un message à plusieurs destinataires à l'aide de la méthode suivante ::

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

OR

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

Mais une confusion est que dans Second argument, Comment transmettre plusieurs adresses comme:

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

OR

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

Je peux envoyer un message en utilisant d'autres méthodes aussi, mais je veux savoir le but de la méthode ci-dessus . Si je ne peux pas l'utiliser (jusqu'à présent, je n'ai pas de réponse pour l'exigence ci-dessus), alors quelle est la nécessité de cette méthode être dans la messagerie API.

68
Prateek

Si vous appelez addRecipient plusieurs fois, le destinataire indiqué sera ajouté à la liste des destinataires de l'heure indiquée (TO, CC, BCC).

Par exemple:

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

Ajoutera les 3 adresses à CC


Si vous souhaitez ajouter toutes les adresses en même temps, vous devez utiliser setRecipients ou addRecipients et lui fournir un tableau d'adresses.

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

Vous pouvez également utiliser InternetAddress.parse pour analyser une liste d'adresses

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

Salut à tous ce code fonctionne pour moi s'il vous plaît essayer avec cela pour envoyer un courrier à plusieurs destinataires

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);
24
G.K

Essayez de cette façon:

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

Utilisez simplement la méthode message.setRecipients avec plusieurs adresses séparées par des virgules: 

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

fonctionne bien avec une seule adresse aussi

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

Vous pouvez avoir plusieurs adresses séparées par une virgule

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

Donc… cela a pris plusieurs mois, mais quand même… Vous pouvez envoyer un courrier électronique à plusieurs destinataires en utilisant les séparateurs ',' et 

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

est ok Au moins dans JavaMail 1.4.5

5
bes67

InternetAddress.Parse va être votre ami! Voir l'exemple travaillé ci-dessous: 

String to = "[email protected], [email protected], [email protected]";
String toCommaAndSpaces = "[email protected] [email protected], [email protected]";
  1. Analyser une liste d'adresses électroniques séparées par des virgules. Être strict. Nécessite une liste séparée par des virgules. 
  2. Si strict est vrai, beaucoup (mais pas toutes) des règles de syntaxe RFC822 pour les courriels sont appliquées. 

    msg.setRecipients(Message.RecipientType.CC,
    InternetAddress.parse(to, true));
    
  3. Parse virgule/liste séparée par des espaces. Couper un peu de mou. Nous autorisons également la liste séparée par espaces, ainsi que les formats de courrier électronique non valides.

    msg.setRecipients(Message.RecipientType.BCC,
    InternetAddress.parse(toCommaAndSpaces, false));
    
5
Matt
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]; 
4
user2389095

Si vous voulez envoyer en tant que Cc en utilisant MimeMessageHelper

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

Même chose que vous pouvez utiliser pour ajouter plusieurs destinataires. 

1
Arun

Format d'adresse de messagerie Internet ( RFC 822 )

(,)comma séquence d'adresses séparées

javax.mail - 1.4.7 parse( String[] ) n'est pas autorisé. Nous devons donc donner une séquence d'adresses séparées par des virgules dans InternetAddress objects. Les adresses doivent suivre la syntaxe RFC822.

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

(;) séquence d'adresses séparées par des points-virgules « Si le groupe de la liste d'adresses est fourni avec un séparateur sous la forme ";" convertissez ensuite en tableau String en utilisant la méthode split pour utiliser la fonction suivante.

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

Exemple complet:

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

Utilisation d'Appache SimpleEmail - commons-email-1.3.1

Exemple: 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!");
}
1
Yash

Vous pouvez utiliser la méthode n-numéro de destinataire ci-dessous:

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

moyen facile de faire

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

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