Je dois envoyer un email au format HTML. Je n'ai que la ligne de commande linux et la commande "mail".
Actuellement ont utilisé:
echo "To: [email protected]" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv
echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv
mail -s "Built notification" [email protected] < /var/www/report.csv
Mais dans mon agent de messagerie, je ne reçois que du texte en clair.
Cela a fonctionné pour moi:
echo "<b>HTML Message goes here</b>" | mail -s "$(echo -e "This is the subject\nContent-Type: text/html")" [email protected]
Ma version de mail n'a pas --append
et trop intelligent pour le echo -e \n
_ astuce (elle remplace simplement\n par de l’espace). Il a cependant -a
:
mail -a "Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.html
Créez un fichier appelé tmp.html et mettez-y la ligne suivante:
<b>my bold message</b>
Ensuite, collez tout cela dans la ligne de commande: (avec la parenthèse et tout).
(
echo To: [email protected]
echo From: [email protected]
echo "Content-Type: text/html; "
echo Subject: a logfile
echo
cat tmp.html
) | sendmail -t
Le courrier sera envoyé. Et le message est apparu comme gras au lieu de avec le <b>
Mots clés.
La source:
Comment envoyer un email en HTML avec la commande bash "sendmail"?
Le problème est que lorsque vous redirigez un fichier dans un "courrier" comme celui-ci, il est utilisé uniquement pour le corps du message. Tous les en-têtes que vous intégrez dans le fichier iront dans le corps.
Essayer:
mail --append="Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.csv
--append vous permet d'ajouter des en-têtes arbitraires au courrier, où vous devez spécifier le type de contenu et la disposition du contenu. Il n'est pas nécessaire d'incorporer les en-têtes To
et Subject
dans votre fichier, ni de les spécifier avec --append, car vous les configurez implicitement sur la ligne de commande (-s est l'objet et [email protected] devient automatiquement le To
).
Sur OS X (10.9.4), cat
fonctionne et est plus facile si votre email est déjà dans un fichier:
cat email_template.html | mail -s "$(echo -e "Test\nContent-Type: text/html")" [email protected]
Avec heirloom-mailx, vous pouvez remplacer le programme sendmail par votre script de raccordement, remplacer les en-têtes et utiliser sendmail.
Le script que j'utilise (~/bin/sendmail-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
_ (je ne sais pas si c'est vraiment nécessaire).Pour envoyer un email HTML:
mail -Ssendmail='~/bin/sendmail-hook' \
-s "Built notification" [email protected] < /var/www/report.csv
Très vieille question, cependant elle s'est classée haut lorsque j'ai cherché dans Google une question à ce sujet.
Trouvez la réponse ici:
vous devriez utiliser la redirection de mode "append" >>
au lieu de >
J'ai trouvé une solution très simple: ajoutez à la commande mail le modificateur -aContent-Type: text/html.
Dans votre cas serait:
mail -aContent-Type:text/html -s "Built notification" [email protected] < /var/www/report.csv
Essayez avec:
echo "To: [email protected]" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "MIME-Version: 1.0" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv
echo "Content-Disposition: inline" >> /var/www/report.csv
echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv
mail -s "Built notification" [email protected] < /var/www/report.csv
Je me débattais avec un problème similaire (avec le courrier) dans l’un des hooks post_receive de mon git et, finalement, j’ai découvert que sendmail fonctionne mieux pour ce genre de choses, surtout si vous connaissez un peu la manière dont les e-mails sont construits. on dirait que tu sais). Je sais que cette réponse arrive très tard, mais elle sera peut-être utile à d’autres également. J'ai utilisé l'opérateur heredoc et l'utilisation de la fonctionnalité, qui étend les variables, de sorte qu'elle puisse également exécuter des scripts intégrés. Il suffit de vérifier ceci (script bash):
#!/bin/bash
recipients=(
'[email protected]'
'[email protected]'
# '[email protected]'
);
sender='[email protected]';
subject='Oh, who really cares, seriously...';
sendmail -t <<-MAIL
From: ${sender}
`for r in "${recipients[@]}"; do echo "To: ${r}"; done;`
Subject: ${subject}
Content-Type: text/html; charset=UTF-8
<html><head><meta charset="UTF-8"/></head>
<body><p>Ladies and gents, here comes the report!</p>
<pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`</pre>
</body></html>
MAIL
Note des backticks dans la partie MAIL pour générer une sortie et se rappeler que <<-
l'opérateur ne supprime que les tabulations (et non les espaces) depuis le début des lignes. Dans ce cas, le copier-coller ne fonctionnera pas (vous devez remplacer l'indentation par des tabulations appropriées). Ou utiliser <<
opérateur et ne faites aucune empreinte du tout. J'espère que cela aidera quelqu'un. Bien sûr, vous pouvez utiliser des cueillettes en dehors de la partie MAIL et enregistrer la sortie dans une variable que vous pourrez utiliser ultérieurement dans la partie MAIL - pour des raisons de goût et de lisibilité. Et je sais, #!/bin/bash
ne fonctionne pas toujours sur tous les systèmes.