Linux服务器Bash脚本邮件:添加附件及含时间的自定义正文方法
解决方案:在Bash脚本中独立控制邮件正文与附件
核心思路很简单:Perl脚本只负责输出.bin文件,我们不需要碰它,只需要修改Bash里的邮件发送逻辑,自己拼接自定义消息和当前时间作为邮件正文,再带上附件发送。
方法1:用系统自带的mailx(或mail)命令
大多数Linux发行版默认预装了mailx(部分系统叫mail),这是最省事的方案:
- 先在Bash脚本里定义自定义消息和获取当前时间:
# 自定义消息,你可以随便改内容 CUSTOM_MESSAGE="您好,这是本次任务生成的二进制结果文件,请查收。" # 获取格式化的当前时间(格式可以自己调整,比如改成%Y/%m/%d %H:%M) CURRENT_DATE=$(date "+%Y-%m-%d %H:%M:%S")
- 调用Perl脚本生成.bin文件(保持你原来的命令不变):
# 假设Perl脚本直接把输出写入output.bin,或者你可以把stdout重定向到文件 ./your_perl_script.pl > output.bin
- 拼接正文并发送邮件:
# 用echo -e解析换行符,让正文排版更清晰 echo -e "${CUSTOM_MESSAGE}\n\n文件生成时间:${CURRENT_DATE}" | mailx -s "任务结果通知" -a output.bin 收件人邮箱@xxx.com
注意事项
- 有些系统的
mail命令参数略有不同,比如如果-a不生效,可以试试把附件放在收件人后面:mailx -s "主题" 收件人邮箱@xxx.com -a output.bin - 如果需要抄送,可以加
-c 抄送邮箱@xxx.com参数
方法2:用功能更强的mutt命令
如果你的服务器装了mutt(没装的话用apt install mutt或yum install mutt安装),它的邮件格式控制更灵活:
# 同样定义变量 CUSTOM_MESSAGE="您好,这是本次任务生成的二进制结果文件,请查收。" CURRENT_DATE=$(date "+%Y-%m-%d %H:%M:%S") # 生成.bin文件 ./your_perl_script.pl > output.bin # 发送邮件,注意--是用来分隔附件和收件人的,避免邮箱地址被识别成附件 echo -e "${CUSTOM_MESSAGE}\n\n文件生成时间:${CURRENT_DATE}" | mutt -s "任务结果通知" -a output.bin -- 收件人邮箱@xxx.com
为什么不需要修改Perl脚本?
因为Perl的职责只是生成你需要的.bin文件,邮件的内容(正文、主题、附件关联)完全是Bash脚本的工作——你只需要让Bash先调用Perl拿到文件,再自己构造邮件的所有其他部分就行,两者完全独立,不需要碰Perl的代码。
内容的提问来源于stack exchange,提问作者Dattaraya Honrao
相关产品推荐
相关产品推荐

