57 votes

Envoi de courrier HTML à l'aide d'un shell script.

Comment puis-je envoyer un courriel HTML en utilisant un shell script ?

1 votes

Qu'est-ce qui ne va pas dans la réponse qui a été donnée, puisque la commande mail est votre meilleure option à partir d'un script de shell ? Que cherchez-vous, ou en quoi sa réponse était-elle défaillante, pour que vous décidiez de mettre une prime dessus ?

0 votes

Parce que je n'ai pas bien compris la réponse. Mais toutes les autres personnes sont capables de comprendre, mais je ne suis pas capable de le faire.....

11 votes

Alors dites-le. Si vous ne comprenez pas, ne restez pas silencieux. Demandez une clarification de la réponse.

65voto

Álvaro G. Vicario Points 57607

Vous devez d'abord composer le message. Le strict minimum est composé de ces deux en-têtes :

MIME-Version: 1.0
Content-Type: text/html

... et le corps du message approprié :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>

<p>Hello, world!</p>

</body>
</html>

Une fois que vous l'avez, vous pouvez transmettre les informations appropriées à la fonction courrier électronique commandement :

body = '...'

echo $body | mail \
-a "From: me@example.com" \
-a "MIME-Version: 1.0" \
-a "Content-Type: text/html" \
-s "This is the subject" \
you@example.com

Il s'agit d'un exemple simplifié à l'extrême, puisque vous devez également tenir compte des jeux de caractères, des codages, de la longueur maximale des lignes... Mais c'est en gros l'idée.

Alternativement, vous pouvez écrire votre script en Perl ou PHP plutôt qu'en simple shell.

Mise à jour

Un shell script est essentiellement un fichier texte avec des terminaisons de ligne Unix qui commence par une ligne appelée shebang qui indique à l'interpréteur de commandes à quel interpréteur il doit passer le fichier, suivre quelques commandes dans le langage que l'interpréteur comprend et qui a la permission d'exécution (dans Unix c'est un attribut de fichier). Par exemple, disons que vous enregistrez le fichier suivant en tant que hello-world :

#!/bin/sh

echo Hello, world!

Ensuite, vous attribuez une autorisation d'exécution :

chmod +x hello-world

Et vous pouvez enfin l'exécuter :

./hello-world

Peu importe, ça n'a rien à voir avec la question initiale. Vous devriez vous familiariser avec les scripts shell de base avant d'effectuer des tâches avancées avec eux. Voici quelques liens sur bash un coquillage populaire :

http://www.gnu.org/software/bash/manual/html_node/index.html

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

0 votes

Pouvez-vous répondre à la deuxième partie Je ne sais pas comment l'utiliser ?

0 votes

Je ne suis pas sûr de votre question... Etes-vous familier avec les scripts shell ? Où se trouvent les informations que vous voulez envoyer ?

0 votes

Non je n'ai jamais utilisé le shell script ... c'est juste au moment où j'ai besoin de l'utiliser dans le cadre du développement de mon application ...

52voto

mdma Points 33973

Les balises incluent 'sendmail', voici donc une solution qui l'utilise :

(
echo "From: me@xyz.com "
echo "To: them@xyz.com "
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/alternative; " 
echo ' boundary="some.unique.value.ABC123/server.xyz.com"' 
echo "Subject: Test HTML e-mail." 
echo "" 
echo "This is a MIME-encapsulated message" 
echo "" 
echo "--some.unique.value.ABC123/server.xyz.com" 
echo "Content-Type: text/html" 
echo "" 
echo "<html> 
<head>
<title>HTML E-mail</title>
</head>
<body>
<a href='http://www.google.com'>Click Here</a>
</body>
</html>"
echo "------some.unique.value.ABC123/server.xyz.com--"
) | sendmail -t

Un wrapper pour sendmail peut faciliter ce travail, par exemple, mutt :

mutt -e 'set content_type="text/html"' me@mydomain.com -s "subject" <  message.html

0 votes

Quelle est l'utilité d'echo "--some.unique.value.ABC123/server.xyz.com" ?

1 votes

Le paramètre "--some.unique.value...", qui correspond à l'option boundary="some.unique.value..." dans les en-têtes, est le moyen utilisé par MIME pour séparer les messages multiparties. Lorsqu'il voit cela, il sait que ce qui suit est une nouvelle partie, et qu'il doit retourner à l'analyse des en-têtes. Cet exemple est un peu plus compliqué qu'il ne devrait l'être, car les parties multiples ne sont pas strictement nécessaires, mais ce n'est pas une mauvaise idée si vous envoyez du courrier HTML.

1 votes

Je l'ai testé, et j'ai reçu un corps vierge. Une idée ?

46voto

Kevin Zhu Points 424

Jusqu'à présent, j'ai trouvé deux moyens rapides dans cmd linux

  1. Utilisez le courrier de la vieille école

mail -s "$(echo -e "This is Subject\nContent-Type: text/html")" test@yahoo.com < mytest.html

  1. Utiliser le mutt

mutt -e "my_hdr Content-Type: text/html" test@yahoo.com -s "subject" < mytest.html

0 votes

Cette solution est vraiment simple et fonctionne pourtant sans problème. Elle mérite vraiment plus de votes positifs.

0 votes

A bien fonctionné sur MacOSX 10.9. très astucieux. beau travail. des astuces pour ajouter des pièces jointes ?

1 votes

@Kevin Zhu : Cela fonctionne, mais je doute que la citation soit conforme à votre intention. Le premier guillemet double après le -e ferme le guillemet double qui le précède. Je pense que c'est ce que vous vouliez faire : "$(echo -e 'This is Subject\nContent-Type: text/html')"

2voto

Matti Pastell Points 4244

Une autre option est le script sendEmail script. http://caspian.dotconf.net/menu/Software/SendEmail/ Il vous permet également de définir le type de message comme étant du type html et d'inclure un fichier dans le corps du message. Voir le lien pour plus de détails.

1voto

ratty Points 3926

Shell envoyer email html - The UNIX and Linux Forums

http://www.unix.com/shell-programming-scripting/80973-shell-send-html-email.html

Envoi d'un courriel à partir d'un script - Shell Scripting

http://www.daniweb.com/forums/thread15280.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X