3 votes

Redirection de la sortie vers le courrier électronique

Je sais que sous Windows, vous pouvez utiliser le code suivant pour rediriger la sortie d'un outil de ligne de commande vers le presse-papiers :

mytool | clip

Il est également possible de le faire avec des fichiers :

clip < myFile.txt

Je sais aussi que Windows a plusieurs autres périphériques/programmes que vous pouvez utiliser comme sortie/entrée pour ces redirections (l'imprimante est probablement le plus connu d'entre eux).

Cependant, existe-t-il un moyen d'envoyer le texte vers le programme de messagerie par défaut ?

J'adorerais découvrir qu'il y a quelque chose comme : mytool | email . Y a-t-il quelque chose de semblable ?

2 votes

Petit détail : dans vos exemples, le clip n'est pas un dispositif, mais un programme nommé clip.exe

0 votes

@wmz Tout compte ! Merci, je vais le corriger.

3voto

Indrek Points 23336

Vous pouvez utiliser le Adresse électronique : pour construire un lien e-mail contenant un corps de message prédéfini, puis l'appeler à partir de la ligne de commande, ce qui devrait l'ouvrir dans votre client e-mail par défaut. Par exemple :

start mailto:?body=Your%20message%20here

Il suffit de personnaliser la pièce après body= à la fin. J'ai lu que le texte doit être URL codée Mais au moins dans Windows Live Mail 2012, cela ne semble pas nécessaire. Je n'ai pas essayé avec des textes plus longs ou des symboles spéciaux, cependant, et je n'ai pas d'autres clients de messagerie (Outlook, Thunderbird, etc.) à tester.

Pour construire cette commande, vous pouvez écrire un simple fichier batch, comme celui qui suit :

@echo off
set /p text=
if "%text%" == "" goto error
start mailto:?body=%text%
goto end
:error
echo No argument provided!
:end

Cependant, comme le texte doit être codé en URL, il est préférable d'utiliser PowerShell. Pour coder une chaîne en URL, vous pouvez utiliser ceci :

[System.Reflection.Assembly]::LoadWithPartialName("System.Web") | out-null
[System.Web.HttpUtility]::UrlEncode("Your message here")

(La première ligne est nécessaire pour charger le System.Web où le HttpUtility.UrlEncode la fonction vit.)

En fait, si votre commande (ou tout ce que vous avez qui produit le texte que vous voulez rediriger) n'est pas trop complexe, vous pouvez simplement écrire la ligne suivante dans PowerShell (en remplaçant <your-command-here> avec la commande que vous utilisez) :

start ("mailto:?body={0}" -f [System.Web.HttpUtility]::UrlEncode(<your-command-here>))

Remarque : ceci suppose que vous souhaitez simplement rediriger le texte vers votre client de messagerie par défaut. Si vous souhaitez réellement envoyer des e-mails à partir de la ligne de commande, consultez la réponse de @allquixotic.

0 votes

C'est génial ! Cela fonctionnerait-il avec des sorties à lignes multiples ? (Peut-être que les nouvelles lignes sont codées en URL... est-ce que chaque ligne est traitée dans des appels différents) ?

1voto

Giuseppe R Points 1325

Voici une solution logicielle possible Sachez toutefois que vous pouvez, en principe, écrire un script de n'importe quelle sorte (Ruby, VBscript, Bash, ou un programme créé de toutes pièces) pour faire quelque chose de similaire. Il y a une variété de façons de le faire, y compris des options de ligne de commande pour les lignes To : et Subject, et ainsi de suite. Mais ce "faux sendmail" pourrait bien faire ce que vous voulez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X