+sub _email_invoice {
+  my ($self, $data) = @_;
+
+  $data->{config}->load;
+
+  return unless $data->{config}->send_email;
+
+  my @recipients =
+    uniq
+    map  { lc       }
+    grep { $_       }
+    map  { trim($_) }
+    (split(m{,}, $data->{config}->email_recipient_address),
+     $data->{config}->email_recipient_contact   ? ($data->{config}->email_recipient_contact->cp_email) : (),
+     $data->{invoice}->{customer}->invoice_mail ? ($data->{invoice}->{customer}->invoice_mail) : ()
+    );
+
+  return unless @recipients;
+
+  my %create_params = (
+    template               => $self->find_template(name => 'invoice'),
+    variables              => Form->new(''),
+    return                 => 'file_name',
+    variable_content_types => {
+      longdescription => 'html',
+      partnotes       => 'html',
+      notes           => 'html',
+    },
+  );
+
+  $data->{invoice}->flatten_to_form($create_params{variables}, format_amounts => 1);
+  $create_params{variables}->prepare_for_printing;
+
+  my $pdf_file_name;
+
+  eval {
+    $pdf_file_name = $self->create_pdf(%create_params);
+
+    for (qw(email_subject email_body)) {
+      _replace_vars(
+        object           => $data->{config},
+        vars             => $data->{time_period_vars},
+        attribute        => $_,
+        attribute_format => 'text'
+      );
+    }
+
+    my $global_bcc = SL::DB::Default->get->global_bcc;
+
+    for my $recipient (@recipients) {
+      my $mail             = Mailer->new;
+      $mail->{record_id}   = $data->{invoice}->id,
+      $mail->{record_type} = 'invoice',
+      $mail->{from}        = $data->{config}->email_sender || $::lx_office_conf{periodic_invoices}->{email_from};
+      $mail->{to}          = $recipient;
+      $mail->{bcc}         = $global_bcc;
+      $mail->{subject}     = $data->{config}->email_subject;
+      $mail->{message}     = $data->{config}->email_body;
+      $mail->{attachments} = [{
+        path     => $pdf_file_name,
+        name     => sprintf('%s %s.pdf', $::locale->text('Invoice'), $data->{invoice}->invnumber),
+      }];
+
+      my $error        = $mail->send;
+
+      push @{ $self->{job_errors} }, $error if $error;
+    }
+
+    1;
+
+  } or do {
+    push @{ $self->{job_errors} }, $EVAL_ERROR;
+  };
+
+  unlink $pdf_file_name if $pdf_file_name;
+}
+