Задание Cron выводит HTML; как отправить почту в формате HTML

Задание Cron выводит HTML; как отправить почту в формате HTML

У меня есть задание 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.

решение1

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

решение2

Самый простой способ — вызвать sendmail fom в вашем скрипте. Таким образом, вы можете контролировать, будет ли вам отправлена ​​почта.

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

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

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

решение3

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

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

Связанный контент