Задание 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.
24
задан John Zwinck
26.01.2023 10:15 Количество просмотров материала 3690
Распечатать страницу

3 ответа

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

2
отвечен Isaac Rabinovitch 2023-01-27 18:03

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

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

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

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

2
отвечен terdon 2023-01-27 20:20

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

mail -s "$(echo -e "Status Report: $HOSTNAME\nContent-Type: text/html")" "yourmail@"
0
отвечен bubby 2023-01-27 22:37

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх