Fitur Utilitas

Mengirim Pesan dengan Opsi Voting

Microsoft Outlook memungkinkan pengguna membuat jajak pendapat saat menyusun pesan baru. Hal ini dilakukan dengan menyertakan opsi voting seperti Ya, Tidak, Mungkin, dll. Kelas FollowUpOptions yang ditawarkan oleh Aspose.Email, menyediakan properti VotingButtons yang dapat digunakan untuk mengatur atau mengambil nilai opsi voting. Artikel ini memberikan contoh rinci membuat MapiMessage dengan opsi voting untuk membuat jajak pendapat dan kemudian mengirim pesan menggunakan klien Exchange Web Service (EWS).

Membuat dan Mengirim Pesan dengan Opsi Voting

Potongan kode berikut menunjukkan cara membuat pesan baru dan kemudian mengirimnya dengan opsi voting.

String address = "firstname.lastname@aspose.com";

IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
MailMessage message = createTestMessage(address);

// Set FollowUpOptions Buttons
FollowUpOptions options = new FollowUpOptions();
options.setVotingButtons("Yes;No;Maybe;Exactly!");

client.send(message, options);

Metode Contoh yang Digunakan dalam Contoh

Potongan kode berikut menunjukkan cara menggunakan metode yang dipakai dalam contoh di atas.

private static MailMessage createTestMessage(String address) {
    MailMessage eml = new MailMessage(address, address, "Flagged message",
            "Make it nice and short, but descriptive. The description may appear in search engines' search results pages...");

    return eml;
}

Membuat pesan RE dan FW dari file MSG

IEWSClient memungkinkan pengembang membuat pesan RE (Reply/Reply All) dan FW (Forward) dari pesan sumber. Pesan sumber diidentifikasi dengan memilih tertentu ExchangeMessageInfo dari ExchangeMessageInfoCollection diperoleh melalui IEWSClient.listMessages(). Argumen lain adalah yang sebenarnya MailMessage untuk dikirim sebagai pesan RE atau FW. Potongan kode berikut menunjukkan cara membuat akun contoh digunakan untuk mengirim pesan dan kemudian fitur Reply dan Forward ditunjukkan pada pesan contoh tersebut. Untuk melakukan tugas ini:

  1. Inisialisasi objek IEWSClient dengan memberikan kredensial yang valid.
  2. Kirim beberapa pesan contoh.
  3. Panggil fungsi IEWSClient.reply(), IEWSClient.replyAll() dan IEWSClient.forward() untuk mengirim pesan.
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);

try {
    MailMessage message = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
            "TestMailRefw Implement ability to create RE and FW messages from source MSG file");

    client.send(message);

    ExchangeMessageInfoCollection messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
    if (messageInfoCol.size() == 1)
        System.out.println("1 message in Inbox");
    else
        System.out.println("Error! No message in Inbox");

    MailMessage message1 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
            "TestMailRefw Implement ability to create RE and FW messages from source MSG file");

    client.send(message1);
    messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());

    if (messageInfoCol.size() == 2)
        System.out.println("2 messages in Inbox");
    else
        System.out.println("Error! No new message in Inbox");

    MailMessage message2 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
            "TestMailRefw Implement ability to create RE and FW messages from source MSG file");
    message2.getAttachments().addItem(Attachment.createAttachmentFromString("Test attachment 1", "Attachment Name 1"));
    message2.getAttachments().addItem(Attachment.createAttachmentFromString("Test attachment 2", "Attachment Name 2"));

    // Reply, Replay All and forward Message
    client.reply(message2, messageInfoCol.get_Item(0));
    client.replyAll(message2, messageInfoCol.get_Item(0));
    client.forward(message2, messageInfoCol.get_Item(0));
} catch (java.lang.RuntimeException ex) {
    System.out.println("Error in program" + ex.getMessage());
}

Dukungan OAuth untuk EWS dengan Office 365

Aspose.Email API menyediakan dukungan untuk Exchange Web Service (EWS) dengan Office 365. API’s EWSClient antarmuka menyediakan metode overload yang menyediakan OAuthNetworkCredential sebagai input untuk mengakses akun Exchange melalui OAuth. Pengguna perlu memberikan parameter Authority, Client Id, Client App Uri, dan Resource agar ini berfungsi. Potongan kode berikut menunjukkan Dukungan OAuth untuk EWS dengan Office 365.

// token provider
/*ITokenProvider provider = new ITokenProvider() {

    @Override
    public void dispose() {
    }

    @Override
    public OAuthToken getAccessToken(boolean ignoreExistingToken) {
        return null;
    }

    @Override
    public OAuthToken getAccessToken() {
        return null;
    }
};

NetworkCredential credentials = new OAuthNetworkCredential(provider);*/

// accessToken
NetworkCredential credentials = new OAuthNetworkCredential("accessToken");

IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", credentials);
client.listMessages();

Dukungan Logging pada Klien Exchange

Aspose.Email API menyediakan kemampuan untuk menyediakan fasilitas logging bagi klien Exchange Web Service.

Logging untuk Klien EWS

client.setLogFileName("logs/ews");
// OR
EWSClient.setCommonLogFileName("logs/ews");

Menambahkan Header dalam Permintaan EWS

Aspose.Email API memungkinkan penambahan header ke permintaan Exchange. Ini dapat digunakan untuk menambahkan header ke permintaan EWS untuk berbagai header yang dapat digunakan untuk tujuan yang berbeda. Salah satu contohnya adalah menambahkan header X-AnchorMailbox yang digunakan untuk mengelola masalah throttling pada server Exchange. Metode addHeader dari IEWSClient digunakan untuk menambahkan header ke permintaan EWS seperti yang ditunjukkan dalam potongan kode berikut.

final IEWSClient client = EWSClient.getEWSClient("exchange.domain.com/ews/Exchange.asmx", "username", "password", "");
try {
    client.addHeader("X-AnchorMailbox", "username@domain.com");
    ExchangeMessageInfoCollection messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
} finally {
    client.dispose();
}

Kembalikan ID Permintaan Klien dalam Header

The return-client-request-id header dikirim dalam permintaan dan digunakan oleh server untuk menentukan apakah the client-request-id header yang ditentukan oleh klien harus dikembalikan dalam respons server. Metode berikut digunakan dalam operasi ini:

try (IEWSClient client = createEWSClient())
{
    // Client will create random id and pass it to the server.
    // The server should include this id in request-id header of all responses.
    client.setReturnClientRequestId(true);
    
    client.setLogFileName("ews.log");
    client.getMailboxInfo();
}

Bekerja dengan Pesan Terpadu

Aspose.Email dapat mengambil informasi pesan terpadu dari Exchange Server 2010. Pesan terpadu seperti mendapatkan informasi konfigurasi, memulai panggilan keluar, mengambil informasi panggilan telepon berdasarkan ID panggilan, dan memutuskan panggilan telepon berdasarkan ID saat ini didukung. Contoh kode berikut menunjukkan cara mengambil informasi konfigurasi pesan terpadu dari Microsoft Exchange Server 2010.

IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.getUMConfiguration();

Mendapatkan Tip Email

Microsoft Exchange Server menambahkan beberapa fitur baru pada Exchange Server 2010 dan 2013. Salah satunya memungkinkan pengguna mendapatkan tip email saat menulis pesan email. Tip ini sangat berguna karena memberikan informasi sebelum email dikirim. Misalnya, jika alamat email salah dalam daftar penerima, tip akan ditampilkan untuk memberi tahu bahwa alamat email tidak valid. Tip email juga memungkinkan Anda melihat balasan out of office sebelum mengirim email: Exchange Server (2010 & 2013) mengirim tip email saat email sedang ditulis jika satu atau lebih penerima telah mengatur balasan out of office. Microsoft Exchange Server 2010 Service Pack 1 diperlukan untuk semua fitur yang ditunjukkan dalam artikel ini. Potongan kode berikut menunjukkan cara menggunakan the EWSClient kelas yang menggunakan Exchange Web Services, tersedia di Microsoft Exchange Server 2007 dan versi setelahnya.

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
System.out.println("Connected to Exchange server...");
// Provide mail tips options
MailAddressCollection addrColl = new MailAddressCollection();
addrColl.addMailAddress(new MailAddress("test.exchange@ex2010.local", true));
addrColl.addMailAddress(new MailAddress("invalid.recipient@ex2010.local", true));
GetMailTipsOptions options = new GetMailTipsOptions(MailAddress.to_MailAddress("administrator@ex2010.local"), addrColl, MailTipsType.All);

// Get Mail Tips
MailTips[] tips = client.getMailTips(options);

// Display information about each Mail Tip
for (MailTips tip : tips) {
    // Display Out of office message, if present
    if (tip.getOutOfOffice() != null) {
        System.out.println("Out of office: " + tip.getOutOfOffice().getReplyBody().getMessage());
    }

    // Display the invalid email address in recipient, if present
    if (tip.getInvalidRecipient() == true) {
        System.out.println("The recipient address is invalid: " + tip.getRecipientAddress());
    }
}

Impersonasi Exchange

Impersonasi Exchange memungkinkan seseorang untuk menyamar sebagai akun lain dan melakukan tugas serta operasi menggunakan izin akun yang disamar tersebut, bukan miliknya sendiri. Di mana delegasi memungkinkan pengguna bertindak atas nama pengguna lain, Impersonasi memungkinkan mereka bertindak sebagai pengguna lain. Aspose.Email mendukung Impersonasi Exchange. The EWSClient kelas menyediakan metode ImpersonateUser dan ResetImpersonation untuk memudahkan fitur ini.

Untuk melakukan tugas ini:

  1. Inisialisasi ExchangeWebServiceClient untuk pengguna 1.
  2. Inisialisasi ExchangeWebServiceClient untuk pengguna 2.
  3. Tambahkan pesan tes ke akun.
  4. Aktifkan Impersonasi.
  5. Reset Impersonasi.

Potongan kode berikut menunjukkan cara menggunakan EWSClient kelas untuk mengimplementasikan fitur Impersonasi.

// Create instance's of EWSClient class by giving credentials
IEWSClient client1 = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser1", "pwd", "domain");
IEWSClient client2 = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser2", "pwd", "domain");
{
    String folder = "Drafts";
    try {
        for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client1.listMessages(folder))
            client1.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
        String subj1 = "NETWORKNET_33354 User User1";
        client1.appendMessage(folder, new MailMessage("User1@exchange.conholdate.local", "To@aspsoe.com", subj1, ""));

        for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client2.listMessages(folder))
            client2.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
        String subj2 = "NETWORKNET_33354 User User2";
        client2.appendMessage(folder, new MailMessage("User2@exchange.conholdate.local", "To@aspose.com", subj2, ""));

        ExchangeMessageInfoCollection messInfoColl = client1.listMessages(folder);
        // Assert.AreEqual(1, messInfoColl.Count);
        // Assert.AreEqual(subj1, messInfoColl[0].Subject);

        client1.impersonateUser(ItemChoice.PrimarySmtpAddress, "User2@exchange.conholdate.local");
        ExchangeMessageInfoCollection messInfoColl1 = client1.listMessages(folder);
        // Assert.AreEqual(1, messInfoColl1.Count);
        // Assert.AreEqual(subj2, messInfoColl1[0].Subject);

        client1.resetImpersonation();
        ExchangeMessageInfoCollection messInfoColl2 = client1.listMessages(folder);
        // Assert.AreEqual(1, messInfoColl2.Count);
        // Assert.AreEqual(subj1, messInfoColl2[0].Subject);
    } finally {
        try {
            for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client1.listMessages(folder))
                client1.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
            for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client2.listMessages(folder))
                client2.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
        } catch (java.lang.RuntimeException e) {
        }
    }
}

Fitur Auto Discover menggunakan EWS

Aspose.Email API memungkinkan Anda menemukan pengaturan Exchange Server menggunakan EWS Client. 

AutodiscoverService svc = new AutodiscoverService();
svc.setCredentials(new NetworkCredential(email, password));

IGenericDictionary</* UserSettingName */Integer, Object> userSettings = svc.getUserSettings(email, UserSettingName.ExternalEwsUrl).getSettings();
String ewsUrl = (String) userSettings.get_Item(UserSettingName.ExternalEwsUrl);
System.out.println("Auto discovered EWS Url: " + ewsUrl);

Batalkan Pemulihan PST ke Operasi Exchange Server

Aspose.Email API memungkinkan Anda memulihkan file PST ke Exchange Server. Namun, jika operasi memakan waktu lama karena ukuran file PST yang besar, mungkin perlu menentukan kriteria untuk membatalkan operasi. Hal ini dapat dicapai menggunakan API seperti yang ditunjukkan pada contoh kode berikut.

final IEWSClient client = EWSClient.getEWSClient("https://exchange.office365.com/ews/exchange.asmx", "username", "password");
try {
    final long startTime = System.currentTimeMillis();
    final AtomicInteger processedItems = new AtomicInteger(0);
    final long S15 = 15 * 1000;

    BeforeItemCallback callback = new BeforeItemCallback() {
        public void invoke(ItemCallbackArgs item) {
            if (System.currentTimeMillis() - startTime > S15) {
                throw new AbortRestoreException();
            }

            processedItems.incrementAndGet();
        }
    };

    try {
        // create a test pst and add some test messages to it
        PersonalStorage pst = PersonalStorage.create(new ByteArrayOutputStream(), FileFormatVersion.Unicode);
        FolderInfo folder = pst.getRootFolder().addSubFolder("My test folder");
        for (int i = 0; i < 20; i++) {
            MapiMessage message = new MapiMessage("from@gmail.com", "to@gmail.com", "subj", "body");
            folder.addMessage(message);
        }
        RestoreSettings rs = new RestoreSettings();
        rs.setBeforeItemCallback(callback);

        // now restore the PST with callback
        client.restore(pst, rs);
        System.out.println("Success!");
    } catch (AbortRestoreException e) {
        System.out.println("Timeout! " + processedItems.get());
    }
} finally {
    client.dispose();
}