Відповіді:
Є багато різних версій 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
З Heirloom 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
З поштою Heirloom зручним способом є
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-сервер, тому команда пошти працювала нижче. Я шукав багато публікацій, і я знайшов нижче властивість перетворювати тіло в текст / html. Тепер я отримав електронний лист у форматі HTML.
Зміст-диспозиція: вбудований
Версія Unix: Red Hat Enterprise Linux Server Edition 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
Роблячи це, я отримую інформацію, як показано нижче в електронній пошті:
Контент-розпорядження: вбудований Ідентифікатор повідомлення: Користувач-агент: Heirloom mailx 12.4 7/29/08 MIME-Версія: 1.0 Тип вмісту: текст / звичайна; charset = us-ascii Content-Transfer-Encoding: 7bit Значення1 Значення2
Value1 та Value2 відповідно до тегів HTML, зроблених у testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com