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
mailximplémentations, par ex. depuismailutilssur 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=1et 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
mailxPOSIX 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
mailetmailx. - Lors de la rédaction d'un message,
mailetmailxtraite 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