Email :: Отправитель, как прикрепить файл в Perl? - PullRequest
1 голос
/ 23 января 2020

Система: Perl 5.26.1 в Ubuntu 18.04 LTS. Существует подпрограмма, которая отправляет электронную почту в файл с именем util2.pl. Подпрограмма называется mailadming () и имеет множество параметров, таких как информация о SMTP-сервере, адреса и от нее и т. Д. c. util2.pl входит в основную программу require d.

Я искал около 2 часов на различных сайтах и ​​в Google и читал руководство по электронной почте :: Отправитель, и я не могу найти, как прикрепить файл при использовании Email :: Sender. Я обновляю машину и использую Mail :: Sender, но Mail :: Sender устарела для Email :: Sender, а документы по Email :: Sender редки.

Я не смог найти никакой информации о вложенных файлах в Email :: Sender docs.

Поскольку Mail :: Sender больше не обновляется, было бы плохой идеей продолжать использовать это. Мы вложили много средств в Perl, поэтому мы просто не можем менять инструменты на данный момент.

  1. Может кто-нибудь помочь мне, пожалуйста?
  2. Должен ли я использовать другой модуль электронной почты для Perl? Электронная почта :: Отправитель, кажется, обновляется чаще и чаще.

РЕДАКТИРОВАТЬ: Это код, который я до сих пор:

my $email = Email::Stuffer->new(
        text_body=>$body,
        subject=>$subjparam,
        from=>$from, # or use ->from($email1, $email2...)
        transport=>Email::Sender::Transport::SMTP->new({
            host => $smtpserver,
            port => $smtpport,
            username => $smtpuser,
            password => $smtppw,
            }),
        );

Ошибка, которую я получаю прямо сейчас is: Can't use string ("text_body") as a HASH ref while "strict refs" in use at /usr/local/share/perl/5.26.1/Email/Stuffer.pm line 224.

Я не могу просто создать электронное письмо и отправить его за один раз, Мне нужно создать электронное письмо, поискать другие варианты, чтобы добавить его (например, CC адресов и если мне нужно прикрепить файл), et c. И код, который я получил от Perl Maven просто не работает.

1 Ответ

2 голосов
/ 23 января 2020

Процесс состоит из двух компонентов: создание электронного письма и его отправка. Email :: Sender обрабатывает только последнее и показывает, как использовать Email :: Simple для создания простых писем. Для создания более продвинутых электронных писем, таких как письма с вложениями, требуется более мощный Email :: MIME , а также имеется обертка из Email :: MIME и Email :: Sender, которая называется Email :: Stuffer , который предоставляет простые API для прикрепления файлов.

use strict;
use warnings;
use Email::Stuffer;
my $mail = Email::Stuffer->to($to)->from($from)->subject($subj)->text_body($text);

$mail->attach_file('/path/to/file.txt'); # guesses MIME type
# or if you have the file data in memory
$mail->attach($contents, name => 'foo.dat', filename => 'foo.dat',
           content_type => 'application/octet-stream');

# to change the transport
$mail->transport('SMTP', host => ...);
$mail->transport(Email::Sender::Transport::SMTP->new(...));

$mail->send_or_die;
...