我尝试使用Bash和ssmtp
发送电子邮件。我已经从/var/log/auth.log
文件中收集了登录数据并生成了电子邮件内容。但是,当我尝试发送电子邮件时,变量没有被发送。
下面是我使用的脚本:
#!/bin/bash
# Gather login data
login_data=$(journalctl -u dropbear.service | grep "Password")
# Generate email content
email_content="Login Data:\n${login_data}"
# Send email using ssmtp
sync
ssmtp -m no[email protected] < <(echo "${email_content}")
字符串
我试过使用flush
命令代替sync
命令,但没有区别。我也试过使用wait
命令等待ssmtp
命令退出后再退出脚本,但也没有区别。
我还尝试过使用mail命令代替ssmtp命令,它可以正常工作
echo "${email_content}" | mail -s "hey" "[email protected]"
型
我很高兴它能与邮件一起工作,但我想更好地理解ssmtp命令,我读的更可靠
我在Stack Overflow上发现了一个类似的问题,但解决方案并不相关:ssmtp cannot email my bash variable received from python subprocess
操作系统:dietpi
详细信息:
- 使用ssmtp的消息完全是空的,甚至连“登录数据”的标签都没有
- 回显
\n
不会生成新行。使用mail命令发送的邮件将更改为\n
行 - 在顶部使用
set -x
输出:
Nov 07 19:48:18 DietPi dropbear[15323]: [15323] Nov 07 19:48:18 Password auth succeeded for '\''root'\'' from ip:12342
Nov 07 22:56:28 DietPi dropbear[18942]: [18942] Nov 07 22:56:28 Password auth succeeded for '\''root'\'' from from ip:12342
Nov 08 10:59:19 DietPi dropbear[24025]: [24025] Nov 08 10:59:19 Password auth succeeded for '\''root'\'' from from ip:12342
Nov 08 19:14:44 DietPi dropbear[30112]: [30112] Nov 08 19:14:44 Password auth succeeded for '\''root'\'' from from ip:12342
型
- 该脚本在bash中运行。版本:5.2.15(1)-release
echo -e
不会进行更改。
我认为问题出在sstmp命令上。邮件功能在相同的echo
命令下运行良好
echo "$failed_login" | mail -s "failed" "[email protected]"
型
不带变量的ssmtp发送文本:
echo "login_data" | ssmtp - m [email protected]
型
2条答案
按热度按时间k7fdbhmy1#
ssmtp
的输入应该是一个格式良好的RFC 5322消息,而不是一些随机的字符串数据。试试这个:字符串
将输出收集到一个字符串变量中,以便您可以立即将其插入一次,这只是浪费内存;这里有一种更有效的方法。
型
一般来说,如果可以避免的话,你不想把电子邮件消息从一段一段的字符串拼凑在一起;有许多角落的情况下,你需要深入了解相关的RFC和MIME标准等。
sync
与此无关;它(需要root权限)将任何挂起的磁盘写入写入到您的硬盘驱动器。另外,字符串中的
\n
只是\n
;但例如printf
解释了这个和其他一些转义码。Bash也有$'C-style strings\nwhere\tthis\a works'
和echo -e
(但可能更喜欢printf
,它更易于移植,也更优雅和通用)。jaql4c8m2#
您发布的脚本中的问题似乎与您尝试使用
ssmtp
发送电子邮件的方式有关。ssmtp
命令需要接收收件人电子邮件的命令行参数,或者从邮件正文的标准输入(stdin)读取。以下是您可以如何纠正它的方法:字符串
确保将
[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
替换为实际收件人的电子邮件地址。echo
的-e
选项允许对新行进行反斜杠转义(如\n
)。Subject:
行将直接添加到电子邮件内容中,以指定发送电子邮件时的主题。让我知道这是否有帮助,或者我是否可以回答有关此的任何其他问题!