Odpowiedzi:
Istnieje wiele różnych wersji mail. Kiedy wychodzisz poza mail -s subject to1@address1 to2@address2 <body(do wysyłania, to wszystko gwarancje POSIX - a nawet -snie istniały w dawnych czasach ), mają one zwykle różne opcje wiersza poleceń. Dodanie dodatkowego nagłówka nie zawsze jest łatwe.
Z niektórymi mailximplementacjami, np. Z mailutilsUbuntu lub Debianabsd-mailx , jest to łatwe, ponieważ jest na to opcja.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
W Heirloom mailx nie ma wygodnego sposobu. Jedną z możliwości wstawienia dowolnych nagłówków jest ustawienie editheaders=1zewnętrznego edytora (który może być skryptem) i korzystanie z niego.
## 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"
Z ogólnym POSIX-emmailx nie wiem, jak uzyskać nagłówki.
Jeśli zamierzasz użyć dowolnego maillub mailx, pamiętaj o tym
maili mailx.maili mailxtraktuje linie zaczynające się ~jako polecenia. Jeśli wstawiasz tekst do potoku mail, musisz tak ustawić, aby ten tekst nie zawierał linii zaczynających się od ~.Jeśli i tak zamierzasz zainstalować oprogramowanie, równie dobrze możesz zainstalować coś bardziej przewidywalnego niż mail/ Mail/ mailx. Na przykład mutt . Dzięki Mutt możesz dostarczyć większość nagłówków na wejściu z -Hopcją, ale nieContent-Type , którą należy ustawić za pomocą opcji mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Lub możesz wywołać sendmailbezpośrednio. Istnieje kilka wersji sendmail, ale wszystkie obsługują sendmail -twysyłanie wiadomości w najprostszy sposób, czytając listę adresatów z wiadomości. (Myślę, że nie wszystkie obsługują Bcc:.) W większości systemów sendmailnie ma go w zwykłym systemie $PATH, jest w /usr/sbinlub /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
Dzięki Heirloom mailx wygodny sposób to
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Dzięki, koleś
przetestował Fedorę 17 i działał
Content-TypeAby to się stało, musisz dodać nagłówek do wiadomości e-mail.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
będzie działać
mailx? To może mieć opcję. Jeśli to nie zadziała. Jeśli to nie zadziała, możesz rozważyć użycie mutta, chociaż nie wiem od razu, jakie przełączniki linii poleceń to robią.
Dzięki heirloom-mailx możesz zmienić program sendmail na swój skrypt przechwytujący, zamienić tam nagłówki, a następnie użyć sendmaila.
Skrypt, którego używam ( ~/bin/sendmail-mailx-hook):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Ten skrypt zmienia wartości w nagłówku wiadomości w następujący sposób:
Content-Type: do text/html; charset=utf-8Content-Transfer-Encoding:do 8bit(nie jestem pewien, czy jest to naprawdę potrzebne).Aby wysłać wiadomość e-mail w formacie HTML:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Ta metoda jest bardziej skuteczna niż zaproponowana przez @Gilles, ponieważ nie tworzy plików tymczasowych, a jedynie naprawia strumień w locie.
Użyłem poniższych skryptów
#!/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
Dla mnie musiałem podać zmienną taką jak serwer SMTP, więc polecenie mail działało w następujący sposób. Przeszukałem wiele postów i znalazłem poniżej właściwości do konwersji treści na tekst / HTML. Teraz e-mail, który otrzymuję, jest w formacie HTML.
Dyspozycja treści: wbudowana
Wersja uniksowa: Red Hat Enterprise Linux Server wydanie 6.6 (Santiago)
Pierwszy. Utwórz w skrypcie dowolne informacje (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>"
Druga. Prześlij ten skrypt do polecenia mail
./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
W ten sposób otrzymuję następujące informacje w wiadomości e-mail:
Dyspozycja treści: wbudowana Identyfikator wiadomości: Agent użytkownika: Heirloom mailx 12.4 7/29/08 Wersja MIME: 1.0 Typ treści: tekst / zwykły; charset = us-ascii Content-Transfer-Encoding: 7bit Wartość1 Wartość2
Wartość1 i Wartość2 zgodnie z tagowaniem HTML wykonanym w pliku testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com