2010-12-01 9 views
18

मैं प्राप्तकर्ताओं की एक सूची में ईमेल भेजने के लिए जावमेल का उपयोग कर रहा हूं, लेकिन नहीं चाहता कि वे यह देखने में सक्षम हों कि ईमेल किसने प्राप्त किया है। मैं इसे बीसीसी का उपयोग करके भी भेजना नहीं चाहता क्योंकि तब से उपयोगकर्ता स्वयं को TO सूची में नहीं देखता है। मैंने सोचा कि यह कोड यह करेगा, लेकिन यह TO सूची में सभी प्राप्तकर्ताओं को दिखाता है। एक लूप बनाने और एक समय में ईमेल भेजने के अलावा, क्या ऐसा करने का कोई और तरीका है?अन्य प्राप्तकर्ताओं को प्रकट किए बिना एकाधिक प्राप्तकर्ताओं को ईमेल करें

(नोट:। प्राप्तकर्ताओं [] ईमेल पते से युक्त एक स्ट्रिंग सरणी है)

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

उत्तर

15

नहीं, नहीं ईमेल के साथ यह करने के लिए एक तरीका है।

आपको अपने प्रत्येक प्राप्तकर्ता द्वारा पुन: निर्माण और एक ईमेल भेजना होगा, उनमें से एक आपके addressTo सरणी के एकमात्र सदस्य के रूप में होगा।

+3

+1 एक मेलिंग सूची में शामिल लोग "से" शीर्षक में मेलिंग सूची का पता देखने की उम्मीद। "विशेष प्रचार ऑफ़र" ईमेल के लिए सदस्यता लेने वाले लोगों को "to" हेडर में क्या परवाह नहीं है। यदि आप इसे व्यक्तिगत रखना चाहते हैं, तो आप इसे प्राप्त नहीं कर रहे हैं। लोग समझ सकते हैं कि एक ईमेल कॉपी/पेस्ट बड़े पैमाने पर बीएस भेजता है। यदि आप इसे सही तरीके से कर रहे हैं तो आपकी संदेश सामग्री में कम से कम एक $ उपयोगकर्ता नाम चर शामिल होगा और फिर आपको इसे 1 से 1 –

+0

भेजना होगा, इस तरह मुझे बीसीसी के बारे में कैसा लगा, यह बॉक्स में कुछ भी नहीं होने पर कम व्यक्तिगत दिखता है। तो मैं उससे दूर रहने की उम्मीद कर रहा था। – Don

+0

यह उत्तर गलत है। जून 2 9 2012 से मेरा उत्तर देखें। –

7

एसएमटीपी प्रोटोकॉल परवाह नहीं है कि संदेश में कौन सूचीबद्ध है और आरसीपीटी कमांड पर निर्दिष्ट प्राप्तकर्ताओं का उपयोग केवल यह पता लगाने के लिए किया जाता है कि संदेश को किसके पास परिवहन करना है। जैसा आपने ऊपर परिभाषित किया है और फिर एक कस्टम एसएमटीपी क्लाइंट लिखने के लिए आरएफसी 822 संदेश को हेडर के साथ आरएफसी 822 संदेश बनाने से रोक नहीं रहा है जो आपके विशेष संदेश को भेजता है लेकिन प्राप्तकर्ताओं के एक अलग सेट के साथ। और सिर्फ इसलिए कि आप संदेश भेज सकते हैं इसका मतलब यह नहीं है कि रास्ते में एक स्पैम फ़िल्टर जीतने वाले प्राप्तकर्ता शीर्षकों को नोटिस करने और संदेश को अवरुद्ध करने जा रहा है।

मेरे अनुभव में, जावामेल का एसएमटीपी क्लाइंट मेलिंग सूची प्रदाताओं और स्पैमर द्वारा उपयोग किए जाने वाले किसी भी मेल चाल के बिना मूल संदेश भेजने में वास्तव में अच्छा है। वे कंपनियां यह सुनिश्चित करने के लिए बहुत मेहनत करती हैं कि वे संदेश भेज सकते हैं, लेकिन वे यह सुनिश्चित करने के लिए लगातार लड़ाई में हैं कि वे संदेशों को कानूनी ईमेल के रूप में माना जाता है।

संक्षिप्त उत्तर: मैं बीसीसी का सहारा लेता हूं और यदि यह विपणन उद्देश्यों के लिए है, तो ऐसी कंपनी का उपयोग करने पर विचार करें जो इस तरह की चीज़ों में माहिर हैं।

+0

+1। यदि "टू" हेडर छोड़ा गया है, तो कई मेल क्लाइंट क्लाइंट में "टू" फ़ील्ड में "अनजान प्राप्तकर्ता" जैसे कुछ कहेंगे। साथ ही, मुझे लगता है कि यह बहुत ही बढ़िया है कि मेरे उपरांत ने आपका प्रतिनिधि 822 बन गया! – Jeremy

+1

+1 - और ध्यान दें कि जावामेल एपीआई * संदेश शीर्षकों से स्वतंत्र रूप से प्राप्तकर्ताओं को आरसीपीटी सेट करने में सक्षम है। मेरा जवाब देखें –

2

आप प्राप्तकर्ता के बारे में क्यों चिंतित हैं कि वह अपना पता नहीं देख रहा है? वह पहले से ही अपना खुद का पता जानता है, तो यह एक मुद्दा क्यों है? बीसीसी को आपके द्वारा वर्णित समस्या को ठीक करने के लिए डिज़ाइन किया गया था। यह दशकों के लिए आसपास रहा है & एकदम सही फिट की तरह लगता है।

public static void send(Message msg, 
         Address[] addresses) 
       throws MessagingException 

Send the message to the specified addresses, ignoring any recipients specified 
in the message itself. 

तो तुम जबकि डाल जो कुछ भी आप को देखने के लिए प्राप्तकर्ताओं चाहते हैं, Transport.send को सरणी तर्क में वास्तविक वितरण पते (पतों पर RCPT) डाल करने के लिए सक्षम होना चाहिए:

+0

क्योंकि मैंने बीसीसी के साथ मुद्दों के बारे में पढ़ा है, कि शीर्षकों में देखने के तरीके हैं, आदि। इसके अलावा कुछ ईमेल प्रदाता केवल बीसीसी में कुछ पते ही संभाल सकते हैं। – Don

0
javax.mail.Transport के लिए दस्तावेज़ के अनुसार

संदेश शीर्षलेखों में Message.setRecipient, MIMEMessage.addHeader, आदि

यदि आप विभिन्न चीजों को देखने के लिए उपयोगकर्ताओं के विभिन्न सेट चाहते हैं, तो आपको प्रत्येक सेट के लिए एक अलग संदेश बनाना होगा और भेजना होगा।

+1

ओपी चाहता है कि प्रत्येक व्यक्ति एड्रेससी को केवल अपने पते को शीर्ष लेख में देखने के लिए। यदि ओपी आपकी सलाह का पालन करना था, तो प्रत्येक ईमेल के प्राप्तकर्ताओं की संख्या के लिए सेट आकार हमेशा 1 होगा। दिन के अंत में, प्रत्येक प्राप्तकर्ता के लिए अलग दिखने वाला एक एकल थोक ईमेल भेजने का कोई तरीका नहीं है। –

2

दरअसल, हमें बहु-प्राप्तकर्ताओं के लिए मैन्युअल रूप से InternetAddress ऑब्जेक्ट्स बनाने की आवश्यकता नहीं है। InternetAddress एपीआई हमारे लिए ऐसा करने के लिए एक पार्स() विधि प्रदान करता है। नमूना इस के लिए कोड के रूप में नीचे है,

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

यहाँ अगर toAddress एकाधिक ईमेल पते से, (अल्पविराम) अलग होता है विधि कई InternetAddress वस्तुओं बनाता पार्स।

अधिक जानकारी के लिए नीचे API के लिए जांचें।

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

मुबारक कोडिंग। :)

0

Message.RecipientType के रूप में आप Message.RecipientType.BCC का उपयोग करना चाहिए कि हर प्राप्तकर्ता के लिए हर पता नहीं दिखाया जा रहा करने के लिए

गूगल कीवर्ड: जावा मेल बीसीसी

0

आप के रूप में कोड की स्थापना करके ऐसा कर सकते हैं नीचे

message.setRecipients(Message.RecipientType.BCC, toAddrs); 
बजाय

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

ओपी ने उल्लेख किया कि वह बीसीसी का उपयोग नहीं करना चाहता है। – 16dots

1

इस प्रयास करें :

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(); 
संबंधित मुद्दे

 संबंधित मुद्दे