it-swarm.com.de

Mailx HTML-Nachricht senden

Ich möchte eine HTML-Nachricht mit Mailx senden. Wenn ich den folgenden Befehl versuche

mailx -s "Subject"  [email protected]  < email.html 

Ich bekomme den Inhalt von email.html im Klartext. In der Nachricht wird der Header Content-Type auf text/plain gesetzt. Die Option -a versucht, eine Datei zu senden, sodass ich nicht herausgefunden habe, wie der Header geändert werden kann. Dies Antwort hat fast funktioniert, es setzt den Inhaltstyp gut auf text/html, ersetzt aber nicht den Standard-Inhaltstyp, der text/plain ist.

mailx -s "$(echo -e "This is the subject\nContent-Type: text/html")" [email protected]  < email.html

gibt dieses Ergebnis:

From: [email protected]
To: [email protected]
Subject: This is the subject
Content-Type: text/html
Message-ID: <538d7b66.Xs0x9HsxnJKUFWuI%[email protected]>
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
 boundary="=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK"

This is a multi-part message in MIME format.

--=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<html>
<body>
<p>Helo wolrd</p>
</body>
</html>

PS: Ich habe es auch mit uuencode versucht. Wenn ich versuche, die Nachricht in der Webmail anzuzeigen, wird eine leere Seite angezeigt ...

19
user3580716

Es ist ganz einfach, wenn Ihr mailx -Befehl die Option -a (Header anhängen) unterstützt:

$ mailx -a 'Content-Type: text/html' -s "my subject" [email protected] < email.html

Wenn nicht, versuchen Sie es mit sendmail :

# create a header file
$ cat mailheader
To: [email protected]
Subject: my subject
Content-Type: text/html

# send
$ cat mailheader email.html | sendmail -t
20
dogbane

Es gibt viele verschiedene Mailversionen. Wenn Sie über den Betreff von E-Mails zu 1 @ Adresse1 bis 2 @ Adresse2 hinausgehen

  • Bei einigen Mailx-Implementierungen, z. Von mailutils auf Ubuntu oder Debians bsd-mailx ist es einfach, weil es dafür eine Option gibt.

    mailx -a 'Content-Type: text/html' -s "Subject" [email protected] <test.html
    
  • Mit dem Heirloom mailx gibt es keinen bequemen Weg. Eine Möglichkeit, beliebige Header einzufügen, besteht darin, editheaders = 1 zu setzen und einen externen Editor (der ein Skript sein kann) 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" [email protected] <<EOF
    ~e
    .
    EOF
    rm -f "$temp_script"
    
  • Bei einer allgemeinen POSIX-Mail weiß ich nicht, wie ich an Header komme.

Wenn Sie Mail oder mailx verwenden, denken Sie daran

  • Dies ist nicht einmal innerhalb einer bestimmten Linux-Distribution portierbar. Zum Beispiel haben sowohl Ubuntu als auch Debian verschiedene Alternativen für mail und mailx.

  • Mail und mailx behandeln beim Verfassen einer Nachricht Zeilen, die mit ~ beginnen, als Befehle. Wenn Sie Text in Mail umleiten, müssen Sie dafür sorgen, dass dieser Text keine Zeilen enthält, die mit ~ beginnen.

Wenn Sie trotzdem Software installieren, können Sie auch etwas vorhersehbareres als mail/Mail/mailx installieren. Zum Beispiel Mutt. Mit Mutt können Sie die meisten Kopfzeilen in der Eingabe mit der Option -H angeben, jedoch nicht mit dem Inhaltstyp, der über eine Mutt-Option festgelegt werden muss.

mutt -e 'set content_type=text/html' -s 'hello' '[email protected]' <test.html

Oder Sie können sendmail direkt aufrufen. Es gibt verschiedene Versionen von sendmail, aber alle unterstützen sendmail -t, um eine E-Mail auf einfachste Weise zu senden und die Liste der Empfänger aus der E-Mail zu lesen. (Ich denke, sie unterstützen Bcc nicht alle.) Auf den meisten Systemen befindet sich sendmail nicht im üblichen $ PATH, sondern in/usr/sbin oder/usr/lib.

cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: [email protected]
Subject: hello
Content-Type: text/html

EOF
11
Wakaru44

Ich hatte das Folgende unter Arch Linux (wobei das -a - Flag für Anhänge verwendet wird) mehrere Jahre erfolgreich verwendet:

mailx -s "The Subject $( echo -e "\nContent-Type: text/html" [email protected] < email.html

Dadurch wurde der Content-Type-Header an den Betreff-Header angehängt, was bis zu einem kürzlichen Update sehr gut funktioniert hat. Jetzt wird die neue Zeile aus dem Betreff -s Herausgefiltert. Vermutlich wurde dies zur Verbesserung der Sicherheit getan.

Anstatt mich auf das Hacken der Betreffzeile zu verlassen, verwende ich jetzt eine Bash-Subshell:

(
    echo -e "Content-Type: text/html\n"
    cat mail.html
 ) | mail -s "The Subject" -t [email protected]

Und da wir wirklich nur das Betreff-Flag von mailx verwenden, scheint es keinen Grund zu geben, nicht auf sendmail zu wechseln, wie von @dogbane vorgeschlagen:

(
    echo "To: [email protected]"
    echo "Subject: The Subject"
    echo "Content-Type: text/html"
    echo
    cat mail.html
) | sendmail -t

Durch die Verwendung von Bash-Subshells muss keine temporäre Datei erstellt werden.

5
Mark Grimes