Zig
Zig
Send Signed and Encrypted EDI Email (EDIFACT)
Demonstrates how to send a signed and encrypted EDI email (EDIFACT email).Chilkat Zig Downloads
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.
// The mailman object is used for sending and receiving email.
const mailman = try chilkat.MailMan.init();
defer mailman.deinit();
// Create a new email object
const email = try chilkat.Email.init();
defer email.deinit();
// Build the basic EDI email where the body is the EDIFACT message:
const edi_msg = "UNB+IATB:1+6XPPC ...";
const name = "something";
const filename = "something";
const charset = "iso-8859-1";
email.setEdifactBody(edi_msg, name, filename, charset);
email.setSubject("This is the subject");
email.setFrom("Chilkat Admin <admin@chilkatsoft.com>");
success = if (email.addTo("Chilkat Support", "support@chilkatsoft.com")) true else |_| false;
// Indicate that the email should be sent signed.
email.setSendSigned(true);
// Tell the mailman to use a PFX file as a source for locating
// the certificate and private key required for signing.
// The certificate chosen for signing will be the one that
// matches the sender's email address, which also has
// a private key. All intermediate certs in the chain of
// authentication, up to and including the root, will
// be included in the signature.
success = if (mailman.addPfxSourceFile("/pfx_files/myCertAndPrivateKey.pfx", "secret")) true else |_| false;
if (!success) {
std.debug.print("{s}\n", .{try mailman.getLastErrorText(alloc)});
return;
}
// Load the .cer file into a certificate object.
// When sending S/MIME encrypted email, it is the recipient's
// certificate that is used for encryption. Only the public key
// is needed to encrypt. The recipient is the only
// one possessing the private key, and therefore is the only
// one able to decrypt.
const cert = try chilkat.Cert.init();
defer cert.deinit();
success = if (cert.loadFromFile("/certs/recipientCert.cer")) true else |_| false;
if (!success) {
std.debug.print("{s}\n", .{try cert.getLastErrorText(alloc)});
return;
}
// Indicate that the email is to be sent encrypted.
email.setSendEncrypted(true);
// Indicate that we want 192-bit 3DES encryption:
email.setPkcs7CryptAlg("3des");
email.setPkcs7KeyLength(192);
// Specify the certificate to be used for encryption.
success = if (email.setEncryptCert(cert)) true else |_| false;
// Tell the mailman to use an opaque signature (as opposed to a detached signature)
mailman.setOpaqueSigning(true);
// SMTP server (use your settings and refer to the online
// reference documentation for more options)
mailman.setSmtpHost("smtp.mymailserver.com");
mailman.setSmtpUsername("myLogin");
mailman.setSmtpPassword("myPassword");
mailman.setSmtpPort(587);
mailman.setStartTLS(true);
// Send the signed/encrypted EDI email
success = if (mailman.sendEmail(email)) true else |_| false;
if (!success) {
std.debug.print("{s}\n", .{try mailman.getLastErrorText(alloc)});
} else {
std.debug.print("Mail Sent!\n", .{});
}
}