mail
é bastante burro e normalmente apenas envia a mensagem para um sendmail
binário. Infelizmente, existem várias implementações de mail
, de modo que você precisa inspecionar a documentação ou o código para ver que tipo de tratamento de erros (se houver) é feito para a versão exata em uso.
Além do serviço de email do qual sendmail
faz parte - MTA (Mail Transport Agents), que no RHEL5 provavelmente seria o Sendmail ou o Postfix - provavelmente também será necessário o DNS, pois o MTA precisará realizar uma pesquisa de DNS em fooexample.blah
para poder enviar para lá. Possivelmente, também, um corredor de fila do MTA, se houver uma falha temporária e o email for encerrado em um diretório de filas do MTA em algum lugar (o RHEL MTA incluirá tais executores de filas por padrão). Ah, e um sistema de arquivos, se /var
ou o que estiver cheio, o MTA provavelmente não conseguirá filas de e-mails adicionais e, portanto, provavelmente não aceitará a mensagem de mail
. (Especialmente se devido a algum outro erro o sistema de alerta enche /var
e então mais alertas são criados e então quando ele desativa você tem que chamar a companhia de pagers porque eles desabilitaram seu pager porque ele enviou um alerta bazillion e oh eu assim não perca esses dias.)
... e uma rede funcional, dependendo de quão amplo você deseja definir serviço ... e também há serviços anti-spam opcionais, mas comumente usados; o que acontece quando o Gmail ou o Exchange está rejeitando ou descartando seus alertas como spam?
Observe também a falta de verificação de erros no system
call; mail
(ou uma fork
ou exec
call) pode falhar e, em seguida, o que? Um pouco mais sensato pode ser registrar tais falhas em algum lugar:
use Sys::Syslog;
openlog("homegrown-monitoring-101", "ndelay", "user");
system("echo ... root") == 0
or syslog(LOG_ERR, "non-zero exit code from mail command");
E, idealmente, algo como sec.pl
verifique homegrown-monitoring-101
logs e informe sobre eles (por meio de um resumo agrupado, não o habitual spam cron de um email por mensagem de log ...).
mail
ou o MTA também pode deixar dead.letter
arquivos em algum lugar (supondo que ele possa gravar onde deseja gravar esses arquivos) que monitoramento em teoria poderia verificar, mas se houver um novo dead.letter
e seu alerta for via e-mail, você provavelmente precisa de algum outro protocolo para relatar esse erro.
Em sistemas centos 7, em vez disso, uso o pacote perl-Email-Sender
over mail
para enviar mensagens a locais:
#!/usr/bin/perl
use 5.16.0;
use warnings;
use Email::Sender::Simple qw(sendmail);
use Email::Simple;
use Email::Simple::Creator;
...
my $message = ...;
my $email = Email::Simple->create(
header => [
To => $username . '@example.edu',
From => '[email protected]',
Subject => "...",
],
body => $message,
);
sendmail($email);