Как отправить электронное письмо в формате html с помощью команды bash sendmail?

У кого-нибудь есть доступная демоверсия?

Говорят, что Sendmail не масштабируется, но он бесплатный, поэтому я решил использовать его первым :)


person omg    schedule 26.08.2009    source источник
comment
Что вы подразумеваете под электронной почтой в формате HTML. HTML-страницы во вложении или электронное письмо должно быть в формате HTLM?   -  person Space    schedule 26.08.2009
comment
электронная почта должна быть в формате HTLM   -  person omg    schedule 26.08.2009
comment
Является ли sendmail обязательным? Я могу сделать то же самое, используя простую почту POSIX, но у меня нет доступа к sendmail.   -  person Nicholas Anderson    schedule 18.09.2014


Ответы (8)


Следующие работы:

(
echo "From: ${from}";
echo "To: ${to}";
echo "Subject: ${subject}";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "";
echo "${message}";
) | sendmail -t

Для устранения неполадок msmtp, совместимого с sendmail, см.:

person Steven L    schedule 08.04.2013
comment
@NiKiZe MIME-Version требуется, если вы используете функции MIME, такие как Content-Type:, которые, очевидно, вам нужно использовать здесь. - person tripleee; 02.11.2015
comment
Правда, там надо следовать спец. однако многие клиенты будут использовать заголовок Content-Type, не заботясь о MIME-Version. Если это для более широкой аудитории, конечно, вы должны следовать спецификации, но для быстрого взлома (если вам нужно напечатать это, чтобы отправить электронное письмо самому себе) это может не понадобиться для получения желаемого результата. - person NiKiZe; 03.11.2015
comment
Вот требования к MIME-версии RFC2045. - person Marko Kohtala; 20.01.2016
comment
Это работает. Если ваш HTML находится в файле, просто удалите echo ${message}; и замените на cat yourfile.html; - person Santiago Trias; 27.07.2019

Если я вас правильно понял, вы хотите отправлять почту в формате HTML с помощью команды linux sendmail. Этот код работает на Unix. Пожалуйста, попробуйте.

echo "From: [email protected]
To: [email protected]
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary='PAA08673.1018277622/server.xyz.com'
Subject: Test HTML e-mail.

This is a MIME-encapsulated message

--PAA08673.1018277622/server.xyz.com
Content-Type: text/html

<html> 
<head>
<title>HTML E-mail</title>
</head>
<body>
<a href='http://www.google.com'>Click Here</a>
</body>
</html>
--PAA08673.1018277622/server.xyz.com
" | sendmail -t

Подробнее о настройке sendmail см. по этой ссылке. Надеюсь это поможет.

person Space    schedule 26.08.2009
comment
Если содержимое электронной почты предварительно сгенерировано и восстановлено в файле с именем content.html, как отправить его в Б из А с помощью sendmail? - person omg; 26.08.2009
comment
если вы хотите прочитать содержимое из внешнего файла, вы можете использовать какой-нибудь скрипт bash для чтения строк из внешнего html-файла и вставить его в поле данных электронной почты ИЛИ просто скопируйте и вставьте html-код. Кроме того, пожалуйста, посмотрите на ссылку, предоставленную вирусом. Надеюсь это поможет. - person Space; 26.08.2009
comment
Единственная часть, которую я не понимаю, это :boundary=PAA08673.1018277622/server.xyz.com. Что это значит? - person omg; 26.08.2009
comment
sendmail нуждается в настройке перед фактической отправкой электронной почты, верно? - person omg; 26.08.2009
comment
Да, вы настроили sendmail перед его использованием. Если вам все еще интересны подробности, я отредактировал свой комментарий со ссылкой, которая была полезна для меня в прошлый раз. - person Space; 28.08.2009
comment
Я считаю, что строка boundary='...' должна быть добавлена ​​к строке прямо над ней, строке Content-Type:...;, верно? Я попытался внести изменения, но StackExchange заблокировал их, так как недостаточно символов для изменения. :( - person bgoodr; 15.12.2017

Насколько я понимаю, вы просили отправить почту, но почему бы не использовать почту по умолчанию? Он может легко отправлять электронные письма в формате html.

Работает на: RHEL 5.10/6.x и CentOS 5.8

Пример:

cat ~/campaigns/release-status.html | mail -s "$(echo -e "Release Status [Green]\nContent-Type: text/html")" [email protected] -v

CodeShare: http://www.codeshare.io/8udx5

person Nicholas Anderson    schedule 18.09.2014

Эта страница должна помочь — http://www.zedwood.com/article/103/bash-send-mail-with-an-attachment

Он включает сценарий для отправки электронной почты с вложением MIME, т. е. с включенной HTML-страницей и изображениями.

person DavidMWilliams    schedule 26.08.2009
comment
Не то, о чем спрашивал автор, но, вероятно, все же полезно. - person ypnos; 26.08.2009

- вариант?

См. справочная страница:

-a file
          Attach the given file to the message.

Результат:

Content-Type: text/html: No such file or directory
person Virole Bridée    schedule 18.08.2017
comment
вам нужна более новая версия почты - person Jasonw; 17.12.2019

Решение найдено в http://senthilkl.blogspot.lu/2012/11/how-to-send-html-emails-using-sendemail.html

sendEmail -f "oracle@server" -t "[email protected]" -u "Alert: Backup complete" -o message-content-type=html -o message-file=$LOG_FILE  -a $LOG_FILE_ATTACH 
person Abdel    schedule 08.03.2018

Чтобы продолжить предыдущий ответ, используя почту:

Часто вывод html интерпретируется клиентской почтовой программой, которая может не форматировать вещи, используя шрифт фиксированной ширины. Таким образом, ваше красиво отформатированное выравнивание ascii становится все испорченным. Чтобы отправить старомодную фиксированную ширину так, как задумал Бог, попробуйте следующее:

{ echo -e "<pre>"
echo "Descriptive text here."
shell_command_1_here
another_shell_command
cat <<EOF

This is the ending text.
</pre><br>
</div>
EOF
} | mail -s "$(echo -e 'Your subject.\nContent-Type: text/html')" [email protected]

Вам не обязательно нужен «Описательный текст здесь». строка, но я обнаружил, что иногда первая строка может, в зависимости от ее содержимого, заставить почтовую программу интерпретировать остальную часть файла не так, как вы предполагали. Сначала попробуйте сценарий с простым описательным текстом, прежде чем настраивать вывод так, как вам нужно.

person Mike S    schedule 18.11.2014

Проще использовать параметр -a :

cat ~/campaigns/release-status.html | mail -s "Release Status [Green]" -a "Content-Type: text/html" [email protected]
person PhilippeS    schedule 04.12.2015
comment
Вы можете объяснить, что делает -a? - person MaXi32; 07.07.2020
comment
команда -a не работает в CentOS, но работает в Ubuntu - person MaXi32; 07.07.2020