Documentation Index
Fetch the complete documentation index at: https://docs.paubox.com/llms.txt
Use this file to discover all available pages before exploring further.
Instantiation
my $service = Paubox_Email_SDK->new();
Credentials are read automatically from config.cfg (see Authentication). The constructor dies if API_KEY or API_USERNAME is missing.
Building a message
Messages are created with a single constructor call using named parameters:
my $msg = Paubox_Email_SDK::Message->new(
'from' => 'sender@yourdomain.com', # required
'to' => ['alice@example.com'], # required; arrayref
'subject' => 'Your results are ready', # required
'text_content' => 'Plain text body.', # at least one required
'html_content' => '<p>HTML body.</p>', # optional; auto base64-encoded
'replyTo' => 'support@yourdomain.com', # optional
'cc' => ['manager@example.com'], # optional; arrayref
'bcc' => ['audit@example.com'], # optional; arrayref
'allowNonTLS' => 0, # optional; default 0
'forceSecureNotification' => 'true', # optional; "true"/"false"
'attachments' => [$attachment], # optional; arrayref of hashrefs
);
Attachments
Each attachment is a hashref with three keys. Use MIME::Base64 to encode the file content:
use MIME::Base64;
use String::Util qw(trim);
my $attachment = {
fileName => 'report.pdf',
contentType => 'application/pdf',
content => trim(encode_base64(do { local $/; open my $fh, '<:raw', 'report.pdf' or die $!; <$fh> })),
};
my $msg = Paubox_Email_SDK::Message->new(
'from' => 'sender@yourdomain.com',
'to' => ['alice@example.com'],
'subject' => 'Report attached',
'text_content'=> 'See attachment.',
'attachments' => [$attachment],
);
String::Util::trim removes the trailing newline that encode_base64 appends.
Send a message
my $response = $service->sendMessage($msg);
The response is a raw JSON string. Decode it to access fields:
use JSON;
my $json = decode_json($response);
print "Tracking ID: " . $json->{sourceTrackingId} . "\n";
Check delivery status
my $disposition = $service->getEmailDisposition($sourceTrackingId);
my $json = decode_json($disposition);
for my $delivery (@{ $json->{data}{message}{message_deliveries} }) {
print $delivery->{recipient} . " -> " . $delivery->{status}{deliveryStatus} . "\n";
}
Common deliveryStatus values: delivered, opened, failed, pending.
Error handling
Both sendMessage and getEmailDisposition use TryCatch internally and die on API errors. Wrap calls in an eval block to catch failures:
eval {
my $response = $service->sendMessage($msg);
print "Sent: $response\n";
};
if ($@) {
print "Error: $@\n";
}