Sample code for 30+ languages & platforms
Zig

MedTunnel: Get Message Attachment

See more MedTunnel Examples

Get a specific attachment of a message. The MessageId and AttachmentId are obtained from the "Get Mailbox Messages" example.

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 assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

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

    // Implements the following CURL command:

    // curl -X GET -k
    //         -H "Authorization:PutAuthorizationTokenHere"
    //         https://server.medtunnel.com/medtunnelmsg/api/Message/GetAttachment?messageid=989448&attachmentid=424857&setreadflag=false

    // Use the following online tool to generate HTTP code from a CURL command
    // Convert a cURL Command to HTTP Source Code

    http.setRequestHeader("Authorization", "PutAuthorizationTokenHere");

    // The messageId and attachmentId are contained in the response from reading the mailbox messages.
    http.setUrlVar("messageId", "989448") catch {};
    http.setUrlVar("attachmentId", "424857") catch {};
    http.setUrlVar("setReadFlag", "false") catch {};

    // Download the attachment data into bd.
    const bd = try chilkat.BinData.init();
    defer bd.deinit();
    success = if (http.quickGetBd("https://server.medtunnel.com/MedTunnelMsg/api/Message/GetAttachment?messageid={$messageId}&attachmentid={$attachmentId}&setreadflag={$setReadFlag}", bd)) true else |_| false;
    if (!success) {
        std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
        return;
    }

    const resp_status_code = http.getLastStatus();
    std.debug.print("Response Status Code = {d}\n", .{resp_status_code});
    if (resp_status_code >= 400) {
        std.debug.print("Response Header:\n", .{});
        std.debug.print("{s}\n", .{try http.getLastHeader(alloc)});
        // For errors, the response body contains an error message instead of the actual attachment data.
        std.debug.print("Response Body:\n", .{});
        std.debug.print("{s}\n", .{try bd.getString(alloc, "utf-8")});
        std.debug.print("Failed.\n", .{});
        return;
    }

    // Save the attachment data.
    // The attachment filename is also contained in the response from reading the mailbox messages.
    success = if (bd.writeFile("qa_output/starfish.jpg")) true else |_| false;
    if (!success) {
        std.debug.print("Failed to save attachment file.\n", .{});
    } else {
        std.debug.print("Success.\n", .{});
    }
}