试图通过groovy shell脚本发送电子邮件

时间:2013-12-23 21:01:44

标签: email groovy

今天我试图用一个groovy脚本替换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"

到目前为止一切顺利。谷歌帮我把它变成了

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

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

知道如何解决这个问题吗?

PS:不,我不想使用java代码发送邮件,因为我猜代码会更复杂。但是如果你有一个java one-liner,欢迎你...

2 个答案:

答案 0 :(得分:1)

您必须处理将进程的输出写入文件...

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) }

答案 1 :(得分:1)

找到另一个对我来说更容易的解决方案,但我想它并不像@chrixian提供的那样干净:

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

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

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