Antworten:
Es gibt viele verschiedene Versionen von mail
. Wenn Sie über das hinausgehen mail -s subject to1@address1 to2@address2 <body
(zum Senden, das ist alles POSIX Garantien - und auch -s
nicht existieren in den alten Tagen ), sie neigen dazu , Optionen unterschiedliche Befehlszeile zu haben. Das Hinzufügen eines zusätzlichen Headers ist nicht immer einfach.
Bei einigen mailx
Implementierungen, z. B. von mailutils
Ubuntu oder Debianbsd-mailx
, ist es einfach, weil es dafür eine Option gibt.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Mit dem Erbstück mailx
gibt es keinen bequemen Weg. Eine Möglichkeit, beliebige Überschriften einzufügen, besteht darin, editheaders=1
einen externen Editor (der ein Skript sein kann) festzulegen und zu verwenden.
## 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"
Mit einem allgemeinen POSIXmailx
kann ich nicht an Überschriften gelangen.
Wenn Sie eines mail
oder verwenden möchten mailx
, denken Sie daran
mail
und mailx
.mail
und mailx
behandelt Zeilen, die mit beginnen, ~
als Befehle. Wenn Sie Text einfügen mail
, müssen Sie dafür sorgen, dass dieser Text keine Zeilen enthält, die mit beginnen ~
.Wenn Sie sowieso Software installieren, dann kann man auch etwas berechenbarer als installieren mail
/ Mail
/ mailx
. Zum Beispiel Mutt . Mit Mutt können Sie die meisten Header in der Eingabe mit der -H
Option versehen, nicht jedochContent-Type
, die über eine Mutt-Option festgelegt werden muss.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Oder Sie können sendmail
direkt aufrufen . Es gibt verschiedene Versionen von sendmail
, aber alle unterstützen sendmail -t
das Senden einer E-Mail auf einfachste Weise und das Lesen der Empfängerliste aus der E-Mail. (Ich denke, sie werden nicht alle unterstützt Bcc:
.) Auf den meisten Systemen sendmail
ist es nicht das Übliche $PATH
, sondern das In- /usr/sbin
oder /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
Mit dem Heirloom mailx ist dies ein bequemer Weg
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Vielen Dank, Dude hat
auf Fedora 17 getestet und funktioniert
Sie müssen Content-Type
Ihrer E-Mail einen Header hinzufügen , um dies zu ermöglichen.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
wird funktionieren
mailx
? Das könnte die Option haben. Wenn das nicht geht. Wenn das nicht funktioniert, können Sie die Verwendung von mutt in Betracht ziehen, obwohl ich nicht genau weiß, wie die Befehlszeilenoptionen lauten.
Mit heirloom-mailx können Sie das sendmail-Programm in Ihr Hook-Skript ändern, die Header dort ersetzen und dann sendmail verwenden.
Das Skript, das ich benutze ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Dieses Skript ändert die Werte im Mail-Header wie folgt:
Content-Type:
zu text/html; charset=utf-8
Content-Transfer-Encoding:
bis 8bit
(nicht sicher, ob dies wirklich benötigt wird).So senden Sie eine HTML-E-Mail:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Diese Methode ist effektiver als die von @Gilles vorgeschlagene, da keine temporären Dateien erstellt werden und der Stream nur im laufenden Betrieb repariert wird.
Ich habe die folgenden Skripte verwendet, um zu geschehen
#!/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
Für mich musste ich eine Variable wie den SMTP-Server angeben, damit der E-Mail-Befehl wie folgt funktioniert. Ich suchte in vielen Beiträgen und fand unter Eigenschaft, um den Körper in Text / HTML umzuwandeln. Jetzt ist die E-Mail, die ich erhalte, im HTML-Format.
Inhaltsdisposition: Inline
Unix-Version: Red Hat Enterprise Linux Server Version 6.6 (Santiago)
Zuerst. Erstellen Sie alle erforderlichen Informationen in einem Skript (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>"
Zweite. Leiten Sie das Skript an den Befehl mail weiter
./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
Auf diese Weise erhalte ich Informationen wie unten in der E-Mail:
Content-Disposition: Inline Message-ID: User-Agent: Heirloom mailx 12.4 29.07.08 MIME-Version: 1.0 Content-Type: text / plain; Zeichensatz = us-ascii Content-Transfer-Encoding: 7bit Wert1 Wert2
Wert1 und Wert2 gemäß der HTML-Kennzeichnung in testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com