it-swarm.com.de

Senden Sie mehreren Empfängern eine E-Mail, ohne andere Empfänger preiszugeben

Ich verwende Javamail, um E-Mails an eine Liste von Empfängern zu senden, möchte aber nicht, dass sie sehen können, wer die E-Mail sonst erhalten hat. Ich möchte es auch nicht mit BCC senden, da der Benutzer sich selbst nicht in der TO-Liste sieht. Ich dachte, dieser Code würde es tun, aber es zeigt alle Empfänger in der TO-Liste. Gibt es eine andere Möglichkeit, eine Schleife zu erstellen und die E-Mails einzeln zu senden?

(HINWEIS: Empfänger [] ist ein String-Array, das die E-Mail-Adressen enthält.)

javax.mail.internet.InternetAddress[] addressTo = new javax.mail.internet.InternetAddress[recipients.length];

for (int i = 0; i < recipients.length; i++)
{
    addressTo[i] = new javax.mail.internet.InternetAddress(recipients[i]);
}

msg.setRecipients(javax.mail.Message.RecipientType.TO, addressTo); 
19
Don

Nein, dies ist mit E-Mail nicht möglich. 

Sie müssen explizit eine E-Mail erstellen und senden, die von jedem Ihrer Empfänger wiederholt wird. Einer davon ist das einzige Mitglied Ihres addressTo-Arrays.

16

Dem SMTP-Protokoll ist es egal, wer in der Nachricht aufgeführt ist. Die im Befehl RCPT TO angegebenen Empfänger werden nur verwendet, um herauszufinden, an wen die Nachricht gesendet werden soll. Es gibt nichts, was Sie daran hindert, die RFC822-Nachricht mit dem To-Header wie oben definiert zu erstellen und dann einen benutzerdefinierten SMTP-Client zu schreiben, der Ihre bestimmte Nachricht aussendet, jedoch mit einem anderen Empfängersatz. Und nur weil Sie die Nachricht senden können, bedeutet dies nicht, dass ein Spam-Filter die Empfängerheader erkennt und die Nachricht blockiert.

Nach meiner Erfahrung ist der SMTP-Client von JavaMail wirklich gut darin, grundlegende Nachrichten zu senden, ohne die Mail-Tricks, die Sie häufig von Mailing-Listen-Providern und Spammern gesehen haben. Diese Unternehmen geben sich viel Mühe, um sicherzustellen, dass sie Nachrichten so senden können, wie sie möchten, aber sie kämpfen ständig darum, sicherzustellen, dass sie als echte E-Mail behandelt werden.

Kurze Antwort: Ich würde auf BCC zurückgreifen. Wenn dies zu Marketingzwecken der Fall ist, sollten Sie ein Unternehmen in Betracht ziehen, das sich auf solche Dinge spezialisiert hat.

7
dhable

Tatsächlich müssen wir InternetAddress-Objekte für Multi Recepients ..__ nicht manuell erstellen. InternetAddress api stellt eine parse () -Methode bereit, um dies für uns zu erledigen .

msg.setRecipients(Message.RecipientType.TO,  InternetAddress.parse(toAddress));

Hier erstellt die Analysemethode mehrere InternetAddress-Objekte, wenn toAddress mehrere E-Mail-Adressen enthält, die durch (Komma) getrennt sind.

Weitere Informationen finden Sie unter der API.

http://docs.Oracle.com/javaee/6/api/javax/mail/internet/InternetAddress.html#parse(Java.lang.String)

Glückliche Kodierung. :)

2
Manjunath D R

Warum machen Sie sich Sorgen, dass der Empfänger seine eigene Adresse nicht sehen kann? Er kennt bereits seine eigene Adresse, warum ist das ein Problem? BCC wurde entwickelt, um genau das Problem zu behandeln, das Sie beschreiben. Es gibt es schon seit Jahrzehnten und klingt nach einer perfekten Passform.

2
aksarben

Versuche dies:

Session session = Session.getInstance(properties);
Transport transport = session.getTransport("smtp");
String recipient = "[email protected],[email protected]";
String[] recipients = recipient.split(",");
transport.connect(server, username, password);

for (String to : recipients) {

   Message message = new MimeMessage(session);
   message.setFrom(new InternetAddress(from));
   InternetAddress[] address = {new InternetAddress(to)};
   message.setRecipients(Message.RecipientType.TO, address);

   message.setSubject(subject);
   message.setText(body);
   message.setContent(body, "text/plain");
   message.saveChanges();
   transport.sendMessage(message, address);

}

transport.close();
1

als Message.RecipientType sollten Sie Message.RecipientType.BCC verwenden, um nicht jedem Empfänger die einzelnen Adressen anzuzeigen

Google Keywords: Java Mail BCC

0
titi

Sie können dies tun, indem Sie den Code wie folgt einstellen

message.setRecipients(Message.RecipientType.BCC, toAddrs);

anstatt

message.setRecipients(Message.RecipientType.TO, toAddrs);
0