|/usr/sbin/sendmail -t
truncará mensagens se .
for escrito como uma linha, entre outros problemas. Além disso, há uma clara falta de verificação de erros e outros problemas ( open
pode falhar, o bifurcação cat
é uma maneira mais cara e complicada, propensa a erros, de ler o conteúdo de um arquivo).
Com o perl moderno, pode-se usar o Email :: Stuffer , o que simplifica bastante a tarefa de construir adequadamente o MIME válido partes via Email :: MIME . Vamos instalar isso ...
$ cpanm Email::Stuffer
...
12 distributions installed
$
Eu tenho App :: cpanminus e local :: lib ; existem outras maneiras de organizar os módulos, se necessário, como pacotes de fornecedores, caixa ou assim por diante.
Agora, o código de envio será parecido com
#!/usr/bin/env perl
use strict;
use warnings;
use Email::Stuffer;
my $the_html = <<'END';
<html><body><h3><font color="red">test</font></h3><br/></body></html>
END
Email::Stuffer
->from('[email protected]')
->to('[email protected]')
->subject('test test')
->html_body($the_html)
->attach_file('/home/kris/test.txt')
->send;
Se o conteúdo /home/kris/test.txt
precisar ser misturado no meio do HTML e não anexado como um arquivo distinto, o código relacionado a HTML poderá ser semelhante a (sim, mais módulos ...)
use Email::Stuffer;
use File::Slurper 'read_text';
my $the_html = <<'HEAD';
<html><body><h3><font color="red">test</font></h3><br/>
HEAD
$the_html .= read_text('/home/kris/test.txt');
$the_html .= <<'TAIL';
</body></html>
TAIL
Email::Stuffer
->from('[email protected]')
->to('[email protected]')
->subject('test test')
->html_body($the_html)
->send;
embora existam módulos de modelo HTML que podem incluir arquivos entre outros recursos, se você quiser algo mais do que colar as strings juntas e esperar que o HTML funcione.