将输出重定向至电子邮件

将输出重定向至电子邮件

我知道在 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”可能正好能满足您的要求。

相关内容