繁体   English   中英

尝试通过Groovy Shell脚本发送电子邮件

[英]Trying to send an email through a groovy shell script

今天,我试图用普通的脚本替换bash脚本。 一切运行顺利,我设法使用execute()命令调用其他命令。

然后,我试图发送包含主题的电子邮件:

mail -s "this is a test" my.mail@example.com < mail.tmp

转换成

'mail -s "this is a test" my.mail@example.com < mail.tmp'.execute()

这是行不通的,因为groovy会将一个参数"this is a test"拆分为四个参数"this is a test"

到现在为止还挺好。 Google帮我把它变成了

['mail', '-s', "this is a test", 'my.mail@example.com', '<', 'mail.tmp'].execute()

现在,主题被识别为一个参数,但是<也被识别为参数,而不是文件重定向。

知道我该如何解决吗?

PS:不,我不希望使用Java代码发送邮件,因为我认为代码会更复杂。 但是,如果您有Java一线客,欢迎您...

您将不得不处理将流程的输出写入文件...

new File('mail.tmp').withWriter { it << """mail -s "this is a test" my.mail@example.com""".execute().getText() }

我仅在上面使用“ ls -al”作为命令进行了测试,它是否按预期工作,我不确定是否需要更长的运行进程来调整您的处理方式,如果可能,则可能需要使用waitForProcessOutput :

new File('mail.tmp').withWriter { """mail -s "this is a test" my.mail@example.com""".execute().waitForProcessOutput(it, it) }

找到了另一种对我来说看起来更容易的解决方案,但我想它不如@chrixian提供的解决方案那么干净:

['sh','-c','mail -s "this is a test" my.mail@example.com < mail.tmp'].execute()

该命令创建另一个外壳程序以执行mail命令。 这样,shell会解释'mail -s "this is a test" my.mail@example.com < mail.tmp' ,它知道如何正确处理参数和<符号。

缺点:它适用于* nix系统。 对于Windows系统,shell以不同的方式执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM