GNU/Linux >> Tutoriels Linux >  >> Linux

Comment envoyer un e-mail HTML à l'aide de la commande "mail" de Linux ?

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. depuis mailutils sur Ubuntu ou Debian bsd-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éfinir editheaders=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 et mailx .
  • Lors de la rédaction d'un message, mail et mailx traite les lignes commençant par ~ comme commandes. Si vous envoyez du texte dans mail , 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

Linux
  1. Comment redémarrer Linux en utilisant la ligne de commande

  2. Envoyer du courrier à partir de la ligne de commande avec un serveur smtp externe sous Linux

  3. 9 exemples de commandes mail/mailx pour envoyer des e-mails depuis la ligne de commande sous Linux

  4. Comment tuer un processus sous Linux en utilisant la commande ?

  5. Linux / UNIX :Comment envoyer des e-mails avec des pièces jointes à l'aide de la commande mailx

Comment utiliser Ansible pour envoyer un e-mail avec Gmail

Comment exécuter une commande périodiquement sous Linux à l'aide de Watch

commande mailx sous Linux - envoyer et recevoir du courrier Internet

Comment envoyer un e-mail localement à l'aide de l'invite de commande

Envoyer un e-mail sous Linux à partir de la ligne de commande

Comment insérer une nouvelle ligne dans l'e-mail à l'aide de la commande linux mail ?