使用 Raspbian 和 Ubunntu 16.04 LTS,因此需要一个通用的 Linux 解决方案。
要求很简单:
我需要一种从命令行发送单行电子邮件的方法。
我专门为这个特定的 Rpi3 设置了一个 gmail 帐户,地址为[电子邮件受保护]- 没有 2FA
所以现在我需要能够从任何地方(包括 cron)发送一行邮件消息,而无需用户干预。
我还希望它能够发送文本文件;基本上,任何来自stdin
.
答案1
通过 gmail 发送单行消息的最简单答案是使用 ssmtp
使用以下命令安装它:
sudo apt-get update
sudo apt-get install ssmtp
编辑/etc/ssmtp/ssmtp.conf
看起来像这样:
[email protected]
mailhub=smtp.gmail.com:465
FromLineOverride=YES
[email protected]
AuthPass=testing123
UseTLS=YES
发送这样一行行:
echo "Testing...1...2...3" | ssmtp [email protected]
或者
printf "Subject: Test\n\nTesting...1...2...3" | ssmtp [email protected]
然后,正如*nix 所说,您只需在几秒钟内得到提示即可。
检查你的[电子邮件受保护]帐户,瞧,它就在那里!
这在发送文件时也很有效,如下所示:
cat program.py | ssmtp [email protected]
并且该程序将显示在邮箱中
如果文件是文本文件,则它的第一行可以显示Subject: xxxxxx
这可以与各种 cron 作业一起使用,可以向我发送带有指示内容的主题行的数据。
这适用于准备通过 stdin 通过管道传输到 ssmtp 的消息的任何内容。
有关更多详细信息,例如保护这些文件免受其他用户的攻击等,请访问本文:
如有必要,请务必查看下面Rui
关于锁定FROM:
格式化消息文件中可能更改的地址发布的答案。
现在如果我能弄清楚如何以同样的方式发送短信就好了。
答案2
ssmtp
只是众多 Sendmail 包装器之一。所有这些都接受标准输入上的消息,以及可选的地址列表作为命令行参数,并且它们都提供一个名为的二进制文件,sendmail
该二进制文件实现了传统 Sendmail 命令行 API(至少是其基本功能)。但正确地说,该消息需要是格式正确的 RFC822 消息。至少,它应该有一个Subject:
标题。
ssmtp [email protected] <<<$'Subject: testing 1...2...3'
(与ssmtp
,sendmail
只是到ssmtp
.Postfix、Exim 的符号链接,我相信其他所有 MTAProvides: mail-transport-agent
都有类似的安排,当然除了二进制sendmail
文件sendmail
是“真实的东西”之外。)
更常见的是,您可以将简单的电子邮件与此处的文档拼凑在一起。
/usr/lib/sendmail -oi -t <<____HERE
Subject: testing
To: [email protected]
Here we interpolate the shell variable $result
____HERE
(Sendmail-t
选项表示从标准输入上收到的邮件标头中获取收件人列表。Sendmail 的精确路径因平台而异。)
另一种常见的变化是组合几个命令的输出。请注意标头和消息正文之间有一个空行(“颈部”)。
( printf "Subject: random number\n\n"
dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -D -An ) |
sendmail [email protected]
对于除了非常简单的 ASCII 纯文本消息之外的任何内容,您需要了解如何编写正确的 MIME 消息,此时使用mutt
.某些平台有mail
或mailx
知道如何发送附件和非 ASCII 文本,但这并不完全可移植。
这里的挑战不是找到一个可以接收电子邮件并尝试发送它的客户端,而是针对 Gmail 的具体情况对其进行配置,这要求 MTA 知道用于远程服务器的用户名和密码,以便能够将其用作传出智能主机。
在幕后,大多数客户端(如mutt
、mailx
等)通常只是sendmail
在幕后运行以从系统中获取消息。
答案3
添加到OP自己的答案:
配置时ssmtp
,您还可以禁止或允许用户定义From,也可以覆盖域;您可能出于多种原因想要这样做,包括邮件未落入垃圾邮件文件夹。
您可以添加到/etc/ssmtp/ssmtp.conf
:
# Where will the mail seem to come from?
rewriteDomain=my_internet_domain.uk
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
请注意,虽然 YES 可以在家庭树莓派中使用,但从安全角度来看,在多用户系统中可能不建议使用 YES。
答案4
“邮件”有什么问题?
回声“你好”| mail -s“重要邮件”[电子邮件受保护]
“mail”是 bsd-mailx 包中到 /usr/bin/bsd-mailx 的 /etc/alternate 链接。我相信它默认就在那里。例如,从 cron 脚本发送邮件的实用程序。
也适用于 Ubuntu 和 FreeBSD。