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);