我知道在 Windows 中您可以使用以下代码片段将命令行工具的输出重定向到剪贴板:
mytool | clip
也可以通过文件来完成:
clip < myFile.txt
我还知道 Windows 还有其他几个设备/程序可以用作这些重定向的输出/输入(可能打印机是其中最著名的)。
但是,有没有什么方法可以将文本发送到默认的电子邮件程序呢?
我很想找到类似的东西:mytool | email
。有类似的东西吗?
答案1
您可以使用邮箱URL 方案构建包含预定义邮件正文的电子邮件链接,然后从命令行调用它,该命令行应在默认电子邮件客户端中打开它。例如:
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 的答案。
答案2
这是一个可能的软件解决方案不过请注意,原则上您可以编写任何类型的脚本(Ruby、VBscript、Bash 或从头开始编写的程序)来执行类似操作。您可以使用多种方法来执行此操作,包括为 To: 和主题行设置命令行选项等等。但那个“假 sendmail”可能正好能满足您的要求。