Réponses:
Il existe de nombreuses versions différentes mail
autour. Lorsque vous allez au-delà mail -s subject to1@address1 to2@address2 <body
(pour l’envoi, c’est toutes les garanties POSIX - et -s
n’existait même pas à l’ époque ), ils ont généralement des options de ligne de commande différentes. Ajouter un en-tête supplémentaire n'est pas toujours facile.
Avec certaines mailx
implémentations, par exemple à partir mailutils
sur Ubuntu ou Debian debsd-mailx
, il est facile, car il y a une option pour cela.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Avec le Heirloom mailx
, il n'y a pas de moyen pratique. Une possibilité d'insérer des en-têtes arbitraires est de définir editheaders=1
et d'utiliser 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" to@address <<EOF
~e
.
EOF
rm -f "$temp_script"
Avec un POSIXmailx
général , je ne sais pas comment accéder aux en-têtes.
Si vous voulez utiliser mail
ou mailx
, gardez à l’esprit que
mail
et mailx
.mail
il mailx
traite les lignes commençant par des ~
commandes. Si vous faites suivre le texte mail
, vous devez vous assurer que ce texte ne contient pas de lignes commençant par ~
.De toute façon, si vous souhaitez installer un logiciel, vous pouvez également 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 de l'entrée avec l' -H
option, mais pas celle-ciContent-Type
, qui doit être définie via une option mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Ou vous pouvez invoquer sendmail
directement. Il existe plusieurs versions de sendmail
là-bas, mais ils prennent tous en charge l' sendmail -t
envoi d'un courrier de la manière la plus simple, en lisant la liste des destinataires à partir du courrier. (Je pense qu'ils ne supportent pas tous Bcc:
.) Sur la plupart des systèmes, ce sendmail
n'est pas comme d'habitude $PATH
, c'est dans /usr/sbin
ou /usr/lib
.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html
EOF
#!/bin/sh
(
echo "To: me@example.com"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t
Heirloom mailx est un moyen pratique de
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Merci, Dude
Testé sur Fedora 17, et a travaillé
Pour ce faire, vous devrez ajouter un en- Content-Type
tête à votre courrier électronique.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
marchera
mailx
? Cela pourrait avoir l'option. Si ça ne marche pas. Si cela ne fonctionne pas, vous pouvez envisager d'utiliser mutt bien que je ne sache pas ce que la ligne de commande permet de faire.
Avec heirloom-mailx, vous pouvez remplacer le programme sendmail par votre script de hook, remplacer les en-têtes et utiliser sendmail.
Le script que j'utilise ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Ce script modifie les valeurs dans l'en-tête du courrier comme suit:
Content-Type:
à text/html; charset=utf-8
Content-Transfer-Encoding:
à 8bit
(pas sûr si cela est vraiment nécessaire).Pour envoyer un email HTML:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Cette méthode est plus efficace que celle proposée par @Gilles car elle ne crée pas de fichiers temporaires et ne fait que réparer le flux à la volée.
J'ai utilisé les scripts ci-dessous pour arriver
#!/bin/ksh
(
echo "To: yourmail@domain.com"
echo "Subject: Job Status"
echo "Content-Type: text/html"
echo
echo "<html>
<head>
<title>Status of the jobs during the day</title>
<style>
table, th, td {
border: 1px solid blue;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<table style='width:100%'>
<tr bgcolor='#808080'>
<th>Job Name</th>
<th>System name</th>
<th>Status</th>
</tr>
<tr>
<td>Job-1</td>
<td>Sys</td>
<td>Sucess</td>
</tr>
<tr>
<td>Job-2</td>
<td>sys</td>
<td>Failure</td>
</tr>
<tr>
<td>Job-3</td>
<td>sys</td>
<td>Sucess</td>
</tr>
</table>
</body></html>"
echo
) | /usr/sbin/sendmail -t
Pour moi, je devais spécifier une variable telle que le serveur SMTP, la commande mail fonctionnait ainsi. J'ai cherché dans de nombreux articles et j'ai trouvé ci-dessous une propriété permettant de convertir le corps en texte / html. Maintenant, l'email que je reçois est au format HTML.
Contenu-Disposition: inline
Version Unix: Red Hat Enterprise Linux Server version 6.6 (Santiago)
Première. Créez toutes les informations nécessaires dans un script (testSql.sh)
echo "<html><body><pre>"
mysql -u USERNAME -pPASSWORD -P PORTNUMBER -h HOSTNAME DBNAME --table -e "select columns from tablename where member in ('value1','value2')"
echo "</pre></body></html>"
Seconde. Pipe ce script à la commande mail
./testSql.sh | mail -v -S smtp=smtp://IP:PORTNUMBER -s "$(echo -e "This is the subject\nContent-Type: text/ht ml\nMIME-Version: 1.0\nContent-Disposition: inline")" userid@email.com
En faisant cela, je reçois les informations ci-dessous dans le courrier électronique:
Content-Disposition: in-line Message-ID: Utilisateur-Agent: Heirloom mailx 12.4 29/07/08 MIME-Version: 1.0 Content-Type: text / plain; jeu de caractères = us-ascii Content-Transfer-Encoding: 7bit Valeur1 valeur2
Value1 et Value2 selon le balisage HTML effectué dans le testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com