Ответы:
Есть много разных версий mail
вокруг. Когда вы выходите за рамки mail -s subject to1@address1 to2@address2 <body
(для отправки, это все гарантии POSIX - и даже -s
не существовали в старые времена ), они, как правило, имеют различные параметры командной строки. Добавление дополнительного заголовка не всегда легко.
С некоторыми mailx
реализациями, например, из mailutils
Ubuntu или Debianbsd-mailx
, это легко, потому что есть опция для этого.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
С Семейной реликвией mailx
нет удобного пути. Одна из возможностей вставить произвольные заголовки - установить editheaders=1
и использовать внешний редактор (который может быть скриптом).
## 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" to@address <<EOF
~e
.
EOF
rm -f "$temp_script"
С обычным POSIXmailx
я не знаю, как добраться до заголовков.
Если вы собираетесь использовать любой mail
или mailx
, имейте в виду, что
mail
и mailx
.mail
и mailx
обрабатывает строки , начинающиеся с ~
как команды. Если вы перенаправляете текст mail
, вам нужно сделать так, чтобы этот текст не содержал строк, начинающихся с ~
.Если вы все равно собираетесь установить программное обеспечение, вы можете установить нечто более предсказуемое, чем mail
/ Mail
/ mailx
. Например, дурак . С Mutt вы можете предоставить большинству заголовков на входе -H
опцию, но это не такContent-Type
, что необходимо установить с помощью опции Mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Или вы можете вызвать sendmail
напрямую. Существует несколько версий sendmail
, но все они поддерживают sendmail -t
отправку почты самым простым способом, считывая список получателей из почты. (Я думаю, что они не все поддерживают Bcc:
.) В большинстве систем, sendmail
не в обычном $PATH
, а в /usr/sbin
или /usr/lib
.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html
EOF
#!/bin/sh
(
echo "To: me@example.com"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t
С фамильной фамилией mailx, удобный способ
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Спасибо, Чувак
протестировал на Fedora 17, и работал
Вы должны будете добавить Content-Type
заголовок к своей электронной почте, чтобы это произошло.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
будет работать
mailx
? Это может иметь вариант. Если это не сработает. Если это не сработает, вы можете подумать об использовании mutt, хотя я не знаю, что это за командная строка.
С помощью heirloom-mailx вы можете изменить программу sendmail на свой скрипт подключения, заменить там заголовки и затем использовать sendmail.
Скрипт, который я использую ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Этот скрипт изменяет значения в заголовке письма следующим образом:
Content-Type:
в text/html; charset=utf-8
Content-Transfer-Encoding:
чтобы 8bit
(не уверен , если это действительно необходимо).Чтобы отправить HTML письмо по электронной почте:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Этот метод более эффективен, чем предложенный @Gilles, потому что он не создает временные файлы и просто исправляет поток на лету.
Я использовал приведенные ниже сценарии
#!/bin/ksh
(
echo "To: yourmail@domain.com"
echo "Subject: Job Status"
echo "Content-Type: text/html"
echo
echo "<html>
<head>
<title>Status of the jobs during the day</title>
<style>
table, th, td {
border: 1px solid blue;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<table style='width:100%'>
<tr bgcolor='#808080'>
<th>Job Name</th>
<th>System name</th>
<th>Status</th>
</tr>
<tr>
<td>Job-1</td>
<td>Sys</td>
<td>Sucess</td>
</tr>
<tr>
<td>Job-2</td>
<td>sys</td>
<td>Failure</td>
</tr>
<tr>
<td>Job-3</td>
<td>sys</td>
<td>Sucess</td>
</tr>
</table>
</body></html>"
echo
) | /usr/sbin/sendmail -t
Для меня мне нужно было указать переменную, такую как SMTP-сервер, поэтому команда mail работала следующим образом. Я искал во многих сообщениях, и я нашел свойство ниже, чтобы преобразовать тело в текст / HTML. Теперь письмо, которое я получаю, находится в формате HTML.
Content-Disposition: встроенный
Версия для Unix: Red Hat Enterprise Linux Server, версия 6.6 (Сантьяго)
Первый. Создайте в скрипте любую необходимую информацию (testSql.sh)
echo "<html><body><pre>"
mysql -u USERNAME -pPASSWORD -P PORTNUMBER -h HOSTNAME DBNAME --table -e "select columns from tablename where member in ('value1','value2')"
echo "</pre></body></html>"
Во-вторых. Передайте этот скрипт в почтовую команду
./testSql.sh | mail -v -S smtp=smtp://IP:PORTNUMBER -s "$(echo -e "This is the subject\nContent-Type: text/ht ml\nMIME-Version: 1.0\nContent-Disposition: inline")" userid@email.com
Делая это, я получаю информацию, как показано ниже в электронном письме:
Content-Disposition: встроенный ID сообщения: User-Agent: Heirloom mailx 12.4 29.07.08 MIME-версия: 1.0 Content-Type: text / plain; charset = us-ascii Content-Transfer-Encoding: 7bit Значение1 Значение2
Value1 и Value2 согласно тегам HTML, выполненным в testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com