... единственный модуль, который я смог найти, это Net :: SMTP :: TLS
Основной модуль Net :: SMTP имеет поддержку как явного TLS (с помощью команды STARTTLS
, это то, что делает Net::SMTP::TLS
), так и неявного TLS (TLS с начала) уже несколько лет, и не должно быть необходимости использовать модуль, от которого отказались более 10много лет назад.Использование Net::SMTP
почти такое же:
use Net::SMTP;
my $smtp = Net::SMTP->new(mailhost, ... ;
$smtp->starttls(); # make sure to install IO::Socket::SSL
$smtp->auth(username, password); # make sure to install Authen::SASL
$smtp->mail(...);
$smtp->to(...);
...
В любом случае, ваша главная проблема, похоже, состоит в том, чтобы создать письмо с вложениями, которые вы затем могли бы отправить через $smtp->data(mail)
(или с помощью data
,datasend
, dataend
).До сих пор вы пытались создать это письмо вручную и потерпели неудачу, так как не представляете, как это на самом деле должно быть сделано.
Если вы действительно настаиваете на том, чтобы сделать это вручную, я рекомендую вам изучить соответствующие стандарты, в частности, RFC 2045 и RFC 2046 , которые описывают кодировкудвоичное вложение и как поместить это зашифрованное вложение в качестве вложения в структурированном письме.
Но, учитывая, что стандарт далеко не прост и что легко создать противоречащие стандарту письма, которые работают с протестированными почтовыми клиентамино не работать позже с другими почтовыми клиентами, было бы намного лучше использовать библиотеку, вместо того, чтобы создавать свое собственное и, вероятно, неправильное представление о почте MIME.Обсуждение 2001 года, на которое вы ссылаетесь, даже указывает на то, что использование чего-то вроде MIME :: Lite было бы лучшей идеей, чем попытка MIME-кодирования вручную.
Как создать письмо с вложениямис MIME :: Lite четко описано в документации , просто следуйте приведенному там примеру.Основное отличие этого примера в том, что вы хотите отправлять почту по-своему, чего можно достичь с помощью as_string
:
use MIME::Lite;
use Net::SMTP;
# create MIME::Lite object as documented
my $msg = MIME::Lite->new(...);
$msg->attach(...);
# create object, authenticate, set to,from.. in SMTP dialog
my $smtp = Net::SMTP->new(...);
$smtp->starttls(...);
$smtp->auth(...);
$smtp->mail(...);
$smtp->to(...);
# send created mail
$smtp->data($msg->as_string);
$smtp->quit;