Sample code for 30+ languages & platforms
Zig

Get a Report Part from a multipart/report Email

See more Email Object Examples

Demonstrates the Chilkat Email.GetReport method, which returns the body content of the Nth report within a multipart/report email. The NumReports property gives the count, and indexes are zero-based. This example loads a report email and prints each report part.

Background: A multipart/report message — used for bounces (DSNs) and read receipts (MDNs) — bundles machine-readable report parts alongside the human-readable explanation. GetReport returns the raw content of one such part so a program can parse it, for example to extract the failing recipient and status code from a bounce. Use GetDeliveryStatusInfo for direct field-level access to the delivery-status part.

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

    // Demonstrates the GetReport method, which returns the body content of the Nth report
    // within a multipart/report email.  The NumReports property gives the number of reports;
    // indexes are zero-based.

    const email = try chilkat.Email.init();
    defer email.deinit();

    email.loadEml("qa_data/eml/dsn_bounce.eml") catch {
        std.debug.print("{s}\n", .{try email.getLastErrorText(alloc)});
        return;
    };

    const n = email.getNumReports();
    std.debug.print("NumReports = {d}\n", .{n});

    var i: i32 = 0;
    i = 0;
    while (i < n) : (i += 1) {
        std.debug.print("---- Report {d} ----\n", .{i});
        std.debug.print("{s}\n", .{try email.getReport(alloc, i)});
    }

    // A report returned by GetReport is the body of a report part -- for a bounce (DSN),
    // that is the machine-readable message/delivery-status part.  It looks similar to:
    //
    //   Reporting-MTA: dns; mail.example.com
    //   Received-From-MTA: dns; sender.example.com
    //   Arrival-Date: Fri, 10 Jul 2026 20:15:30 +0000
    //
    //   Final-Recipient: rfc822; nonexistent@example.com
    //   Action: failed
    //   Status: 5.1.1
    //   Diagnostic-Code: smtp; 550 5.1.1 <nonexistent@example.com> User unknown

    // Note: The path "qa_data/..." is a relative local filesystem path,
    // relative to the current working directory of the running application.
}