Как уже упоминалось ранее, MIME :: Lite и Email :: Send не рекомендуется -
Email :: Send уходит ... ну, на самом деле не уходит, но официальнос пометкой «вне фаворита». У него есть проблемы с дизайном API, которые затрудняют его полезное расширение, и вместо того, чтобы пытаться отрицать функции и медленно упрощать новый интерфейс, мы выпустили Email :: Sender, который исправляет эти и другие проблемы
Я создал скрипт, который использует Email :: MIME, Email :: Sender :: Simple, Email :: Sender :: Transport :: SMTP для отправки почты. Вы можете взглянуть на https://github.com/sudo-batman/perl-toolkit/tree/master/Mail и использовать его в соответствии с вашими требованиями. Важные строки из этого кода -
sub create_mail {
my ( $self, $file_attachments, $mail_subject, $mail_body ) = @_;
my @mail_attachments;
if (@$file_attachments) {
foreach my $attachment (@$file_attachments) {
my $single_attachment = Email::MIME->create(
attributes => {
filename => basename($attachment),
content_type => "application/json",
disposition => 'attachment',
encoding => 'base64',
name => basename($attachment)
},
body => io->file($attachment)->all
);
push( @mail_attachments, $single_attachment );
}
}
# Multipart message : It contains attachment as well as html body
my @parts = (
@mail_attachments,
Email::MIME->create(
attributes => {
content_type => 'text/html',
encoding => 'quoted-printable',
charset => 'US-ASCII'
},
body_str => $mail_body,
),
);
my $mail_to_users = join ', ', @{ $self->{config}->{mail_to} };
my $cc_mail_to_users = join ', ', @{ $self->{config}->{mail_cc_to} };
my $email = Email::MIME->create(
header => [
From => $self->{config}->{mail_from},
To => $mail_to_users,
Cc => $cc_mail_to_users,
Subject => $mail_subject,
],
parts => [@parts],
);
return $email;
}
sub send_mail {
my ( $self, $email ) = @_;
my $transport = Email::Sender::Transport::SMTP->new(
{
host => $self->{config}->{smtp_server}
}
);
eval { sendmail( $email, { transport => $transport } ); };
if ($@) {
return 0, $@;
}
else {
return 1;
}
}