Sample code for 30+ languages & platforms
Zig

Outlook -- List Mail Folders

See more Outlook Examples

Uses the Microsoft Graph API to list Outlook mail folders.

Note: This example requires Chilkat v9.5.0.67 or greater.

This example applies to: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    var success: bool = false;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    const http = try chilkat.Http.init();
    defer http.deinit();

    // Use your previously obtained access token here:
    // See the following examples for getting an access token:
    //    Get Microsoft Graph OAuth2 Access Token (Azure AD v2.0 Endpoint).
    //    Get Microsoft Graph OAuth2 Access Token (Azure AD Endpoint).
    //    Refresh Access Token (Azure AD v2.0 Endpoint).
    //    Refresh Access Token (Azure AD Endpoint).

    http.setAuthToken("MICROSOFT_GRAPH_ACCESS_TOKEN");

    const sb_response = try chilkat.StringBuilder.init();
    defer sb_response.deinit();

    // Sends:  GET /users/{id | userPrincipalName}/mailFolders
    // Note: It is also possible to use the literal string "me" for the current logged-on user.
    // For example: GET /me/mailFolders
    http.clearUrlVars();
    http.setUrlVar("userPrincipalName", "chilkatsoft@outlook.com") catch {};
    success = if (http.quickGetSb("https://graph.microsoft.com/v1.0/users/{$userPrincipalName}/mailFolders", sb_response)) true else |_| false;
    if ((!success) and (http.getLastStatus() == 0)) {
        std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
        return;
    }

    const json = try chilkat.JsonObject.init();
    defer json.deinit();
    json.loadSb(sb_response) catch {};
    json.setEmitCompact(false);

    std.debug.print("Status code = {d}\n", .{http.getLastStatus()});
    if (http.getLastStatus() != 200) {
        std.debug.print("{s}\n", .{try json.emit(alloc)});
        std.debug.print("Failed.\n", .{});
    }

    std.debug.print("{s}\n", .{try json.emit(alloc)});
    std.debug.print("----\n", .{});

    // In my test case, this is the result (see below)
    // Apparently, this lists folders without listing subfolders (aka child folders)
    // There's another REST API call to list child folders.

    // To iterate over the folders:
    var i: i32 = 0;
    const num_folders = json.sizeOfArray("value");
    while (i < num_folders) {
        json.setI(i);
        std.debug.print("{s}\n", .{try json.stringOf(alloc, "value[i].displayName")});
        i = i + 1;
    }

    // The output from the above loop:

    //     Archive
    //     Deleted Items
    //     Drafts
    //     Inbox
    //     Junk Email
    //     Outbox
    //     Sent Items

    // ------------------------------------------------------------------------------------
    // The raw JSON response:

    // {
    //   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('chilkatsoft%40outlook.com')/mailFolders",
    //   "value": [
    //     {
    //       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAG8XunwAAAA=",
    //       "displayName": "Archive",
    //       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEIAAAA",
    //       "childFolderCount": 0,
    //       "unreadItemCount": 0,
    //       "totalItemCount": 0
    //     },
    //     {
    //       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEKAAAA",
    //       "displayName": "Deleted Items",
    //       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEIAAAA",
    //       "childFolderCount": 0,
    //       "unreadItemCount": 0,
    //       "totalItemCount": 0
    //     },
    //     {
    //       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEPAAAA",
    //       "displayName": "Drafts",
    //       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEIAAAA",
    //       "childFolderCount": 0,
    //       "unreadItemCount": 0,
    //       "totalItemCount": 0
    //     },
    //     {
    //       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEMAAAA",
    //       "displayName": "Inbox",
    //       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEIAAAA",
    //       "childFolderCount": 2,
    //       "unreadItemCount": 0,
    //       "totalItemCount": 4
    //     },
    //     {
    //       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEiAAAA",
    //       "displayName": "Junk Email",
    //       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEIAAAA",
    //       "childFolderCount": 0,
    //       "unreadItemCount": 0,
    //       "totalItemCount": 0
    //     },
    //     {
    //       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgELAAAA",
    //       "displayName": "Outbox",
    //       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEIAAAA",
    //       "childFolderCount": 0,
    //       "unreadItemCount": 0,
    //       "totalItemCount": 0
    //     },
    //     {
    //       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEJAAAA",
    //       "displayName": "Sent Items",
    //       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEIAAAA",
    //       "childFolderCount": 0,
    //       "unreadItemCount": 0,
    //       "totalItemCount": 14
    //     }
    //   ]
    // }
    //

    // ------------------------------------------------------------------------------------------------------
    // This example applies to: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com
    //
    // The Microsoft Graph Outlook Mail API lets you read, create, and send messages and attachments,
    // view and respond to event messages, and manage folders that are secured by Azure Active Directory
    // in Office 365. It also provides the same functionality in Microsoft accounts specifically
    // in these domains: Hotmail.com, Live.com, MSN.com, Outlook.com, and Passport.com.
}