Bug 37984

Summary: Binary attachment cannot be sent via C4::Letters::EnqueueLetter()
Product: Koha Reporter: Petr Svoboda <svoboda>
Component: NoticesAssignee: Bugs List <koha-bugs>
Status: NEW --- QA Contact: Testopia <testopia>
Severity: new feature    
Priority: P5 - low CC: black23
Version: 21.11   
Hardware: Macintosh   
OS: Mac OS   
Change sponsored?: --- Patch complexity: ---
Documentation contact: Documentation submission:
Text to go in the release notes:
Version(s) released in:
Circulation function:

Description Petr Svoboda 2024-09-23 11:00:44 UTC
I use koha testing docker in Mac OS.

This code does not send a valid e-mail binary attachment:

$pdf_binary_content = ...;
my @attachments = (
       {
           filename => 'attachment.pdf',
           type => 'application/pdf',
           content => $pdf_binary_content,
       }
   );
my $message_id = C4::Letters::EnqueueLetter({
       ...
       ...
       ...
       attachments => \@attachments,
   });

because in C4::Letters is in _add_attachments function attachment encoding:
...
Encode::encode( "UTF-8", $attachment->{content} )
...

I can't encode a binary file...



Possible solution (C4::Letters):

sub _add_attachments {
...
    foreach my $attachment ( @$attachments ) {
        $message->attach(

            # ##################################################################
            # Original code: Encode::encode( "UTF-8", $attachment->{content} ),
            # New code:
            defined $attachment->{binary} ? $attachment->{content} : Encode::encode( "UTF-8", $attachment->{content} ),
            # ##################################################################

            content_type => $attachment->{type} || 'application/octet-stream',
            name         => $attachment->{filename},
            disposition  => 'attachment',
        );
    }
...
}

my @attachments = (
        {
            ...
            binary => 1,
        }
    );
my $message_id = C4::Letters::EnqueueLetter({
       ...
       ...
       ...
       attachments => \@attachments,
   });