Exchange मेलबॉक्स और संदेशों के साथ काम करना - जावा में Exchange सर्वर से ईमेल पढ़ें

Contents
[ ]

EWS का उपयोग करके मेलबॉक्स जानकारी प्राप्त करना

यह EWSClient क्लास के सदस्य हैं जिन्हें कॉल करके Exchange सर्वर से मेलबॉक्स जानकारी प्राप्त की जा सकती है IEWSClient.getMailboxInfo() मेथड। यह प्रकार का एक इंस्टेंस रिटर्न करता है ExchangeMailboxInfo. मेलबॉक्स जानकारी प्राप्त करें जैसे प्रॉपर्टीज़ से MailboxUri, InboxUri और DraftsUri. यह लेख दिखाता है कि Exchange Web Services का उपयोग करके मेलबॉक्स जानकारी कैसे प्राप्त करें।

यदि आप Exchange Web Services (EWS) के माध्यम से Exchange सर्वर से कनेक्ट होना चाहते हैं, तो उपयोग करें EWSClient क्लास। यह क्लास EWS का उपयोग करके Exchange सर्वर पर आइटम्स को कनेक्ट और प्रबंधित करता है। निम्नलिखित जावा कोड स्निपेट दिखाता है कि आप Exchange Web Services का उपयोग करके मेलबॉक्स जानकारी कैसे प्राप्त करें।

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get mailbox size, exchange mailbox info, Mailbox and Inbox folder URI
System.out.println("Mailbox size: " + client.getMailboxSize() + " bytes");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
System.out.println("Inbox folder URI: " + mailboxInfo.getInboxUri());
System.out.println("Sent Items URI: " + mailboxInfo.getSentItemsUri());
System.out.println("Drafts folder URI: " + mailboxInfo.getDraftsUri());

ईमेल संदेश भेजना

आप Exchange सर्वर का उपयोग करके ईमेल संदेश भेज सकते हैं, इसके लिए इन टूल्स की मदद लें Aspose.Email.Exchange. IEWSClient.Send() मेथड एक MailMessage इंस्टेंस को पैरामीटर के रूप में पास करके ईमेल भेजता है। यह लेख समझाता है कि Exchange Web Services का उपयोग करके ईमेल संदेश कैसे भेजें।

Aspose.Email Microsoft Exchange Server से कनेक्ट होने के लिए IEWSClient क्लास प्रदान करता है, जो Exchange Web Services का उपयोग करता है। निम्नलिखित कोड स्निपेट दिखाता है कि आप EWS का उपयोग करके Microsoft Exchange Server पर ईमेल कैसे भेजते हैं। नीचे दिया गया जावा कोड स्निपेट दर्शाता है कि आप EWS के द्वारा ईमेल संदेश कैसे भेजते हैं।

// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Create instance of type MailMessage
MailMessage msg = new MailMessage();
msg.setFrom(MailAddress.to_MailAddress("sender@domain.com"));
msg.setTo(MailAddressCollection.to_MailAddressCollection("recipient@ domain.com "));
msg.setSubject("Sending message from exchange server");
msg.setHtmlBody("<h3>sending message from exchange server</h3>");

// Send the message
client.send(msg);

संदेश क्लास प्राप्त करना

यह getMessageClass() विधि ExchangeMessageInfo क्लास संदेश के लिए क्लास का प्रतिनिधित्व करने वाला स्ट्रिंग लौटाता है। नीचे दिया गया कोड उदाहरण दिखाता है कि संदेश क्लास कैसे प्राप्त करें:

try (IEWSClient client = EWSClient.getEWSClient(uri, credentials))
{
    ExchangeMessageInfoCollection messageInfoCollection = client.listMessagesFromPublicFolder(publicFolder);

    for (ExchangeMessageInfo messageInfo : messageInfoCollection)
    {
        System.out.println("Message Class: " + messageInfo.getMessageClass());
    }
}

अन्य उपयोगकर्ता के मेलबॉक्स से ईमेल पढ़ना

कुछ Exchange सर्वर खातों को कई मेलबॉक्स तक पहुँचने का अधिकार होता है, और कुछ उपयोगकर्ताओं के पास एक ही Exchange सर्वर पर कई ईमेल खाते होते हैं। दोनों मामलों में, उपयोगकर्ता Aspose.Email for Java के माध्यम से अन्य उपयोगकर्ता के मेलबॉक्स तक पहुँच सकते हैं। यह API अन्य मेलबॉक्स के फ़ोल्डर और ईमेल तक पहुँचने का तंत्र प्रदान करती है IEWSClient क्लास। यह कार्यक्षमता ओवरलोडेड getMailboxInfo() मेथड और उपयोगकर्ता ईमेल पता को पैरामीटर के रूप में प्रदान करके।

निम्नलिखित कोड स्निपेट दिखाता है कि आप कैसे ईमेल पढ़ें IEWSClient क्लास।

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get Exchange mailbox info of other email account
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo("otherUser@domain.com");

संदेशों की सूची बनाना

Exchange मेलबॉक्स में ईमेल संदेशों की सूची को कॉल करके प्राप्त किया जा सकता है IEWSClient.listMessages मेथड। संदेशों की बुनियादी जानकारी, जैसे विषय, प्रेषक, प्राप्तकर्ता और संदेश आईडी, प्राप्त करें, इसका उपयोग करके listMessages विधि।

सरल संदेश सूची

एक्सचेंज मेलबॉक्स में संदेशों की सूची बनाने के लिए:

  1. का एक इंस्टेंस बनाएं IEWSClient क्लास।
  2. listMessages मेथड को कॉल करें और एक संदेश संग्रह बनाएँ।
  3. संग्रह के माध्यम से लूप करें और संदेश की जानकारी प्रदर्शित करें।

निम्नलिखित जावा कोड स्निपेट दर्शाता है कि आप EWS के साथ एक्सचेंज सर्वर से कनेक्ट होकर इनबॉक्स फ़ोल्डर से संदेशों की सूची कैसे बनाते हैं।

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "UserName", "Password");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    System.out.println("Subject: " + msgInfo.getSubject());
    System.out.println("From: " + msgInfo.getFrom().toString());
    System.out.println("To: " + msgInfo.getTo().toString());
    System.out.println("Message ID: " + msgInfo.getMessageId());
    System.out.println("Unique URI: " + msgInfo.getUniqueUri());
}

विभिन्न फ़ोल्डरों से संदेशों की सूची

ऊपर दिया गया कोड स्निपेट, इनबॉक्स फ़ोल्डर में सभी संदेशों की सूची बनाता है। अन्य फ़ोल्डरों से भी संदेशों की सूची बनाना संभव है। यह IEWSClient.listMessages() मेथड फ़ोल्डर URI को पैरामीटर के रूप में लेता है। जब तक फ़ोल्डर URI वैध है, आप उस फ़ोल्डर से संदेशों की सूची प्राप्त कर सकते हैं। विभिन्न फ़ोल्डरों के URI प्राप्त करने के लिए IEWSClient.getMailboxInfo().getXXXFolderUri प्रॉपर्टी का उपयोग करें। बाकी कोड संदेशों की सूची प्राप्त करने के समान है। निम्नलिखित कोड स्निपेट दिखाता है कि आप EWS का उपयोग करके विभिन्न फ़ोल्डरों से संदेशों की सूची कैसे बनाते हैं।

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get folder URI
String strFolderURI = "";
strFolderURI = client.getMailboxInfo().getInboxUri();
strFolderURI = client.getMailboxInfo().getDeletedItemsUri();
strFolderURI = client.getMailboxInfo().getDraftsUri();
strFolderURI = client.getMailboxInfo().getSentItemsUri();

// Get list of messages from the specified folder
ExchangeMessageInfoCollection msgCollection = client.listMessages(strFolderURI);

पेजिंग समर्थन के साथ संदेशों की सूची

निम्नलिखित जावा कोड स्निपेट दिखाता है कि आप पेजिंग समर्थन के साथ संदेशों की सूची कैसे प्राप्त करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
final IEWSClient client = EWSClient.getEWSClient("exchange.domain.com", "username", "password");
try {
    try {
        // Create some test messages to be added to server for retrieval later
        int messagesNum = 12;
        int itemsPerPage = 5;
        MailMessage message = null;
        for (int i = 0; i < messagesNum; i++) {
            message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35157_1 - " + UUID.randomUUID().toString(),
                    "EMAILNET-35157 Move paging parameters to separate class");
            client.appendMessage(client.getMailboxInfo().getInboxUri(), message);
        }
        // Verfiy that the messages have been added to the server
        ExchangeMessageInfoCollection totalMessageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
        System.out.println(totalMessageInfoCol.size());

        ////////////////// RETREIVING THE MESSAGES USING PAGING SUPPORT ////////////////////////////////////

        List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
        ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage);
        // Total Pages Count
        System.out.println(pageInfo.getTotalCount());

        pages.add(pageInfo);
        while (!pageInfo.getLastPage()) {
            pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage, pageInfo.getPageOffset() + 1);
            pages.add(pageInfo);
        }
        int retrievedItems = 0;
        // foreach to while statements conversion
        for (ExchangeMessagePageInfo pageCol : pages) {
            retrievedItems += pageCol.getItems().size();
        }
        // Verify total message count using paging
        System.out.println(retrievedItems);
    } finally {
    }
} finally {
    client.dispose();
}

ExchangeMessageInfo से संदेश प्रकार की जानकारी प्राप्त करना

IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);

ExchangeMessageInfoCollection list = client.listMessages(client.getMailboxInfo().getDeletedItemsUri());
System.out.println(list.get_Item(0).getMessageInfoType()); // MessageInfoType

संदेश सहेजना

यह लेख दिखाता है कि कैसे Exchange सर्वर मेलबॉक्स से संदेश प्राप्त करें और उन्हें डिस्क पर EML और MSG फ़ॉर्मैट में सहेजें:

  • डिस्क पर EML के रूप में सहेजें।
  • मेमोरी स्ट्रीम में सहेजें।
  • MSG के रूप में सहेजें।

EML में संदेश सहेजना

संदेश प्राप्त करने और EML फ़ॉर्मेट में सहेजने के लिए:

  1. IEWSClient क्लास का एक इंस्टेंस बनाएँ।
  2. mailboxUri, उपयोगकर्ता नाम, पासवर्ड और डोमेन प्रदान करें।
  3. IEWSClient.listMessages() मेथड को कॉल करें ताकि ExchangeMessagesInfoCollection का एक इंस्टेंस प्राप्त हो सके।
  4. ExchangeMessagesInfoCollection संग्रह के माध्यम से लूप करें ताकि प्रत्येक संदेश के लिए विशिष्ट URI प्राप्त हो सके।
  5. IEWSClient.saveMessage() मेथड को कॉल करें और विशिष्ट URI को पैरामीटर के रूप में पास करें।
  6. saveMessage() मेथड को वह पथ प्रदान करें जहाँ आप फ़ाइल सहेजना चाहते हैं।

निम्नलिखित कोड स्निपेट दिखाता है कि आप EWS का उपयोग करके Exchange सर्वर से कनेक्ट हों और संदेशों को EML फ़ाइलों के रूप में सहेजें।

// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now save the message in disk
    client.saveMessage(strMessageURI, dataDir + msgInfo.getMessageId() + "out.eml");
}

संदेशों को मेमोरी स्ट्रीम में सहेजना

EML फ़ाइलों को डिस्क पर सहेजने के बजाय, उन्हें मेमोरी स्ट्रीम में सहेजा जा सकता है। यह तब उपयोगी होता है जब आप स्ट्रीम को डेटाबेस जैसे स्टोरेज स्थान पर सहेजना चाहते हैं। एक बार स्ट्रीम डेटाबेस में सहेज ली जाए, आप EML फ़ाइल को फिर से लोड कर सकते हैं MailMessage क्लास। निम्नलिखित कोड स्निपेट दिखाता है कि आप कैसे EWS का उपयोग करके Exchange सर्वर मेलबॉक्स से संदेशों को मेमोरी स्ट्रीम में सहेजें।

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now save the message in memory stream
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    client.saveMessage(strMessageURI, stream);
}

संदेशों को MSG प्रारूप में सहेजना

यह IEWSClient.saveMessage() मेथड सीधे संदेश को EML प्रारूप में सहेज सकता है। संदेशों को MSG प्रारूप में सहेजने के लिए, पहले IEWSClient.fetchMessage() वह मेथड जो एक इंस्टेंस लौटाता है MailMessage class। फिर कॉल करें MailMessage.save() मेथड संदेश को MSG में सहेजता है। निम्नलिखित कोड स्निपेट दिखाता है कि आप कैसे Exchange सर्वर मेलबॉक्स से संदेश प्राप्त करें और उन्हें EWS का उपयोग कर MSG प्रारूप में सहेजें।

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

int count = 0;
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now get the message details using FetchMessage() and Save message as Msg
    MailMessage message = client.fetchMessage(strMessageURI);
    message.save(dataDir + (count++) + "_out.msg", SaveOptions.getDefaultMsgUnicode());
}

संदेश URI से ExchangeMessageInfo प्राप्त करना

एक ईमेल संदेश को उसके विशिष्ट पहचानकर्ता, URI द्वारा दर्शाया जाता है और यह ExchangeMessageInfo ऑब्जेक्ट। यदि केवल संदेश URI उपलब्ध हो, तो ExchangeMessageInfo ऑब्जेक्ट को भी इस उपलब्ध जानकारी का उपयोग करके प्राप्त किया जा सकता है। ओवरलोड संस्करण listMessages Ids की एक सूची लेता है जिसे उपयोग किया जाता है ExchangeMessageInfoCollection. निम्नलिखित कोड स्निपेट दिखाता है कि आप कैसे प्राप्त करें ExchangeMessageInfo संदेश URI से।

IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "user@domain.com", "pwd", "domain");

List<String> ids = new ArrayList<String>();
List<MailMessage> messages = new ArrayList<MailMessage>();

for (int i = 0; i < 5; i++) {
    MailMessage message = new MailMessage("user@domain.com", "receiver@domain.com", "EMAILNET-35033 - " + UUID.randomUUID().toString(),
            "EMAILNET-35033 Messages saved from Sent Items folder doesn't contain 'To' field");
    messages.add(message);
    String uri = client.appendMessage(message);
    ids.add(uri);
}

ExchangeMessageInfoCollection messageInfoCol = client.listMessages(ids);

for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) messageInfoCol) {
    // Do something ...
    System.out.println(messageInfo.getUniqueUri());
}

Exchange सर्वर मेलबॉक्स से संदेश प्राप्त करें

एक्सचेंज सर्वर पर संदेश सूचीबद्ध करने में उपयोग किया गया listMessages() method एक्सचेंज सर्वर मेलबॉक्स से संदेशों की सूची प्राप्त करने के लिए। यह listMessages() मेथड संदेशों के बारे में बुनियादी जानकारी प्राप्त करता है, जैसे विषय, संदेश ID, प्रेषक और प्राप्तकर्ता। पूर्ण संदेश विवरण प्राप्त करने के लिए, Aspose.Email.Exchange IEWSClient.fetchMessage() मेथड प्रदान करता है। यह मेथड संदेश URI को पैरामीटर के रूप में लेता है और एक इंस्टेंस लौटाता है MailMessage class। यह MailMessage क्लास फिर बॉडी, हेडर्स और अटैचमेंट्स जैसी संदेश विवरण प्रदान करता है। अधिक जानकारी के लिए देखें MailMessage API, या जानें कि ईमेल कैसे प्रबंधित करें MailMessage क्लास। Exchange सर्वर मेलबॉक्स से संदेश प्राप्त करने के लिए:

  1. IEWSClient प्रकार का एक इंस्टेंस बनाएँ।
  2. सर्वर नाम, उपयोगकर्ता नाम, पासवर्ड और डोमेन निर्दिष्ट करें।
  3. listMessages को कॉल करें ताकि ExchangeMessageInfoCollection प्राप्त हो सके।
  4. ExchangeMessageInfoCollection संग्रह के माध्यम से लूप करें ताकि ExchangeMessageInfo.UniqueURI मान प्राप्त हो सकें।
  5. IEWSClient.fetchMessage() को कॉल करें और ExchangeMessageInfo.UniqueURI को पैरामीटर के रूप में पास करें।

निम्नलिखित कोड स्निपेट दिखाता है कि आप Exchange सर्वर मेलबॉक्स से कनेक्ट होते हैं और EWS का उपयोग करके सभी संदेश प्राप्त करते हैं।

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now get the message details using FetchMessage()
    MailMessage msg = client.fetchMessage(strMessageURI);

    for (Attachment att : (Iterable<Attachment>) msg.getAttachments()) {
        System.out.println("Attachment Name: " + att.getName());
    }
}

FetchItem मेथड का उपयोग करके संदेश प्राप्त करना

यह FetchItem यदि आप किसी चीज़ को प्राप्त करना चाहते हैं तो यह मेथड अधिक पसंद किया जाता है। MapiMessage और MAPI प्रॉपर्टीज़ के साथ ऑपरेट करें। आप इस मेथड का उपयोग करके किसी भी Outlook आइटम, जैसे संपर्क, अपॉइंटमेंट, टास्क आदि को प्राप्त भी कर सकते हैं।

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : msgCollection)
{
    // Now get the message using FetchItem()
    MapiMessage msg = client.fetchItem(msgInfo.getUniqueUri());

    // If necessary, you can cast the MapiMessage to the proper item type to simplify working with its properties.
    MapiContact contact = (MapiContact) msg.toMapiMessageItem();
}

संदेश आकार को पूर्व-प्राप्त करना

Microsoft Outlook InterOp सर्वर से पूर्ण संदेश प्राप्त करने से पहले संदेश आकार प्राप्त करने की सुविधा प्रदान करता है। Aspose.Email API के मामले में, एक्सचेंज सर्वर से प्राप्त सारांश जानकारी द्वारा प्रतिनिधित्व किया जाता है। ExchangeMessageInfo क्लास। यह Size प्रॉपर्टी का उपयोग करके संदेश आकार प्राप्त करने की वही सुविधा प्रदान करता है। संदेश आकार प्राप्त करने हेतु, IEWSClient के listMessages को मानक कॉल किया जाता है जो का संग्रह प्राप्त करता है। ExchangeMessageInfo. निम्नलिखित कोड स्निपेट दिखाता है कि संदेश आकार को कैसे प्रदर्शित किया जाए, उपयोग करके ExchangeMessageInfo क्लास।

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    System.out.println("Subject: " + msgInfo.getSubject());
    System.out.println("From: " + msgInfo.getFrom().toString());
    System.out.println("To: " + msgInfo.getTo().toString());
    System.out.println("Message Size: " + msgInfo.getSize());
    System.out.println("==================================");
}

संदेशों को पुनरावर्ती रूप से डाउनलोड करना

यह EWSClient’s listSubFolders() यह मेथड एक्सचेंज सर्वर के मेलबॉक्स के फ़ोल्डर और उपफ़ोल्डर से संदेशों को पुनरावर्ती रूप से प्राप्त करने के लिए उपयोग किया जा सकता है। यह एक्सचेंज सर्वर 2007 या उससे उच्च संस्करण की आवश्यकता रखता है, क्योंकि यह EWS का उपयोग करता है। निम्नलिखित कोड स्निपेट दर्शाता है कि एक्सचेंज सर्वर का पूरा मेलबॉक्स (फ़ोल्डर और उपफ़ोल्डर) कैसे डाउनलोड किया जाए। फ़ोल्डर संरचना स्थानीय रूप से बनाई जाती है और सभी संदेश डाउनलोड होते हैं।

public static void run() {
    try {
        downloadAllMessages();
    } catch (java.lang.RuntimeException ex) {
        System.out.println(ex.getMessage());
    }
}

private static void downloadAllMessages() {
    try {
        String rootFolder = domain + "-" + username;
        new File(rootFolder).mkdirs();
        String inboxFolder = rootFolder + "\\Inbox";
        new File(inboxFolder).mkdirs();

        System.out.println("Downloading all messages from Inbox....");
        // Create instance of IEWSClient class by giving credentials
        IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", username, password, domain);

        ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
        System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
        String rootUri = client.getMailboxInfo().getRootUri();
        // List all the folders from Exchange server
        ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(rootUri);
        for (ExchangeFolderInfo folderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
            // Call the recursive method to read messages and get sub-folders
            listMessagesInFolder(client, folderInfo, rootFolder);
        }

        System.out.println("All messages downloaded.");
    } catch (java.lang.RuntimeException ex) {
        System.out.println(ex.getMessage());
    }
}

// Recursive method to get messages from folders and sub-folders
private static void listMessagesInFolder(IEWSClient client, ExchangeFolderInfo folderInfo, String rootFolder) {
    // Create the folder in disk (same name as on IMAP server)
    String currentFolder = rootFolder + "\\" + folderInfo.getDisplayName();
    new File(currentFolder).mkdirs();

    // List messages
    ExchangeMessageInfoCollection msgInfoColl = client.listMessages(folderInfo.getUri());
    System.out.println("Listing messages....");
    int i = 0;
    for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
        // Get subject and other properties of the message
        System.out.println("Subject: " + msgInfo.getSubject());

        // Get rid of characters like ? and :, which should not be included in a file name
        String fileName = msgInfo.getSubject().replace("?", " ").replace(":", " ");

        MailMessage msg = client.fetchMessage(msgInfo.getUniqueUri());
        msg.save(dataDir + "\\" + fileName + "-" + i + ".msg");

        i++;
    }
    System.out.println("============================\n");
    try {
        // If this folder has sub-folders, call this method recursively to get messages
        ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(folderInfo.getUri());
        for (ExchangeFolderInfo subfolderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
            listMessagesInFolder(client, subfolderInfo, currentFolder);
        }
    } catch (java.lang.RuntimeException e) {
    }
}

सार्वजनिक फ़ोल्डरों से संदेश डाउनलोड करना

Microsoft Exchange Server उपयोगकर्ताओं को सार्वजनिक फ़ोल्डर बनाने और उनमें संदेश पोस्ट करने देता है। इसे अपने एप्लिकेशन के माध्यम से करने के लिए, Aspose.Email का उपयोग करें EWSClient एक्सचेंज सर्वर से कनेक्ट करने और सार्वजनिक फ़ोल्डरों से संदेशों एवं पोस्ट को पढ़ने व डाउनलोड करने के लिए क्लास। निम्नलिखित कोड स्निपेट दिखाता है कि सभी सार्वजनिक फ़ोल्डर और उपफ़ोल्डर को कैसे पढ़ा जाए, और इन फ़ोल्डरों में पाए गए किसी भी संदेश को सूचीबद्ध और डाउनलोड किया जाए। यह उदाहरण केवल Microsoft Exchange Server 2007 या उसके बाद के संस्करणों में काम करता है क्योंकि केवल वही EWS का समर्थन करते हैं।

public static void run() {
    try {
        readPublicFolders();
    } catch (java.lang.RuntimeException ex) {
        System.out.println(ex.getMessage());
    }
}

private static void readPublicFolders() {
    NetworkCredential credential = new NetworkCredential(username, password, domain);
    IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);

    ExchangeFolderInfoCollection folders = client.listPublicFolders();
    for (ExchangeFolderInfo publicFolder : (Iterable<ExchangeFolderInfo>) folders) {
        System.out.println("Name: " + publicFolder.getDisplayName());
        System.out.println("Subfolders count: " + publicFolder.getChildFolderCount());
        listMessagesFromSubFolder(publicFolder, client);

    }
}

private static void listMessagesFromSubFolder(ExchangeFolderInfo publicFolder, IEWSClient client) {
    System.out.println("Folder Name: " + publicFolder.getDisplayName());
    ExchangeMessageInfoCollection msgInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
    for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) msgInfoCollection) {
        MailMessage msg = client.fetchMessage(messageInfo.getUniqueUri());
        System.out.println(msg.getSubject());
        msg.save(dataDir + msg.getSubject() + ".msg", SaveOptions.getDefaultMsgUnicode());
    }

    // Call this method recursively for any subfolders
    if (publicFolder.getChildFolderCount() > 0) {
        ExchangeFolderInfoCollection subfolders = client.listSubFolders(publicFolder);
        for (ExchangeFolderInfo subfolder : (Iterable<ExchangeFolderInfo>) subfolders) {
            listMessagesFromSubFolder(subfolder, client);
        }
    }
}

संदेशों को ले जाना

आप ईमेल संदेशों को एक फ़ोल्डर से दूसरे में स्थानांतरित कर सकते हैं, इसके द्वारा IEWSClient क्लास स्थानांतरित करें मेथड। यह पैरामीटर लेता है:

  • जिस संदेश को स्थानांतरित करना है, उसका अद्वितीय URI।
  • गंतव्य फ़ोल्डर का अद्वितीय URI।

फ़ोल्डरों के बीच संदेशों को स्थानांतरित करना

निम्नलिखित कोड स्निपेट दिखाता है कि मेलबॉक्स में इनबॉक्स फ़ोल्डर से प्रोसेस्ड नामक फ़ोल्डर में संदेश को कैसे ले जाया जाए। इस उदाहरण में, एप्लिकेशन:

  1. Inbox फ़ोल्डर से संदेश पढ़ता है।
  2. कुछ मानदंडों के आधार पर कुछ संदेशों को प्रोसेस करता है (इस उदाहरण में, हम संदेश विषय में एक कीवर्ड खोजते हैं)।
  3. दिए गए शर्त को पूरा करने वाले संदेशों को प्रोसेस्ड फ़ोल्डर में ले जाता है।
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();

// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
    // Move message to "Processed" folder, after processing certain messages based on some criteria
    if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("process this message")) {
        client.moveItem(mailboxInfo.getDeletedItemsUri(), msgInfo.getUniqueUri()); // EWS
        System.out.println("Message moved...." + msgInfo.getSubject());
    } else {
        // Do something else
    }
}

संदेश हटाना

आप फ़ोल्डर से ईमेल संदेश को इसके उपयोग से हटा सकते हैं। IEWSClient क्लास deleteItem मेथड। यह संदेश के यूनिक URI को पैरामीटर के रूप में लेता है।

निम्नलिखित कोड स्निपेट दिखाता है कि आप इनबॉक्स फ़ोल्डर से संदेश कैसे हटाएँ। इस उदाहरण के लिए, कोड:

  1. Inbox फ़ोल्डर से संदेश पढ़ता है।
  2. किसी मानदंड के आधार पर संदेशों को प्रोसेस करें (इस उदाहरण में, हम संदेश विषय में एक कीवर्ड खोजते हैं)।
  3. संदेश को हटाता है।
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();

// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
    // Delete message based on some criteria
    if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("delete") == true) {
        client.deleteItem(msgInfo.getUniqueUri(), DeletionOptions.getDeletePermanently()); // EWS
        System.out.println("Message deleted...." + msgInfo.getSubject());
    } else {
        // Do something else
    }
}

संदेश कॉपी करना

Aspose.Email API आपको एक फ़ोल्डर से दूसरे फ़ोल्डर में संदेश कॉपी करने की अनुमति देती है, इस copyItem मेथड। इस मेथड का ओवरलोडेड संस्करण कॉपी किए गए संदेश का यूनिक URI लौटाता है जैसा कि इस लेख में दिखाया गया है।

संदेश को अन्य फ़ोल्डर में कॉपी करना

निम्नलिखित कोड स्निपेट दिखाता है कि आप संदेश को किसी अन्य फ़ोल्डर में कैसे कॉपी करें।

try {
    // Create instance of EWSClient class by giving credentials
    IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
    MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-34997 - " + UUID.randomUUID().toString(),
            "EMAILNET-34997 Exchange: Copy a message and get reference to the new Copy item");
    String messageUri = client.appendMessage(message);
    String newMessageUri = client.copyItem(messageUri, client.getMailboxInfo().getDeletedItemsUri());
} catch (java.lang.RuntimeException ex) {
    System.out.println(ex.getMessage());
}