Redirecionando a saída para o email

3

Estou ciente de que, no Windows, você pode usar o seguinte snippet para redirecionar a saída de uma ferramenta de linha de comando para a área de transferência:

mytool | clip

Além disso, isso pode ser feito com arquivos:

clip < myFile.txt

Eu também sei que o Windows tem vários outros dispositivos / programas que você pode usar como saída / entrada para esses redirecionamentos (provavelmente a impressora é a mais famosa deles).

No entanto, há algo para enviar o texto para o programa de e-mail padrão?

Eu adoraria descobrir que há algo como: mytool | email . Existe algo parecido?

    
por Alpha 11.09.2012 / 17:40

2 respostas

3

Você pode usar o esquema de URL mailto para criar um link de email contendo um corpo de mensagem predefinido e, em seguida, chamá-lo do linha de comando, que deve abri-lo no seu cliente de e-mail padrão. Por exemplo:

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

Basta personalizar a peça após body= no final. Eu li que o texto precisa ser codificado por URL , mas pelo menos no Windows Live Mail 2012 que não parece ser necessário. Eu não tentei com textos mais longos ou símbolos especiais, e eu não tenho nenhum outro cliente de e-mail (Outlook, Thunderbird, etc.) para testar.

Para construir esse comando, você pode escrever um arquivo em lote simples, como o seguinte:

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

No entanto, com isso você precisa que o texto seja codificado por URL, portanto, talvez você queira fazer a coisa toda no PowerShell. Para codificar por URL uma string, você pode usar isto:

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

(A primeira linha é necessária para carregar o namespace System.Web no qual a função HttpUtility.UrlEncode reside.)

De fato, se o seu comando (ou o que você tiver produzido o texto que você deseja redirecionar) não for muito complexo, você pode escrever o seguinte caractere no PowerShell (substituindo <your-command-here> pelo comando real está usando):

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

Nota: isso pressupõe que você queira apenas redirecionar o texto para o seu cliente de e-mail padrão. Se você quiser realmente enviar e-mails a partir da linha de comando, veja a resposta do @ allquixotic.

    
por 11.09.2012 / 18:34
1

Aqui está uma possível solução de software embora esteja ciente de que você pode, em princípio, escrever um script de qualquer tipo (Ruby , VBscript, Bash ou um programa do zero) para fazer algo semelhante. Há várias maneiras de fazer isso, incluindo opções de linha de comando para as linhas Para: e Assunto, e assim por diante. Mas esse "sendmail falso" só pode fazer o que você quiser.

    
por 11.09.2012 / 18:16