28 марта 2024, 18:46

Цитата дня:

Невежество чаще рождает уверенность, нежели знание. Чарлз Дарвин


Отправка писем в формате html из CentOS

Автор ival, 22 февраля 2018, 10:50

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

Вниз

ival

Коллеги, добрый день.

В linux не силён, поэтому прошу помощи.

Поднял Zabbix на CentOS. Возникла потребность отправки оповещений в формате HTML, т.к. plain text читать просто не информативно. Попробовал реализовать это через mutt.
Скрипт который запускает Zabbix при срабатывании триггера выглядит так:

#! /bin/sh
#  $1 : Recipient
#  $2 : Subject
#  $3 : Message
to=$1
subject=$2
message=$3
echo $message | mutt -e "set content_type=text/html" "$to" -s "$subject"


Но оповещалка приходит в формате обычного текса. Что я делаю не так??

Уваров А.С.

Если нет секретной информации выложите результат:

echo $message

и

echo $message | mutt -e "set content_type=text/html"

ival

К сожалению я не могу это сделать т.к. не понимаю как. Стандартно перенаправить в файл через > файл не получается(( Что я делаю не так? Текст переменной message я могу отправить и не выводя в файл нам обычный html код. А вот результат вывода echo $message | mutt -e "set content_type=text/html" не знаю как сделать(( Из того что я смог сделать это посмотреть заголовки на почтовике и письмо на него приходит с заголовком:

Content-Type: text/plain; charset="UTF-8"

Content-Transfer-Encoding: base64

Следовательно mutt отправляет именно с ним и я немогу понять где надо описать чтобы mutt добавлял Content-Type: text/html; charset="UTF-8" В интернете куча вариаций c -a или просто через echo добавить, но не в одном нет объяснений почему так. Причем если смотреть man mutt, предложения из форумов явно не рабочие((

Уваров А.С.

Судя по man mutt ваш вариант должен работать, как альтернативу можно попробовать задать content_type в .muttrc

ival

Судя по man mutt ваш вариант должен работать, как альтернативу можно попробовать задать content_type в .muttrc
Завтра попробую. Можете сказать как всё-таки перенаправить вывод в файл из скрипта? Просто интересно, запоняет ли mutt контент тип или он не ставит его вообще и почтовик его сам дописывает по умолчанию. В принципе я могу и полностью все хедеры сам заполнить а zabbix оставить только подстановку тела письма. Но это как-то не естетично наверно

Уваров А.С.

mutt - это почтовый клиент, его вывод вы не перенаправите, но можно посмотреть само письмо, точнее его тело.

ival

muttrc выглядит сейчас так, результат все равно text/plain  :(

set from = ***********
set realname = ""
set hostname = "*********"
set smtp_url = "***********"
set charset="utf-8"
set content_type="text/html"
set copy=no

Уваров А.С.

А какой muttrc вы правите? Zabbix работает с /var/lib/zabbix/.muttrc.

ival

Zabbix работает с /var/lib/zabbix/.muttrc.
Также можно использовать /home/zabbix/.muttrc
Вчера попробовал от безысходности поставить ssmtp и попробовать им:

#!/bin/sh
export smtpemailfrom=*************
echo "To: $1" > /tmp/minput
echo "Subject: $2" >> /tmp/minput
echo "Content-Type: text/html; charset="utf-8"" >> /tmp/minput
echo "From: \"srv-mon-001 \"<$smtpemailfrom>" >> /tmp/minput
echo "" >> /tmp/minput
echo "$3" >> /tmp/minput
/usr/sbin/ssmtp $1 -F $smtpemailfrom < /tmp/minput


А приходит "Content-Type: text/plain; charset="utf-8" :(

Уваров А.С.

А внутри  /tmp/minput что? Текст или HTML-разметка?

ival

А внутри  /tmp/minput что? Текст или HTML-разметка?
Хедеры + html.
В пятницу выяснился такой интересный факт. Если просто создать пустое сообщение с заполоненными хедарами, то придет письмо в html:

#!/bin/sh
export smtpemailfrom=************
echo "From: <***********>" >> /tmp/test
echo "To: <**********>" >> /tmp/test
echo "Subject: Zabbix problem" >> /tmp/test
echo "MIME-Version: 1.0" >> /tmp/test
echo "Content-Type: text/html; charset="UTF-8"" >> /tmp/test
echo "Content-Transfer-Encoding: base64" >> /tmp/test
/usr/sbin/ssmtp $1 -F $smtpemailfrom < /tmp/test


Если же отправлять это через Zabbix (скриптом который в предыдущем моем сообщении) приходит text/plain. Перемеренная $3 содержит HTML код. На форуме Zabbix тишина, такое ощущение, что люди не задавались этим вопросом вообще((






Уваров А.С.

Странно, а что в  /tmp/minput получается в итоге? Может там где-то невалидный HTML выходит.

ival

Странно, а что в  /tmp/minput получается в итоге? Может там где-то невалидный HTML выходит.
Мне кажется я схожу с ума /tmp/minput


MIME-Version: 1.0
MIME-Version: 1.0
MIME-Version: 1.0
MIME-Version: 1.0
MIME-Version: 1.0
MIME-Version: 1.0

Это все, больше ничего нет

Уваров А.С.

MIME-Version: 1.0 - это указание стандарта в соответствии с которым написано письмо: https://www.opennet.ru/docs/RUS/mime_rfc/

Но где само тело письма?

ival

MIME-Version: 1.0 - это указание стандарта в соответствии с которым написано письмо: https://www.opennet.ru/docs/RUS/mime_rfc/

Но где само тело письма?
Вот поэтому мне и кажется, что я схожу с ума. После выходных постараюсь выделить полностью день чтобы сесть и разобраться. Одно стало понятно, что файл формируется пустой, дальше непонятно откуда берется тело письма которое приходит. Вернее понятно откуда - из формы Zabbix, но почему оно не вставляется в файл, и в какой момент оно вообще вставляется, а оно вставляется точно т.к. приходит. Спасибо за помощь, общими усилиями удалось хотя бы понять куда копать дальше.

ival

Решил.

Проблема была в невнимательности.
Когда в Zabbix создал новое действие, то в ниспадающем Send Only To списке не поставил свой созданный Media Type, а оставил стандартный e-mail. В следствии чего получалось, что при срабатывании тригера Zabbix видел в действиях Media Type - E-mail и отправлял письмо создавая его из своего стандартного шаблона.

Но есть и ложка дегтя, побороть mutt так и не удалось, пришлось отправлять через ssmtp.

Спасибо за помощь.

Вверх