Wie kann ich E-Mail-Nachrichten als HTML und nicht als Text senden?

36084
C.W.Holeman II

Derzeit sende ich eine E-Mail vom Linux-Befehl wie folgt:

echo "Here is the link: file:///S:/some_doc.html" | mail -s "Here is some_doc.html" fred@example.com 

In einigen E-Mail-Clients wird "file: /// S: /some_doc.html" im Nachrichtentext zu einem Link, auf den der Benutzer klicken kann. In anderen Clients wird der Text jedoch als reiner Text dargestellt, sodass der Benutzer die Zeichenfolge kopieren und einfügen muss in einen Webbrowser. Wie ändere ich den Befehl, um die Nachricht in HTML umzuwandeln, damit der E-Mail-Client weiß, wie er mit dem Link umgehen soll?

Dadurch wird der Link in die Nachricht eingefügt, er wird jedoch immer noch als Text und nicht als HTML behandelt:

echo "Here is the link to: <a href='file:///S:/some_doc.html'>some_doc.html</a>" | mail -s "Here is some_doc.html" fred@example.com 
3
Warum sollte eine vollkommen gültige Super User-Frage mit einer ** akzeptierten Antwort auf eine andere SE-Site verschoben werden? BinaryMisfit vor 13 Jahren 0
Es ist eine Linux-spezifische Frage, die jetzt, wo es eine SE-Site für Linux gibt, der natürliche Ort wäre, an den jemand, der diese Frage stellt, gehen würde. Wenn es sich bei der Frage um die Unterscheidung zwischen Text und HTML in E-Mail und nicht um einen "Linux-Befehl" handelte, wäre dies hier besser zu finden. C.W.Holeman II vor 13 Jahren 0

2 Antworten auf die Frage

5
Nathaniel Bannister

Ich habe gesehen, wie es fertig ist:

mail -a "Content-type: text/html;" -s Test address@example.com < mail_html.html 

Ich hätte sagen sollen, ich habe dies auf Ubuntu Server 10.04_x64 mit Gnu Mail Utils -> Postfix getestet

Meine "Mail" hat nicht -a. Könnten Sie an "Mutt" denken, der sie unterstützt? Rich Homolka vor 13 Jahren 2
Ein besserer Weg wäre, eine MIME-Multipart / alternative-Nachricht mit den Teilen "text / plain" und "text / html" zu erstellen, die identischen Text enthalten, anstatt nur HTML direkt zu senden. grawity vor 13 Jahren 0
@Rich: Es ist in "Mail" von GNU _Mailutils_. Sie haben wahrscheinlich die traditionellere _BSD mailx_. (Achtung: "mail" von _Heirloom mailx_ und "mutt" verwenden "-a" für etwas völlig anderes - das Anhängen einer Datei.) grawity vor 13 Jahren 1
1
grawity

Botschaft:

  • Am besten erstellen Sie eine MIME- Content-Type: multipart/alternativeNachricht mit text/plainund text/htmlTeilen.

  • Für die Faulenzer Content-Type: text/html(mit HTML direkt im Nachrichtentext) reicht das.

    ... aber denken Sie daran, dass es ist Mail - Clients, die nicht in der Lage ist HTML angezeigt werden soll .

  • Je nachdem, was Sie wählen, fügen Siecharset=utf-8 (wie in Content-Type: text/html; charset=utf-8) dem Typkopf hinzu. (Jeder Nicht-Unicode-Zeichensatz (außer vielleicht us-asciiund iso-8859-1) ist böse.)

Senden:

  • Nathaniel schlug vor mail -a "Content-Type: text/html", aber das funktioniert nur mit GNU Mailutils.

  • Eine zuverlässigere Methode ist das Pipe der Nachricht sendmail, aber Sie müssen alle Header selbst erstellen.

    rcpt=joe@example.com echo -e "From: <$USER>\nTo: <$rcpt>\nDate: $(date "+%a, %d %b %Y %H:%M:%S %z")\nContent-Type: text/html; charset=utf-8\n\n<!DOCTYPE html>\n<p>Here is the link to: <a href=\"file:///S:/some_doc.html\">some_doc.html</a>" | sendmail -i "$rcpt"