use File::MimeInfo::Magic;
use File::Slurp;
use List::UtilsBy qw(bundle_by);
+use List::Util qw(sum);
use SL::Common;
use SL::DB::EmailJournal;
use SL::DB::EmailJournalAttachment;
use SL::DB::Employee;
+use SL::Locale::String qw(t8);
use SL::Template;
use SL::Version;
letter => 'letter',
purchase_delivery_order => 'delivery_orders',
sales_delivery_order => 'delivery_orders',
+ dunning => 'dunning',
);
sub new {
next if !$self->{$item};
my @header_addresses;
+ my @addresses = Email::Address->parse($self->{$item});
+
+ # if either no address was parsed or
+ # there are more than 3 characters per parsed email extra, assume the the user has entered bunk
+ if (!@addresses) {
+ die t8('"#1" seems to be a faulty list of email addresses. No addresses could be extracted.',
+ $self->{$item},
+ );
+ } elsif ((length($self->{$item}) - sum map { length $_->original } @addresses) / @addresses > 3) {
+ die t8('"#1" seems to be a faulty list of email addresses. After extracing addresses (#2) too many characters are left.',
+ $self->{$item}, join ', ', map { $_->original } @addresses,
+ );
+ }
- foreach my $addr_obj (Email::Address->parse($self->{$item})) {
+ foreach my $addr_obj (@addresses) {
push @{ $self->{addresses}->{$item} }, $addr_obj->address;
next if $self->{driver}->keep_from_header($item);
'X-Mailer' => "kivitendo " . SL::Version->get_version,
);
$self->{mail_attachments} = [];
- $self->{content_by_name} = $::instance_conf->get_email_journal == 1 && $::instance_conf->get_doc_files;
my $error;
my $ok = eval {
If $self->{journalentry} and either $self->{record_id} or $::form->{id} (checked in
this order) exist a record link from record to email journal is created.
+ It is possible to provide an array reference with more than one id in
+ $self->{record_id} or $::form->{id}. In this case all records are linked to
+ the mail.
Will fail silently if record_link creation wasn't successful (same behaviour as
_store_in_journal).