जावा में कई प्राप्तकर्ता को मेल भेजें


80

मैं विधि का पालन करके एकाधिक प्राप्तकर्ताओं को एक संदेश भेजना चाहता हूं:

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

या

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

लेकिन एक भ्रम यह है कि दूसरे तर्क में, कई पते कैसे पास करें:

message.addRecipient(Message.RecipientType.CC, "abc@abc.com,abc@def.com,ghi@abc.com");

या

message.addRecipient(Message.RecipientType.CC, "abc@abc.com;abc@def.com;ghi@abc.com");

मैं वैकल्पिक तरीकों का उपयोग करके भी एक संदेश भेज सकता हूं, लेकिन उपरोक्त विधि का उद्देश्य जानना चाहता हूं। यदि मैं इसका उपयोग नहीं कर सकता (अब तक मुझे उपरोक्त आवश्यकता के लिए कोई उत्तर नहीं मिला है) तो मेल एपीआई में इस पद्धति की क्या आवश्यकता है।

जवाबों:


113

यदि आप addRecipientकई बार आह्वान करते हैं तो यह दिए गए प्राप्तकर्ता को दिए गए समय के प्राप्तकर्ता की सूची में जोड़ देगा (TO, CC, BCC)

उदाहरण के लिए:

message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("abc@abc.com"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("abc@def.com"));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("ghi@abc.com"));

CC पर 3 पते जोड़ेंगे


यदि आप एक बार में सभी पतों को जोड़ना चाहते हैं, तो आपको एक पतों का उपयोग करना चाहिए setRecipientsया addRecipientsइसे प्रदान करना चाहिए

Address[] cc = new Address[] {InternetAddress.parse("abc@abc.com"),
                               InternetAddress.parse("abc@def.com"), 
                               InternetAddress.parse("ghi@abc.com")};
message.addRecipients(Message.RecipientType.CC, cc);

आप InternetAddress.parseपतों की सूची को पार्स करने के लिए भी उपयोग कर सकते हैं

message.addRecipients(Message.RecipientType.CC, 
                      InternetAddress.parse("abc@abc.com,abc@def.com,ghi@abc.com"));

1
वास्तव में मेरा प्रश्न विशेष रूप से एक विशेष विधि के बारे में है।
प्रेटेक

2
आप या तो एक पते के साथ / / एक सरणी पते के साथ addRecipient/ का उपयोग करते हैंsetRecipientaddRecipientssetRecipients
अविराम सहगल

3
javax.mailसंस्करण 1.5.5 में InternetAddress.parse()वह रिटर्न नहीं है String। सभी पार्स तरीके सरणी लौटाते हैं और इसलिए इसके लिए उपयुक्त नहीं हैं addRecipient। क्या कोई अन्य संस्करण है जिसमें ऐसी विधि है?
युरिन

2
आप जब javax.mailसंस्करण 1.5.5या अधिक से अधिक है जहाँ आप की जरूरत नहीं है InternetAddress.parse()कि रिटर्न एकल InternetAddressलेकिन केवल एक है कि रिटर्न InternetAddress[](सरणी) का उपयोग कर सकते पहला समाधान होने ... message.addRecipient(Message.RecipientType.CC, InternetAddress.parse("abc@def.com")[0]); ... ([0] महत्वपूर्ण है) । में दूसरा समाधान: ... new Address[] {InternetAddress.parse("abc@abc.com")[0], ... तीसरे समाधान बदलाव के बिना काम करना चाहिए। बेशक [0] अंत में प्रत्येक समाधान में सभी पते पर लागू किया जाना चाहिए।
ल्यूक

1
@ ल्यूक .. धन्यवाद, मैं कुछ समय से संघर्ष कर रहा हूं .. और आपकी टिप्पणी से मुझे मदद मिली।
स्टैक 0114106

29

नमस्ते हर एक यह कोड मेरे लिए काम कर रहा है कृपया इसके लिए कई प्राप्तकर्ताओं को मेल भेजने के लिए प्रयास करें

private String recipient = "yamabs@gmail.com ,priya@gmail.com ";
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);

12

इस तरह आज़माएँ:

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("mail3@mail.com"));
String address = "mail@mail.com,mail2@mail.com";
InternetAddress[] iAdressArray = InternetAddress.parse(address);
message.setRecipients(Message.RecipientType.CC, iAdressArray);

12

कॉमा द्वारा अलग किए गए कई पतों के साथ बस मेसेज मेसेजसेट का उपयोग करें।

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("abc@abc.com,abc@def.com,ghi@abc.com"));

message.setRecipients(Message.RecipientType.CC, InternetAddress.parse("abc@abc.com,abc@def.com,ghi@abc.com"));

केवल एक पते के साथ भी ठीक काम करता है

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("abc@abc.com"));

11

आपके पास अल्पविराम द्वारा अलग-अलग पते हो सकते हैं

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

1
आप InternetAddress.parse()दोनों के लिए उपयोग क्यों नहीं करेंगे ? (और हां, मुझे पता है कि यह 4 साल पुराना है)
सीन ब्राइट

2
@ seanbright हाँ, आप बस पहले बयान को छोड़ सकते हैं अगर पूरी तरह से स्थिति को छोड़ दें। setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));यहां तक ​​कि काम करना चाहिए भले ही केवल 1 पता हो। पठनीयता बढ़ाने के लिए यह प्रोग्रामिंग का एक निजी तरीका है।
thePCWizard

6

तो ... इसमें कई महीने लग गए, लेकिन फिर भी ... आप विभाजक के रूप में ',' का उपयोग करके कई प्राप्तकर्ताओं को ईमेल भेज सकते हैं

message.setRecipients(Message.RecipientType.CC, "abc@abc.com,abc@def.com,ghi@abc.com");

ठीक है। कम से कम JavaMail में 1.4.5


5

InternetAddress.Parse आपका दोस्त बनने जा रहा है! नीचे दिया गया उदाहरण देखें:

String to = "med@joe.com, maz@frank.com, jezz@jam.com";
String toCommaAndSpaces = "med@joe.com maz@frank.com, jezz@jam.com";
  1. ईमेल पतों की अल्पविराम से अलग सूची पार्स करें। सख्त बनो। अल्पविराम से अलग सूची की आवश्यकता है।
  2. यदि सख्त सही है, तो ईमेल के लिए RFC822 वाक्यविन्यास नियमों के कई (लेकिन सभी नहीं) लागू होते हैं।

    msg.setRecipients(Message.RecipientType.CC,
    InternetAddress.parse(to, true));
    
  3. पार्स अल्पविराम / अंतरिक्ष-पृथक सूची। कुछ स्लैक काटें। हम रिक्त स्थान की सूची के साथ-साथ अमान्य ईमेल स्वरूपों को भी अनुमति देते हैं।

    msg.setRecipients(Message.RecipientType.BCC,
    InternetAddress.parse(toCommaAndSpaces, false));
    

4
String[] mailAddressTo = new String[3];    
mailAddressTo[0] = emailId_1;    
mailAddressTo[1] = emailId_2;    
mailAddressTo[2] = "xyz@gmail.com";

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

इंटरनेट ई-मेल पता प्रारूप ( RFC 822)

(,)अल्पविराम ने पतों का क्रम अलग कर दिया

javax.mail - 1.4.7 parse( String[] )की अनुमति नहीं है। इसलिए हमे अल्पविराम के अलग-अलग अनुक्रम को InternetAddressवस्तुओं में देना होगा। पते RFC822 सिंटैक्स का पालन करना चाहिए।

String toAddress = "mail@mail.com,mail2@mail.com";
InternetAddress.parse( toAddress );

(;)पते के अर्ध-बृहदान्त्र पृथक अनुक्रम «यदि पता सूची का समूह " के रूप में परिधि के साथ प्रदान किया गया है; " फिर निम्न फ़ंक्शन का उपयोग करने के लिए विभाजित विधि का उपयोग करके स्ट्रिंग सरणी में कनवर्ट करें।

String[] addressList = { "mail@mail.com", "mail2@mail.com" };

String toGroup = "mail@mail.com;mail2@mail.com";
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);
    }
}

पूर्ण उदाहरण:

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 का उपयोग करना SimpleEmail-commons-email-1.3.1

उदाहरण: 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( "mail@mail.com", "Yash" );
    String[] toAddressList = { "mail@mail.com", "mail2@mail.com" }
    email.addTo( addressList );

    email.setTLS(true);
    email.setStartTLSEnabled( true );
    email.send();
    System.out.println("Mail sent!");
}

1

आप नीचे दिए गए तरीके से प्राप्तकर्ता की संख्या का उपयोग कर सकते हैं:

  String to[] = {"a@gmail.com"} //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);

मैंने अपने प्रश्न में एक विशेष विधि निर्दिष्ट की, जिसका उपयोग करके भेजना चाहते हैं।
प्रेटेक

@ दिनकर, सभी ग्राहकों को जावा से मेल कैसे भेजें?
codepro123

1

यदि आप MimeMessageHelper का उपयोग करके Cc के रूप में भेजना चाहते हैं

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

आप एक से अधिक प्राप्तकर्ता जोड़ने के लिए उपयोग कर सकते हैं।


1

करने का आसान तरीका

String[] listofIDS={"ramasamygms@gmail.com","ramasamycse94@gmail.com"};

for(String cc:listofIDS) {
    message.addRecipients(Message.RecipientType.CC,InternetAddress.parse(cc));
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.