使用 gmail 通过命令行发送单行邮件的最简单方法?

使用 gmail 通过命令行发送单行邮件的最简单方法?

使用 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 的消息的任何内容。


有关更多详细信息,例如保护这些文件免受其他用户的攻击等,请访问本文:

从 Raspberry Pi 命令行发送电子邮件


如有必要,请务必查看下面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.某些平台有mailmailx知道如何发送附件和非 ASCII 文本,但这并不完全可移植。

这里的挑战不是找到一个可以接收电子邮件并尝试发送它的客户端,而是针对 Gmail 的具体情况对其进行配置,这要求 MTA 知道用于远程服务器的用户名和密码,以便能够将其用作传出智能主机。

在幕后,大多数客户端(如muttmailx等)通常只是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。

相关内容