web-dev-qa-db-ja.com

他の受信者を明かさずに複数の受信者にメールを送信する

私はjavamailを使用して受信者のリストにメールを送信していますが、他の誰がメールを受信したのかを彼らに見られたくないのです。また、ユーザーがTOリストに自分自身を表示しないため、BCCを使用して送信したくありません。このコードでそれができると思いましたが、それはTOリストのすべての受信者を示しています。ループを作成して一度に1つずつメールを送信する以外に、これを行う別の方法はありますか?

(注:recipients []は、電子メールアドレスを含む文字列配列です。)

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

いいえ、メールでこれを行う方法はありません。

addressTo配列の唯一のメンバーとして、受信者ごとに明示的に反復してメールを送信する必要があります。

16

SMTPプロトコルは、メッセージに誰がリストされているかは関係ありません。RCPTTOコマンドで指定された受信者は、メッセージの送信先を特定するためにのみ使用されます。上記で定義したToヘッダーを使用してRFC822メッセージを作成し、特定のメッセージを送信するが、受信者のセットが異なるカスタムSMTPクライアントを作成することを妨げるものは何もありません。また、メッセージを送信できるからといって、途中でスパムフィルターが不安定な受信者ヘッダーに気づき、メッセージをブロックするわけではありません。

私の経験では、JavaMailのSMTPクライアントは、メーリングリストのプロバイダーやスパマーがよく使用するメールトリックを使わずに、基本的なメッセージを送信するのに本当に優れています。これらの企業は、メッセージを希望どおりに送信できるようにするために多くの労力を費やしていますが、メッセージが正当なメールとして扱われることを確認するためにも絶え間ない努力をしています。

短い答え:私はBCCに訴えますが、これがマーケティング目的の場合は、この種のことに特化した会社の使用を検討してください。

7
dhable

実際、Multi RecepientsのInternetAddressオブジェクトを手動で作成する必要はありません。 InternetAddress APIは、これを行うためのparse()メソッドを提供します。これのサンプルコードは以下の通りです、

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

ここで、parseメソッドは、toAddressに、(comma)で区切られた複数の電子メールアドレスが含まれている場合、複数のInternetAddressオブジェクトを作成します。

詳細については、以下のAPIを確認してください。

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

ハッピーコーディング。 :)

2
Manjunath D R

受信者が自分のアドレスを表示しないのがなぜ心配ですか?彼はすでに自分の住所を知っているので、なぜそれが問題なのでしょうか。 BCCは、あなたが説明する問題を正確に処理するように設計されています。それは何十年も前からあり、完璧なフィット感のようです。

2
aksarben

これを試して:

Session session = Session.getInstance(properties);
Transport transport = session.getTransport("smtp");
String recipient = "[email protected],ex2@mail.";
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

message.RecipientTypeとして、すべての受信者にすべてのアドレスを表示しないようにMessage.RecipientType.BCCを使用する必要があります

Googleキーワード:Java Mail BCC

0
titi

次のようにコードを設定することでこれを行うことができます

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

の代わりに

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