2

У меня есть задание cron, которое в случае неудачи выводит HTML. Если это успешно, это ничего не выводит, в этом случае я не получаю почту. Если он не работает и пишет HTML, cron отправляет мне письмо, но оно приходит в виде простого текста и его трудно прочитать.

Я придумал два частичных решения, но не понял, как заставить его работать действительно хорошо. Во-первых, моя работа должна печатать спецификаторы MIME в верхней части вывода, например так:

Mime-Version: 1.0
Content-Type: text/html
<html>...

Затем я запускаю это в cron:

my-job | sendmail my.name

Основная проблема в том, что я получаю почту, даже если текст отсутствует. Вторичная проблема заключается в том, что мне пришлось добавить строки MIME-типа в мой скрипт, что является своего рода неподходящим местом (не элегантно, но, возможно, терпимо).

Затем я попытался использовать mail или mailx , у которых есть опция -E чтобы пропустить отправку, если текст отсутствует:

my-job | mail -E my.name

Это делает в значительной степени то, что делает cron по умолчанию. Тем не менее, я не могу придумать, как установить MIME-тип с помощью mail/mailx! Некоторые ссылки в Интернете говорят, что это делается с помощью параметра -a , но в моей системе (Fedora 16)mail -a принимает имя файла вложения, а не строку заголовка, как Content-Type: text/html как это, очевидно, происходит в некоторых других системах. ,

Я не хочу делать временный файл, проверять его размер и т.д. Я думаю, что хочу один из них:

  • Способ сделать почту cron читабельной как HTML.
  • Чтобы sendmail пропускал пустые сообщения.
  • Чтобы установить MIME, введите mailx.
  • Какой-то другой подход, использующий другую программу, которая установлена по умолчанию в Fedora.

3 ответа3

2

Вместо того, чтобы указывать получателя в командной строке, вызовите sendmail с -t и ваш скрипт сгенерирует заголовок to: . (Вы могли бы также сделать заголовок subj: пока вы на нем.) Тогда, когда нет вывода, нет получателя и, следовательно, нет почты.

2

Самый простой способ - вызвать sendmail из вашего скрипта. Таким образом, вы можете контролировать, отправляется ли вам какое-либо письмо.

В качестве альтернативы, вы можете заставить ваш скрипт возвращать код успеха, если он потерпит неудачу, и запустить sendmail, только если скрипт выйдет "правильно":

$ my-job >/tmp/message && cat /tmp/message | sendmail 

&& указывает bash выполнить следующую команду только в случае успешного завершения первой команды (exit 0 в BASH или exit(0) в PERL). Сказав вашему сценарию выйти со статусом 0, если он потерпит неудачу, вы заставите команду sendmail выполняться только при неудаче.

0

Вы можете указать тип контента следующим образом:

mail -s "$(echo -e "Status Report: $HOSTNAME\nContent-Type: text/html")" "yourmail@"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .