使用Raspbian和Ubunntu 16.04 LTS,因此需要通用的Linux解决方案。
要求很简单:
我需要一种从命令行发送单行电子邮件的方法。
我已经为此特定Rpi3设置了一个Gmail帐户,其地址为rpi3abc@gmail.com-没有2FA
因此,现在我需要能够从任何地方(包括cron)发送单线邮件,而无需用户干预。
我也希望它能够发送文本文件。基本上,来自的任何东西stdin
。
使用Raspbian和Ubunntu 16.04 LTS,因此需要通用的Linux解决方案。
要求很简单:
我需要一种从命令行发送单行电子邮件的方法。
我已经为此特定Rpi3设置了一个Gmail帐户,其地址为rpi3abc@gmail.com-没有2FA
因此,现在我需要能够从任何地方(包括cron)发送单线邮件,而无需用户干预。
我也希望它能够发送文本文件。基本上,来自的任何东西stdin
。
Answers:
通过gmail发送单行消息的最简单答案是使用ssmtp
使用以下命令安装它:
sudo apt-get update
sudo apt-get install ssmtp
编辑/etc/ssmtp/ssmtp.conf
如下所示:
root=rpi3abc@gmail.com
mailhub=smtp.gmail.com:465
FromLineOverride=YES
AuthUser=rpi3abc@gmail.com
AuthPass=testing123
UseTLS=YES
发送这样的单线:
echo "Testing...1...2...3" | ssmtp myusername@gmail.com
要么
printf "Subject: Test\n\nTesting...1...2...3" | ssmtp myusername@gmail.com
然后,对* nix而言,您仅需几秒钟即可得到提示。
检查您的myusername@gmail.com帐户,瞧,就在那里!
发送文件时,这也很好用:
cat program.py | ssmtp myotherusername@yahoo.com
程序将显示在邮箱中
如果文件是文本文件,则可以在第一行显示 Subject: xxxxxx
可以与各种cron作业一起使用,可以向我发送带有主题行的数据以指示内容。
这将与任何准备通过stdin传递到ssmtp的消息一起使用。
有关更多详细信息,例如针对其他用户保护这些文件等,请访问本文:
必要时,还请确保在下面查找Rui
有关通过锁定FROM:
格式化邮件文件中可能更改的地址的答案。
现在,如果我能弄清楚如何以相同的方式发送短信。
ssmtp
我的VM中使用,非常轻巧。+1
sendmail
单独没有MTA-邮件传输代理在机器外进行通信。默认情况下,由于Unixen在设计上是多用户的,因此sendmail
它将在同一框中发送消息给其他用户,但不在外部。 ssmtp
是我认为最容易为gmail配置的MTA。
ssmtp
只是许多Sendmail包装器之一。所有这些都接受标准输入上的消息,并可选地接受地址列表作为命令行参数,并且它们都提供了一个名为Binary的二进制文件sendmail
,该二进制文件实现了传统的Sendmail命令行API(至少具有其基本功能)。但是正确地说,该消息必须是格式正确的RFC822消息。至少,它应该有一个Subject:
标题。
ssmtp address@example.com <<<$'Subject: testing 1...2...3'
(有ssmtp
,sendmail
只是一个符号链接ssmtp
。后缀,进出口,我相信这所有其他MTA Provides: mail-transport-agent
也有类似的安排,当然除了sendmail
在sendmail
二进制是“动真格的”。)
更常见的是,您可以将简单的电子邮件与here文档组合在一起。
/usr/lib/sendmail -oi -t <<____HERE
Subject: testing
To: recipient@example.net
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 elsewhere@example.org
对于除非常简单的纯ASCII文本消息以外的任何内容,您都需要了解如何编写适当的MIME消息,这时通常使用诸如之类的工具更为有意义mutt
。某些平台具有mail
或mailx
,它们知道如何发送附件和非ASCII文本,但这不是完全可移植的。
这里的挑战不是找到可以接收电子邮件并尝试发送电子邮件的客户端,而是针对Gmail的特定配置进行配置,这要求MTA知道用于远程服务器的用户名和密码,以便按顺序进行操作。才能将其用作传出的智能主机。
在幕后,大多数客户(例如mutt
,mailx
等)通常只是sendmail
在幕后运行,以使消息脱离系统。
添加到OP自己的答案:
配置时ssmtp
,您还可能禁止或允许用户定义“发件人”,并覆盖域;您可能出于多种原因想要这样做,包括邮件未落入“垃圾邮件”文件夹。
您可以添加到/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
请注意,虽然可以在家用树莓派中使用“是”,但从安全角度来看,在多用户系统中可能不建议使用。
我使用sendEmail通过外部提供商的SMTP服务器发送简单的自动电子邮件:
sendEmail -q -f "me@mail.com" -u "mySubject" -t "someone@mail.org" -s "my.smtp.com" -o tls=yes -xu "mySmtpUser" -xp "mySmtpPw" -m "myMessage"
我将所有内容都传递给了一行,因此,如果他们ps -ef
在我运行命令的同时运行,那么在命令行上执行此操作可能会向所有用户显示所有参数(包括smtp密码)。我在外壳脚本中使用它。
我的服务器是CEntOS 7,具有sendmail但没有mailx等。不是直接安装使用sendmail测试的新程序,而是发现它可以正常工作:
echo -e "From: you@whatever\nTo: you@gmail.com\nSubject: this is the subject\n\nThis is the body,\nwith multiple lines." | sendmail -t
对我来说,这似乎是发送短电子邮件的最简单方法,因为它不需要运行或配置服务器或守护程序,并且可以在单个命令行中完成。
想法是,一条消息只会警告我某个程序抛出了错误,而没有透露任何潜在的机密信息,然后我将通过SSH到服务器以检查其日志。这样一来,您就不必麻烦附加文件或对传输进行加密等麻烦了。
笔记:
-e
告诉echo解释'\ n'和其他转义符。-t
告诉sendmail从邮件标题中的“收件人:”获取收件人地址。tail /var/log/maillog
来查看错误消息。sendmail