私は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);
いいえ、メールでこれを行う方法はありません。
addressTo
配列の唯一のメンバーとして、受信者ごとに明示的に反復してメールを送信する必要があります。
SMTPプロトコルは、メッセージに誰がリストされているかは関係ありません。RCPTTOコマンドで指定された受信者は、メッセージの送信先を特定するためにのみ使用されます。上記で定義したToヘッダーを使用してRFC822メッセージを作成し、特定のメッセージを送信するが、受信者のセットが異なるカスタムSMTPクライアントを作成することを妨げるものは何もありません。また、メッセージを送信できるからといって、途中でスパムフィルターが不安定な受信者ヘッダーに気づき、メッセージをブロックするわけではありません。
私の経験では、JavaMailのSMTPクライアントは、メーリングリストのプロバイダーやスパマーがよく使用するメールトリックを使わずに、基本的なメッセージを送信するのに本当に優れています。これらの企業は、メッセージを希望どおりに送信できるようにするために多くの労力を費やしていますが、メッセージが正当なメールとして扱われることを確認するためにも絶え間ない努力をしています。
短い答え:私はBCCに訴えますが、これがマーケティング目的の場合は、この種のことに特化した会社の使用を検討してください。
実際、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)
ハッピーコーディング。 :)
受信者が自分のアドレスを表示しないのがなぜ心配ですか?彼はすでに自分の住所を知っているので、なぜそれが問題なのでしょうか。 BCCは、あなたが説明する問題を正確に処理するように設計されています。それは何十年も前からあり、完璧なフィット感のようです。
これを試して:
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();
message.RecipientTypeとして、すべての受信者にすべてのアドレスを表示しないようにMessage.RecipientType.BCCを使用する必要があります
Googleキーワード:Java Mail BCC
次のようにコードを設定することでこれを行うことができます
message.setRecipients(Message.RecipientType.BCC, toAddrs);
の代わりに
message.setRecipients(Message.RecipientType.TO, toAddrs);