管道卷曲输出到电子邮件

时间:2012-12-14 21:36:52

标签: bash curl

我想将curl命令的输出传递给电子邮件,但是当我运行此脚本时,我收到一个空的附件文件:

#!/bin/bash

STATUS=$(curl -I example.com)

echo $STATUS | mail -s "Test" an@email.com

我也试图分组到一个区块,但这也不起作用:

#!/bin/bash    
{
curl -I example.com
} | mail -s "Test" an@email.com

操作系统:Red Hat 6.3

# mail -V
12.4 7/29/08

2 个答案:

答案 0 :(得分:2)

假设您的邮件二进制文件为this one,请尝试添加选项-a -

答案 1 :(得分:1)

编辑:

尝试简单

curl -SIo /dev/stdout example.com 2>/dev/null | mail -s "Test" an@email.com

好吧,如果是邮件问题。您的描述看起来很奇怪,您使用的是哪个版本的邮件?

或者可能直接询问sendmail

/usr/sbin/sendmail an@email.com < <(
    echo $'From: an@email.com\nTo: an@email.com\nDate: '$(
        env LANG=C date +%c)$'\nSubject: Test'
    echo
    curl -SIo /dev/stdout 2>/dev/null example.com)

你甚至可以建立一些更复杂的工作:

MyVar="$(curl -SIo /dev/stdout 2>/dev/null example.com)"
/usr/sbin/sendmail an@email.com < <(
    echo $'From: an@email.com\nTo: an@email.com\nDate: '$(
        env LANG=C date +%c)$'\nSubject: Server resp: '${MyVar%%$'\r'*}
    echo
    echo "$MyVar")

因此,您可以在主题中获得初始服务器响应。

这不是保留 sendmail功能!

我多年来一直在使用这种方法,首先是在sendmail下,但这项工作使用相同的语法(即直接调用../sbin/sendmail二进制文件或包装器,一个格式化的邮件,如标题+空行+正文),所有 MTA 我现在用过(sendmail,qmail,postfix,exim)。

Nota 某些(旧的)MTA会抱怨 CR \r的存在(或不存在),可能是某些{{1}可以帮忙。