mail -s "subject" [email protected] <test.html
fonctionne, mais uniquement pour les e-mails en texte brut.
Quelle est la bonne façon d'envoyer un e-mail HTML à l'aide de la commande Linux mail
?
Réponse acceptée :
Il existe de nombreuses versions différentes de mail
environ. Lorsque vous allez au-delà de mail -s subject [email protected] [email protected] <body
(pour l'envoi, c'est toutes les garanties POSIX — et même -s
n'existaient pas auparavant), ils ont tendance à avoir différentes options de ligne de commande. Ajouter un en-tête supplémentaire n'est pas toujours facile.
-
Avec quelques
mailx
implémentations, par ex. depuismailutils
sur Ubuntu ou Debianbsd-mailx
, c'est facile, car il existe une option pour cela.mailx -a 'Content-Type: text/html' -s "Subject" [email protected] <test.html
-
Avec l'héritage
mailx
, il n'y a pas de moyen pratique. Une possibilité d'insérer des en-têtes arbitraires consiste à définireditheaders=1
et utilisez un éditeur externe (qui peut être un script).## 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"
-
Avec un
mailx
POSIX général , je ne sais pas comment accéder aux en-têtes.
Si vous allez utiliser n'importe quel mail
ou mailx
, gardez à l'esprit que
- Ce n'est pas portable même dans une distribution Linux donnée. Par exemple, Ubuntu et Debian ont plusieurs alternatives pour
mail
etmailx
. - Lors de la rédaction d'un message,
mail
etmailx
traite les lignes commençant par~
comme commandes. Si vous envoyez du texte dansmail
, vous devez faire en sorte que ce texte ne contienne pas de lignes commençant par~
.
Si vous devez quand même installer un logiciel, autant installer quelque chose de plus prévisible que mail
/Mail
/mailx
. Par exemple, Mutt. Avec Mutt, vous pouvez fournir la plupart des en-têtes dans l'entrée avec le -H
option, mais pas Content-Type
, qui doit être défini via une option mutt.
mutt -e 'set content_type=text/html' -s 'hello' '[email protected]' <test.html
Ou vous pouvez invoquer sendmail
directement. Il existe plusieurs versions de sendmail
là-bas, mais ils supportent tous sendmail -t
pour envoyer un mail de la manière la plus simple, en lisant la liste des destinataires du mail. (Je pense qu'ils ne prennent pas tous en charge Bcc:
.) Sur la plupart des systèmes, sendmail
n'est pas dans le $PATH
habituel , c'est dans /usr/sbin
ou /usr/lib
.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: [email protected]
Subject: hello
Content-Type: text/html
EOF