Exchange Posta Kutusu ve Mesajlarıyla Çalışma - Java'da Exchange Sunucusundan E-posta Okuma

EWS Kullanarak Posta Kutusu Bilgisi Alma

Bu EWSClient sınıf, bir Exchange Server’dan mailbox bilgilerini almak için aşağıdaki çağrıyı yaparak kullanılabilecek üyelere sahiptir. IEWSClient.getMailboxInfo() metodu. Belirtilen tipte bir örnek döndürür. ExchangeMailboxInfo. Mailbox bilgilerini aşağıdaki gibi özelliklerden al. MailboxUri, InboxUri ve DraftsUri. Bu makale, Exchange Web Services kullanarak posta kutusu bilgisine nasıl erişileceğini gösterir.

Exchange Web Services (EWS) kullanarak Exchange Server’a bağlanmak istiyorsanız, EWSClient sınıf. Bu sınıf, bir Exchange Server’a bağlanmak ve öğeleri yönetmek için EWS kullanır. Aşağıdaki Java kod parçacığı, exchange web services kullanarak posta kutusu bilgisi almayı gösterir.

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

E-posta Mesajları Gönderme

Bir Exchange Server kullanarak e-posta mesajları gönderebilirsiniz, araçlar Aspose.Email.Exchange. IEWSClient.Send() metodu bir MailMessage örneği parametre olarak alır ve e-postayı gönderir. Bu makale, Exchange Web Services kullanarak e-posta mesajı göndermeyi açıklar.

Aspose.Email, Exchange Web Services kullanarak Microsoft Exchange Server’a bağlanmak için IEWSClient sınıfını sağlar. Aşağıdaki kod parçacığı, EWS’yi kullanarak Microsoft Exchange Server üzerinden e-posta göndermeyi gösterir. Aşağıdaki Java kod parçacığı, EWS kullanarak e-posta mesajları göndermeyi gösterir.

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

Mesaj Sınıfını Alma

Bu getMessageClass() metodu ExchangeMessageInfo sınıf, mesaj için sınıfı temsil eden bir dize alır. Aşağıdaki kod örneği, mesaj sınıfını nasıl alacağınızı gösterir:

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

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

Diğer Kullanıcının Posta Kutusundan E-posta Okuma

Exchange Sunucularındaki bazı hesapların birden fazla posta kutusuna erişim hakkı vardır ve bazı kullanıcıların aynı Exchange Sunucusunda birden fazla e-posta hesabı vardır. Her iki durumda da, kullanıcılar Aspose.Email for Java kullanarak diğer kullanıcıların posta kutularına erişebilir. Bu API, diğer posta kutularından klasör ve e-postalara erişim mekanizması sağlar IEWSClient sınıf. Bu işlevsellik, aşırı yüklenmiş getMailboxInfo() metodu ve kullanıcı e-posta adresini parametre olarak sağlamayı.

Aşağıdaki kod parçacığı, e-postaları okuma şeklinizi gösterir IEWSClient sınıf.

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

Mesaj Listeleme

Bir Exchange posta kutusundaki e-posta mesajlarının listesi, aşağıdaki çağrıyı yaparak alınabilir: IEWSClient.listMessages metodu. Mesajların temel bilgilerini, örneğin konu, gönderen, alıcı ve mesaj ID’sini, kullanarak alır. listMessages metod.

Basit Mesaj Listeleme

Bir Exchange posta kutusundaki mesajları listelemek için:

  1. Şunun bir örneğini oluştur IEWSClient sınıf.
  2. listMessages metodunu çağırın ve bir mesaj koleksiyonu oluşturun.
  3. Koleksiyon üzerinde döngü kurup mesaj bilgilerini göster.

Aşağıdaki Java kod parçacığı, EWS kullanarak bir exchange sunucusuna bağlanıp gelen kutusundaki mesajları listelemeyi gösterir.

// 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());
}

Farklı Klasörlerden Mesaj Listeleme

Yukarıdaki kod parçacıkları, Gelen Kutusu klasöründeki tüm mesajları listeleyin. Diğer klasörlerden de mesaj listesi almak mümkündür. IEWSClient.listMessages() metod, bir klasör URI’sini parametre olarak kabul eder. Klasör URI’si geçerli olduğu sürece, o klasörden mesaj listesini alabilirsiniz. Farklı klasörlerin URI’sini almak için IEWSClient.getMailboxInfo().getXXXFolderUri özelliğini kullanın. Kalan kod, mesaj listesini almakla aynı. Aşağıdaki kod parçacığı, EWS kullanarak farklı klasörlerden mesajları listelemeyi gösterir.

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

Sayfalama Desteğiyle Mesaj Listeleme

Aşağıdaki Java kod parçacığı, sayfalama desteğiyle mesaj listesi almayı gösterir.

// 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’dan Mesaj Türü Bilgisi Alma

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

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

Mesajları Kaydetme

Bu makale, Exchange Server posta kutusundan mesajları alıp diske EML ve MSG formatlarında nasıl kaydedeceğinizi gösterir:

  • DISK üzerinde EML olarak kaydet.
  • Bellek akışına kaydet.
  • MSG olarak kaydet.

Mesajları EML’ye Kaydetme

Mesajları alıp EML formatında kaydetmek için:

  1. IEWSClient sınıfının bir örneğini oluşturun.
  2. mailboxUri, kullanıcı adı, şifre ve domain’i sağlayın.
  3. IEWSClient.listMessages() metodunu çağırarak ExchangeMessagesInfoCollection koleksiyonunun bir örneğini alın.
  4. ExchangeMessagesInfoCollection koleksiyonunda döngü yaparak her mesaj için benzersiz URI’yi alın.
  5. IEWSClient.saveMessage() metodunu çağırın ve benzersiz URI’yi parametre olarak geçin.
  6. saveMessage() metoduna dosyayı kaydetmek istediğiniz yolu sağlayın.

Aşağıdaki kod parçacığı, EWS’yi kullanarak Exchange Server’a bağlanıp mesajları EML dosyaları olarak nasıl kaydedeceğinizi gösterir.

// 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");
}

Mesajları Bellek Akışına Kaydetme

EML dosyalarını diske kaydetmek yerine, bellek akışına kaydetmek mümkündür. Bu, akışı bir veritabanı gibi bir depolama konumuna kaydetmek istediğinizde kullanışlıdır. Akış bir veritabanına kaydedildikten sonra, EML dosyasını MailMessage sınıf. Aşağıdaki kod parçacığı, EWS kullanarak bir Exchange Server posta kutusundan mesajları bellek akışına nasıl kaydedeceğinizi gösterir.

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

Mesajları MSG Formatında Kaydetme

Bu IEWSClient.saveMessage() metod, mesajı doğrudan EML formatına kaydedebilir. Mesajları MSG formatına kaydetmek için önce IEWSClient.fetchMessage() örnek bir nesne döndüren metod MailMessage sınıf. Ardından çağırın MailMessage.save() MSG’ye kaydetmek için metod. Aşağıdaki kod parçacığı, Exchange Server posta kutusundan mesajları alıp EWS kullanarak MSG formatında nasıl kaydedeceğinizi gösterir.

// 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());
}

Mesaj URI’sinden ExchangeMessageInfo Alma

Bir e-posta mesajı, benzersiz kimliği, URI’siyle temsil edilir ve ExchangeMessageInfo nesne. Sadece mesaj URI’si mevcutsa, o zaman ExchangeMessageInfo nesne, bu mevcut bilgi kullanılarak da alınabilir. Aşırı yükleme sürümü listMessages kullanmak için bir Id listesi alır ExchangeMessageInfoCollection. Aşağıdaki kod parçacığı, nasıl alacağınızı gösterir ExchangeMessageInfo mesaj URI’sinden.

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 Server posta kutusundan mesajları getir

Exchange Server’da Mesajları Listeleme şunu kullandı: listMessages() yöntem, bir Exchange Server posta kutusundan mesaj listesi alır. listMessages() metod, örneğin konu, mesaj ID’si, gönderen ve alıcı gibi mesajların temel bilgilerini alır. Tam mesaj detaylarını elde etmek için, Aspose.Email.Exchange IEWSClient.fetchMessage() metodunu sağlar. Bu metod, mesaj URI’sini parametre olarak alır ve bir örnek döndürür MailMessage sınıf. MailMessage sınıf, ardından gövde, başlıklar ve ekler gibi mesaj detaylarını sağlar. Daha fazlasını öğrenin MailMessage API, veya e-postaları yönetmenin nasıl olduğunu öğrenin MailMessage sınıf. Exchange Server posta kutusundan mesajları çekmek için:

  1. IEWSClient tipinde bir örnek oluşturun.
  2. Sunucu adını, kullanıcı adını, şifreyi ve domaine belirtin.
  3. ExchangeMessageInfoCollection’ı almak için listMessages’ı çağırın.
  4. ExchangeMessageInfoCollection koleksiyonunda döngü yaparak ExchangeMessageInfo.UniqueURI değerlerini alın.
  5. IEWSClient.fetchMessage() yöntemini çağırın ve ExchangeMessageInfo.UniqueURI’yi parametre olarak geçirin.

Aşağıdaki kod parçacığı, Exchange Sunucusu posta kutusuna bağlanmanızı ve EWS kullanarak tüm mesajları almanızı gösterir.

// 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 yöntemiyle bir mesaj çekme

Bu FetchItem bir şeyi almak istiyorsanız metod daha çok tercih edilir MapiMessage ve MAPI özellikleriyle çalışır. Bu yöntemi ayrıca bir kişi, randevu, görev gibi herhangi bir Outlook öğesini almak için de kullanabilirsiniz.

// 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();
}

Mesaj Boyutunu Önceden Al

Microsoft Outlook InterOp, mesajı sunucudan tamamen almadan önce mesaj boyutunu almayı sağlar. Aspose.Email API durumunda, Exchange sunucusundan alınan özet bilgi TextFormat sayıcı tarafından tanımlanan bir tip olarak temsil edilir. ExchangeMessageInfo class. Mesaj boyutunu Size özelliğiyle almayı sağlayan aynı özelliği sunar. Mesaj boyutunu almak için, IEWSClient’ın listMessages metoduna yapılan standart çağrı, bir koleksiyon alır. ExchangeMessageInfo. Aşağıdaki kod parçacığı, mesaj boyutunu şu şekilde görüntülemeyi gösterir ExchangeMessageInfo sınıf.

// 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("==================================");
}

Mesajları Döngüsel İndirme

Bu EWSClient’s listSubFolders() metod, bir Exchange Server posta kutusundaki klasör ve alt klasörlerden mesajları döngüsel olarak almak için kullanılabilir. Bu, EWS kullandığı için Exchange Server 2007 veya daha yeni bir sürümünü gerektirir. Aşağıdaki kod parçacığı, bir Exchange Server’ın tüm posta kutusunu (klasörler ve alt klasörler) nasıl indireceğinizi gösterir. Klasör yapısı yerel olarak oluşturulur ve tüm mesajlar indirilir.

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) {
    }
}

Public Klasörlerden Mesaj İndirme

Microsoft Exchange Server, kullanıcılara ortak klasörler oluşturma ve içinde mesaj gönderme imkanı verir. Bunu uygulamanız üzerinden yapmak için Aspose.Email’in EWSClient public klasörlerden mesajları ve gönderileri okumak ve indirmek için Exchange Sunucusuna bağlanan sınıf. Aşağıdaki kod parçacığı, tüm public klasörleri ve alt klasörleri nasıl okuduğunuzu, bu klasörlerde bulunan mesajları nasıl listelediğinizi ve indirdiğinizi gösterir. Bu örnek yalnızca Microsoft Exchange Server 2007 ve üzeri sürümlerle çalışır, çünkü sadece bu sürümler EWS’yi destekler.

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

Mesaj Taşıma

Bir klasörden diğerine e-posta mesajlarını aşağıdakinin yardımıyla taşıyabilirsiniz: IEWSClient sınıf taşı metodu. Parametreleri alır:

  • Taşınacak mesajın benzersiz URI’si.
  • Hedef klasörün benzersiz URI’si.

Klasörler Arasında Mesaj Taşıma

Aşağıdaki kod parçacığı, bir posta kutusundaki mesajı Gelen Kutusu klasöründen İşlenmiş adlı klasöre nasıl taşıyacağınızı gösterir. Bu örnekte, uygulama:

  1. Gelen Kutusu klasöründen mesajları okur.
  2. Bazı mesajları belirli bir kritere göre işler (bu örnekte, mesaj konusundaki bir anahtar kelimeyi buluruz).
  3. Belirtilen koşulu sağlayan mesajları işlenen klasöre taşır.
// 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
    }
}

Mesajları Silme

Bir klasörden e-posta mesajlarını, aşağıdakinin yardımıyla silebilirsiniz IEWSClient sınıf deleteItem metod. Mesajın benzersiz URI’sını parametre olarak alır.

Aşağıdaki kod parçacığı, Gelen Kutusu klasöründen bir mesajı nasıl sileceğinizi gösterir. Bu örnek için kod:

  1. Gelen Kutusu klasöründen mesajları okur.
  2. Mesajları belirli bir kritere göre işleyin (bu örnekte, mesaj konusundaki bir anahtar kelimeyi buluyoruz).
  3. Mesajı siler.
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
    }
}

Mesajları Kopyalama

Aspose.Email API, bir klasörden başka bir klasöre mesaj kopyalamayı sağlar copyItem yöntem. Bu yöntemin aşırı yüklenmiş sürümü, bu makalede gösterildiği gibi kopyalanan mesajın benzersiz URI’sini döndürür.

Bir Mesajı Başka Klasöre Kopyalama

Aşağıdaki kod parçacığı, bir mesajı başka bir klasöre nasıl kopyalayacağınızı gösterir.

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