Mailx отправить html сообщение
Я хочу отправить html-сообщение с Mailx. Когда я попробую выполнить следующую команду
mailx -s "Subject" [email protected] < email.html
Я получаю содержимое email.html в виде обычного текста. В сообщении заголовок Content-Type установлен в text/plain. Опция -a пытается отправить файл, чтобы я не узнал, как изменить заголовок. Этот ответ почти сработал, он хорошо набирает Content-Type в text/html, но не подставляет Content-Type по умолчанию, который является текстовым /plain.
mailx -s "$(echo -e "This is the subject\nContent-Type: text/html")" [email protected] < email.html
дает следующий результат:
From: [email protected]
To: [email protected]
Subject: This is the subject
Content-Type: text/html
Message-ID: <538d7b66.Xs0x9HsxnJKUFWuI%[email protected]>
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
boundary="=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK"
This is a multi-part message in MIME format.
--=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
<html>
<body>
<p>Helo wolrd</p>
</body>
</html>
PS: Я также пробовал с uuencode. Когда я пытаюсь отобразить сообщение в веб-почте, я получаю пустую страницу...
Ответы
Ответ 1
Легко, если ваша команда mailx
поддерживает -a
(добавить заголовок):
$ mailx -a 'Content-Type: text/html' -s "my subject" [email protected] < email.html
Если это не так, попробуйте использовать sendmail
:
# create a header file
$ cat mailheader
To: [email protected]
Subject: my subject
Content-Type: text/html
# send
$ cat mailheader email.html | sendmail -t
Ответ 2
Существует много разных версий почты. Когда вы выходите за пределы почтового ящика subject to1 @address1 to2 @address2
-
С некоторыми реализациями mailx, например. от mailutils на Ubuntu или
Debian bsd-mailx, это просто, потому что для этого есть опция.
mailx -a 'Content-Type: text/html' -s "Subject" [email protected] <test.html
-
С почтовым ящиком Heirloom нет удобного способа. Одна возможность
для вставки произвольных заголовков необходимо установить editheaders = 1 и использовать
внешний редактор (который может быть script).
## Prepare a temporary script that will serve as an editor.
## This script will be passed to ed.
temp_script=$(mktemp)
cat <<'EOF' >>"$temp_script"
1a
Content-Type: text/html
.
$r test.html
w
q
EOF
## Call mailx, and tell it to invoke the editor script
EDITOR="ed -s $temp_script" heirloom-mailx -S editheaders=1 -s "Subject" [email protected] <<EOF
~e
.
EOF
rm -f "$temp_script"
-
С общим POSIX mailx я не знаю, как попасть в заголовки.
Если вы собираетесь использовать любую почту или mailx, имейте в виду, что
-
Это не переносимо даже в пределах данного дистрибутива Linux. Например, у Ubuntu и Debian есть несколько альтернатив для почты и mailx.
-
При составлении сообщения mail и mailx обрабатывают строки, начинающиеся с ~ как команды. Если вы отправляете текст в почту, вам нужно учесть, что этот текст не содержит строк, начинающихся с ~.
Если вы все равно собираетесь устанавливать программное обеспечение, вы можете установить что-то более предсказуемое, чем mail/Mail/mailx. Например, mutt. С помощью Mutt вы можете предоставить большинство заголовков на входе с параметром -H, но не Content-Type, который необходимо установить с помощью опции mutt.
mutt -e 'set content_type=text/html' -s 'hello' '[email protected]' <test.html
Или вы можете напрямую вызвать sendmail. Есть несколько версий sendmail, но все они поддерживают sendmail -t, чтобы отправить почту самым простым способом, читая список получателей из почты. (Я думаю, что они не все поддерживают Bcc:.) В большинстве систем sendmail не находится в обычном $PATH, это в /usr/sbin или/usr/lib.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: [email protected]
Subject: hello
Content-Type: text/html
EOF
Ответ 3
Я успешно использовал следующее в Arch Linux (где флаг -a
используется для вложений) в течение нескольких лет:
mailx -s "The Subject $( echo -e "\nContent-Type: text/html" [email protected] < email.html
Это добавило заголовок Content-Type в заголовок темы, который отлично работал до последнего обновления. Теперь новая строка фильтруется из объекта -s
. Предположительно, это было сделано для повышения безопасности.
Вместо того, чтобы полагаться на взлом строки темы, теперь я использую bash subshell:
(
echo -e "Content-Type: text/html\n"
cat mail.html
) | mail -s "The Subject" -t [email protected]
И поскольку мы действительно используем только mailx
subject flag, кажется, нет причин не переключаться на sendmail
, как было предложено @dogbane:
(
echo "To: [email protected]"
echo "Subject: The Subject"
echo "Content-Type: text/html"
echo
cat mail.html
) | sendmail -t
Использование bash подоболочек позволяет избежать создания временного файла.
Ответ 4
EMAILCC=" -c [email protected],[email protected]"
TURNO_EMAIL="[email protected]"
mailx $EMAILCC -s "$(echo "Status: Control Aplicactivo \nContent-Type: text/html")" $TURNO_EMAIL < tmp.tmp
Ответ 5
Ну, "-a" почта и mailx в Centos7 - "attach file", а не "append header". Мой самый короткий путь к решению на Centos7 отсюда:
stackexchange.com
В принципе:
yum install mutt
mutt -e 'set content_type=text/html' -s 'My subject' [email protected] < msg.html
Ответ 6
Если вы используете AIX, попробуйте это
Это приложит текстовый файл и включит тело HTML
Если это не работает, поймайте вывод в /var/spool/mqueue
#!/usr/bin/kWh
if (( $# < 1 ))
then
echo "\n\tSyntax: $(basename) MAILTO SUBJECT BODY.html ATTACH.txt "
echo "\tmailzatt"
exit
fi
export MAILTO=${[email protected]}
MAILFROM=$(whoami)
SUBJECT=${2-"mailzatt"}
export BODY=${3-/apps/bin/attch.txt}
export ATTACH=${4-/apps/bin/attch.txt}
export HST=$(hostname)
#export BODY="/wrk/stocksum/report.html"
#export ATTACH="/wrk/stocksum/Report.txt"
#export MAILPART=`uuidgen` ## Generates Unique ID
#export MAILPART_BODY=`uuidgen` ## Generates Unique ID
export MAILPART="==".$(date +%d%S)."===" ## Generates Unique ID
export MAILPART_BODY="==".$(date +%d%Sbody)."===" ## Generates Unique ID
(
echo "To: $MAILTO"
echo "From: [email protected]$HST "
echo "Subject: $SUBJECT"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
echo ""
echo "--$MAILPART"
echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
echo ""
echo ""
echo "--$MAILPART_BODY"
echo "Content-Type: text/html"
echo "Content-Disposition: inline"
cat $BODY
echo ""
echo "--$MAILPART_BODY--"
echo ""
echo "--$MAILPART"
echo "Content-Type: text/plain"
echo "Content-Disposition: attachment; filename=\"$(basename $ATTACH)\""
echo ""
cat $ATTACH
echo ""
echo "--${MAILPART}--"
) | /usr/sbin/sendmail -t