2012-12-13 27 views
54

voglio inviare un messaggio a più destinatari utilizzando il metodo seguente ::Invia Mail a più destinatari in java

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

O

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

Ma una confusione è che in Second arguement, Come passare più indirizzi come:

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

O

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

posso inviare il messaggio utilizzando metodi alternativi troppo, ma si vuole conoscere lo scopo di metodo di cui sopra. Se non posso usarlo (come fino ad ora non ho alcuna risposta per il requisito di cui sopra), allora qual è la necessità per questo metodo di essere in API di posta elettronica.

risposta

81

Se si richiama addRecipient più volte si aggiungerà la data destinatario all'elenco dei destinatari del tempo dato (A, CC, BCC)

Ad esempio:

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

aggiungerà il 3 indirizzi su CC


Se si desidera aggiungere tutti gli indirizzi in una volta si dovrebbe usare setRecipients o addRecipients e dotarla di una matrice di indirizzi

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

è anche possibile utilizzare InternetAddress.parse per analizzare un elenco di indirizzi

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

quindi devo usarlo n volte per n destinatari rispetto a ciò che è l'uso del metodo tis overload .... allora la seconda argomentazione come array è meglio. Per favore suggerire – Prateek

+3

Aggiornato la mia risposta per mostrare come aggiungere tutto in una volta –

+1

In realtà la mia domanda riguarda specificamente un metodo particolare. – Prateek

7

si può avere più indirizzi separati da virgole

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

Perché non dovresti usare 'InternetAddress.parse()' per entrambi? (E sì, lo so che ha 4 anni) –

+1

@seanbright si si può semplicemente avere la prima frase saltando del tutto la condizione if else. 'setRecipients (Message.RecipientType.CC, InternetAddress.parse (cc));' dovrebbe funzionare anche se c'è solo 1 indirizzo. È un modo personale di programmazione per aumentare la leggibilità. – ThePCWizard

1

È possibile utilizzare n- numero di destinatario sotto il metodo:

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

ho specificato un metodo particolare nella mia domanda, voglio inviarlo usando quello. – Prateek

18

Ciao a tutti questo codice è workin per me riprova con questo per l'invio di posta a più recepients

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

InternetAddress. Parse sarà tuo amico!Vedere l'esempio di seguito lavorato:

String to = "[email protected], [email protected], [email protected]"; 
String toCommaAndSpaces = "[email protected] [email protected], [email protected]"; 
  1. analizzare un elenco separato da virgole di indirizzi e-mail. Sii severo. Richiedi un elenco separato da virgole.
  2. Se strict è vero, molte (ma non tutte) delle regole di sintassi RFC822 per le e-mail vengono applicate.

    msg.setRecipients(Message.RecipientType.CC, 
    InternetAddress.parse(to, true)); 
    
  3. Elenco di virgola/spazio separato. Taglia un po 'di gioco. Permettiamo anche spazi separati, oltre a formati e-mail non validi.

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

Se si desidera inviare come Cc utilizzando MimeMessageHelper

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

Lo stesso si può usare per aggiungere il destinatario multipla.

7

Basta usare i message.setRecipients metodo con più indirizzi separati da virgole:

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

funziona bene con un solo indirizzo anche

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]")); 
2
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]; 
+0

Rohit Vyas ....... – user2389095

Problemi correlati