Пропуск темы сообщения Строка
Недостаточная информация в теле сообщения
Эта ошибка попадает в ту же категорию, что и предыдущая. Если сценарий собирается сообщать о проблемах или ошибках в почтовых сообщениях, значит сгенерировать какую-то информацию, которая должна там присутствовать. Они сводятся к каноническим вопросам журналистики:
Кто?
Какой сценарий сообщает об ошибке? Добавьте содержимое переменной $0 (если не устанавливали ее явно), чтобы показать полный путь к текущему сценарию. Сообщите о версии сценария, если таковая у него имеется.
Где?
Сообщите что-то о том месте в сценарии, где возникает проблема. Функция caller () из Perl возвращает всю нужную для этого информацию:
замечание: то, что возвращает са!1ег(). может зависеть отверсии Perl, так что обязательно загляните в документацию по perlfunc
(Spackage, $filename, $line, $subroutine, Shasargs,
$wantarray, Sevaltext, $is_require) = caller($frames);
Где $f rames - это количество нужных фреймов на стеке (если вызывались подпрограммы из подпрограмм). Чаще всего вы будете устанавливать $f rames в 1. Вот пример списка, возвращаемого функцией caller() в середине кода для сервера из последнего полного примера:
('main','repserver1,32,'main:iprintmail1,1,undef)
Подобная запись указывает, что сценарий, запущенный из файла repserver в строке 32, находился в пакете main. В этот момент выполнялся код из подпрограммы main: .printmail (у нее есть аргументы, кроме того, она не вызывается в списочном контексте).
Если вы не хотите вручную применять caller(), можете воспользоваться отчетом о проблемах, предоставляемым модулем Carp.
Когда?
Опишите состояние программы в момент возникновения ошибки. К примеру, какой была последняя строка прочтенных данных?
Почему?
Если сумете, ответьте на незаданный читателем вопрос: «Зачем беспокоить меня этим почтовым сообщением?» Ответ может быть очень простым, например: «данные об учетных записях не были полностью обработаны», «DNS-сервер сейчас недоступен» или «в серверной пожар». Это даст читающему представление о предмете разговора (и, возможно, побудит к изучению).
Что?
Ну и наконец, надо сказать о том, что же пошло не так раньше всего. Вот небольшой пример на Perl, который охватывает все эти пункты:
use ext::Wrap;
sub problemreport {
9 $shortcontext - описание проблемы в одной строке
# Susercontext - подробное описание проблемы Получение почты 315
Snextstep - лучшее предположение о том, что делать, чтобы исправить
проблему
my($shortcontext,Susercontext,Snextstep) = @_: my
($filename, $line, Ssubroutine) = (caller(1) )[1,2,3]:
push(@return,"Проблема с Sfilename $shortcortext\n '):
push(@return,"** Сообщение о проблеме с Sfilename ***\n\n"):
push(@return,fill("","","- Проблема: Susercontext") "\r\n")
push(@return,"- Место: строка Sline файла Sfilename в
$subroutine\n\n"); push(@return,"- Произошла: ".scalar localtime(time)."\n\n");
push(@return,"- Дальнейшие действия: $nextstep\n"):
\@return; }
sub fireperson {
Sreport = &problemreport("компьютер горит ", «EOR, «EON);
При составлении отчета загорелась задняя часть компьютера.
Случилось это сразу же после обработки пенсионного плана для ORA. EOR
Пожалуйста, потушите пожар, а потом продолжайте работу. EON
print @{$report}; } &fireperson;
Обращение к &problemreport выведет, начиная с темы сообщения, отчет о проблеме, согласующийся с Mail: : Mailer, как и в предыдущих примерах.
Теперь, разобравшись с отправкой почты, перейдем к другой стороне медали.