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 -s
nie istniały w dawnych czasach ), mają one zwykle różne opcje wiersza poleceń. Dodanie dodatkowego nagłówka nie zawsze jest łatwe.
Z niektórymi mailx
implementacjami, np. Z mailutils
Ubuntu 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=1
zewnę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 mail
lub mailx
, pamiętaj o tym
mail
i mailx
.mail
i mailx
traktuje 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 -H
opcją, 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ć sendmail
bezpośrednio. Istnieje kilka wersji sendmail
, ale wszystkie obsługują sendmail -t
wysył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 sendmail
nie ma go w zwykłym systemie $PATH
, jest w /usr/sbin
lub /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-Type
Aby 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-8
Content-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