it-swarm.com.de

Senden Sie eine E-Mail an mehrere Empfänger in Java

Ich möchte eine Nachricht mit der folgenden Methode an mehrere Empfänger senden:

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

OR

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

Eine Verwirrung besteht jedoch darin, dass Wie mehrere Adressen übergeben werden können:

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

OR

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

Ich kann Nachrichten auch mit alternativen Methoden senden, möchte aber wissen, wozu die obige Methode dient. Wenn ich sie nicht verwenden kann (da ich bisher keine Antwort auf obige Anforderung habe), dann ist was für diese Methode notwendig in der Mail-API sein.

68
Prateek

Wenn Sie addRecipient mehrmals aufrufen, wird der angegebene Empfänger zur Liste der Empfänger der angegebenen Zeit (TO, CC, BCC) hinzugefügt.

Zum Beispiel:

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

Fügt die 3 Adressen zu CC hinzu


Wenn Sie alle Adressen auf einmal hinzufügen möchten, sollten Sie setRecipients oder addRecipients verwenden und ein Array von Adressen angeben

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

Sie können auch InternetAddress.parse verwenden, um eine Liste von Adressen zu analysieren

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

Hallo, jeder dieser Code funktioniert für mich. Bitte versuchen Sie es damit, um Mail an mehrere Empfänger zu senden

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

Versuchen Sie es so:

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

Verwenden Sie einfach die Methode message.setRecipients mit mehreren Adressen, die durch Kommas getrennt sind: 

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

funktioniert auch mit nur einer Adresse

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

Sie können mehrere Adressen durch Kommas trennen

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

Also ... es hat viele Monate gedauert, aber immer noch ... Sie können E-Mails an mehrere Empfänger senden, indem Sie ',' als Trennzeichen und verwenden 

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

ist in Ordnung. Zumindest in JavaMail 1.4.5

5
bes67

InternetAddress.Parse wird dein Freund sein! Sehen Sie sich das bearbeitete Beispiel unten an: 

String to = "[email protected], [email protected], [email protected]";
String toCommaAndSpaces = "[email protected] [email protected], [email protected]";
  1. Analysieren Sie eine durch Kommas getrennte Liste von E-Mail-Adressen. Sei streng. Kommagetrennte Liste erforderlich. 
  2. Wenn strict wahr ist, werden viele (aber nicht alle) der RFC822 - Syntaxregeln für E-Mails durchgesetzt. 

    msg.setRecipients(Message.RecipientType.CC,
    InternetAddress.parse(to, true));
    
  3. Durchsuchen Sie die durch Kommas/Leerzeichen getrennte Liste. Schneiden Sie etwas Spiel. Wir erlauben auch getrennte Listen mit Leerzeichen sowie ungültige E-Mail-Formate.

    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

Wenn Sie als Cc mit MimeMessageHelper senden möchten

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

Dasselbe können Sie verwenden, um mehrere Empfänger hinzuzufügen. 

1
Arun

Format der Internet-E-Mail-Adresse ( RFC 822 )

(,)comma getrennte Reihenfolge der Adressen

javax.mail - 1.4.7 parse( String[] ) ist nicht zulässig. Wir müssen also eine durch Kommas getrennte Reihenfolge von Adressen in InternetAddress objects angeben. Adressen müssen der RFC822-Syntax folgen.

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

(;) Semikolon getrennte Folge von Adressen « Wenn Gruppe der Adressliste mit Begrenzungszeichen als ";" versehen ist Dann konvertieren Sie das String-Array mit der split-Methode, um die folgende Funktion zu verwenden.

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

Vollständiges Beispiel:

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 verwenden SimpleEmail - commons-email-1.3.1

Beispiel: 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

Sie können die Anzahl der Empfänger verwenden.

  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

einfache möglichkeit

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

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