3

Мне известно, что в Windows вы можете использовать следующий фрагмент кода, чтобы перенаправить вывод инструмента командной строки в буфер обмена:

mytool | clip

Также это можно сделать с помощью файлов:

clip < myFile.txt

Я также знаю, что в Windows есть несколько других устройств / программ, которые вы можете использовать в качестве вывода / ввода для этих перенаправлений (вероятно, принтер является самым известным из них).

Однако есть ли что-то, чтобы отправить текст в почтовую программу по умолчанию?

Я хотел бы найти что-то вроде: mytool | email Есть ли что-то похожее?

2 ответа2

3

Вы можете использовать схему URL-адреса mailto , чтобы создать ссылку на электронную почту, содержащую предварительно определенное тело сообщения, а затем вызвать ее из командной строки, которая должна открыться в почтовом клиенте по умолчанию. Например:

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

Просто настройте деталь после body= в конце. Я читал, что текст должен быть закодирован в URL, но, по крайней мере, в Windows Live Mail 2012 это не требуется. Однако я не пробовал использовать более длинные тексты или специальные символы, и у меня нет других почтовых клиентов (Outlook, Thunderbird и т.д.) Для тестирования.

Для построения этой команды вы можете написать простой командный файл, например, такой:

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

Однако, с этим вам нужно, чтобы текст был закодирован в URL, так что вы можете сделать все это в PowerShell. Чтобы URL-кодировать строку, вы можете использовать это:

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

(Первая строка необходима для загрузки System.Web пространство имен, где HttpUtility.UrlEncode живет.)

На самом деле, если ваша команда (или все, что у вас есть, которая производит текст, который вы хотите перенаправить) не слишком сложна, вы можете просто написать следующую однострочную строку в PowerShell (заменив <your-command-here> реальной командой) вы используете):

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

Примечание: это предполагает, что вы просто хотите перенаправить текст в почтовый клиент по умолчанию. Если вы действительно хотите отправлять электронные письма из командной строки, посмотрите на ответ @ allquixotic.

1

Вот возможное программное решение, хотя имейте в виду, что вы можете, в принципе, написать скрипт любого вида (Ruby, VBscript, Bash или программу с нуля), чтобы сделать что-то подобное. Существует множество способов сделать это, в том числе параметры командной строки для строк To: и Subject и т.д. Но этот "фальшивый sendmail" может делать то, что вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .