Sample code for 30+ languages & platforms
Zig

Access a Part in a Multipart MIME Entity

See more MIME Examples

Demonstrates the Chilkat Mime.PartAt method, which provides live access to the direct child at a zero-based index. The first argument is the index and the second is a Mime object that will reference the child. Modifying it modifies the child stored in the parent tree.

Note: The file paths are relative to the application's current working directory. Absolute paths may also be used. Supply the paths appropriate to your own environment.

Background: This is how you reach into a multipart message to inspect or edit an individual part — read a part's Content-Type, extract an attachment's body, or change a part in place. The key point is that the returned Mime is a live reference, not a copy, so edits to it flow back into the parent tree. Loop from 0 to NumParts - 1 to visit every direct child.

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

    const mime = try chilkat.Mime.init();
    defer mime.deinit();
    mime.loadMimeFile("qa_data/multipart_message.eml") catch {
        std.debug.print("{s}\n", .{try mime.getLastErrorText(alloc)});
        return;
    };

    // PartAt provides LIVE access to a direct child part.  The 1st argument is the zero-based index
    // and the 2nd is a Mime object that will reference the child.  Modifying it modifies the child in
    // the parent tree.
    const n = mime.getNumParts();
    std.debug.print("Number of parts: {d}\n", .{n});

    const part = try chilkat.Mime.init();
    defer part.deinit();
    var i: i32 = 0;
    i = 0;
    while (i < n) : (i += 1) {
        mime.partAt(i, part) catch {
            std.debug.print("{s}\n", .{try mime.getLastErrorText(alloc)});
            return;
        };

        std.debug.print("Part {d} Content-Type: {s}\n", .{ i, try part.getContentType(alloc) });
    }
}