引:

进入BEIDOU组的第一个项目就是实现一个统计报表自动发送邮件的应用,利用Shell脚本来做,期间回顾了awk,sed等文本过滤工具,crontab计划任务,还学会了在Linux下发送HTML邮件附带MS WORD/EXCEL/PPT格式附件的方法,在春节前圆满的完成了任务也算是可以踏踏实实过年了,活虽然小但毕竟可以算作一个小Milestone 

遇到问题:

统计报表实现基本思想,按处理流程顺序
1) 利用scp下载远程线上机器的Log日志文件  
2) 利用awk,sed,sort等Linux下命令过滤并且分析日志,生成基本的模板(template)文本。
3) 根据该模板(template)文本统计信息生成HTML格式的邮件正文。
4) 根据该模板(template)文本统计信息生成CVS、TXT、XLS格式的统计信息作为邮件附件。
5) 利用sendmail或者mutt命令发送邮件。
6) 利用crontab计划任务定时发送日报、周报、月报。
问题就出现在步骤5)。开始我尝试利用mutt来实现发送HTML格式正文邮件并且附带附件:
mutt -e "my_hdr content-type:text/html" -s "邮件标题" -a 附件.xls receiver@123.com < mail.html
用outlook做客户端接收邮件,发现附件丢失了,变成了正文里的乱码,如果不加-e "my_hdr content-type:text/html"参数,附件成功又不能显示HTML格式邮件,期间google了各种mutt相关问题官方FAQ都无从知晓为什么,现在看来既有可能是mutt版本没有升级到1.5的一个bug,但自己不是admin也没法装最新版本的mutt,最终选择放弃使用mutt。

解决方法:

编写以下两个函数,其中sendmail()函数配好参数,就可以直接调用了。这样就可以发送带多媒体附件的HTML格式正文的邮件了。在此感谢@lingbing同学的帮助。
#发送多媒体附件的HTML格式正文的函数 (多媒体附件指非txt或者cvs格式的文件,例如excel的xls)
#$1: mail_from
#$2: mail_to
#$3: subject
#$4: content mimetype, such as "text/plain"
#$5: content
#$6: attach mimetype, such as "text/csv"
#$7: attach display name
#$8: attach file path
function SendMailMultiMediaAttach(){local MSG_FILE="/tmp/mail.tmp"echo "From: $1" > $MSG_FILEecho "To: $2" >> $MSG_FILEecho "Subject: $3" >> $MSG_FILEecho "Mime-Version: 1.0" >> $MSG_FILEecho 'Content-Type: multipart/mixed; boundary="GvXjxJ+pjyke8COw"' >> $MSG_FILEecho "Content-Disposition: inline" >> $MSG_FILEecho "" >> $MSG_FILEecho "--GvXjxJ+pjyke8COw" >> $MSG_FILEecho "Content-Type: $4" >> $MSG_FILEecho "Content-Disposition: inline" >> $MSG_FILEecho "" >> $MSG_FILEecho "$5" >> $MSG_FILEecho "" >> $MSG_FILEecho "" >> $MSG_FILEecho "--GvXjxJ+pjyke8COw" >> $MSG_FILEecho "Content-Type: $6" >> $MSG_FILEecho "Content-Transfer-Encoding: base64" >> $MSG_FILEecho "Content-Disposition: attachement; filename=$7" >> $MSG_FILEecho "" >> $MSG_FILEecho "" >> $MSG_FILE${BIN_PATH}/base64 -e $8 >> $MSG_FILEcat $MSG_FILE | /usr/lib/sendmail -t
}##! @TODO: 发送邮件
##! @AUTHOR: zhangxu
##! @VERSION: 1.0
##! @IN:
##! @OUT:
function sendMail()
{echo "Sending $Subject mail from $From to $To"from="from@123.com"to="receiver@123.com"subject="${Subject}"content_type="text/html"body=`cat $MAIL_HTML`attach_type="application/vnd.ms-excel"attach_name="${file_title}.xls"attach_path="${TEMP_DIR}/${file_title}.xls"SendMailMultiMediaAttach "$from" "$to" "$subject" "$content_type" "$body" "$attach_type" "$attach_name" "$attach_path"echo "Send mail done."
}
要注意以下几点:
1) 多媒体文件对应的格式可以从下面的链接参考,用于替换参数$6的mimetype。http://www.w3schools.com/media/media_mimeref.asp
2) 如何判断自己的附件是不是纯文本的呢?Windows下如果可以用notepad记事本打开,或者Linux下可以用cat显示正常的都是可以用text/plain的MIME TYPE的,其他的一律需要用1)中提到的对应的编码格式,还要保证又base64编码再发送出去,邮件客户端或者接受者可以base64解码还原。这就是之所以Content-Transfer-Encoding: base64用base64并且要用base64 -e <文件名>编码的原因,base64命令可以Google下并下载。
附:曾经帮助启发过我的链接
http://www.linuxquestions.org/questions/linux-software-2/send-excel-attachment-using-sendmail-233688/

Linux自动下发送HTML格式并带附件的邮件相关推荐

  1. python-使用python实现发普通邮件和带附件的邮件

    下面是发普通邮件的代码: import smtplib from email.mime.text import MIMEText from email.header import Header #引入 ...

  2. Python 发送带附件的邮件 发出去的附件格式就成bin

    导语:学习到使用Python发送带附件的邮件,但收件人收到的附件格式是bin,附件名称也不是filename写的名称. 1.效果如下: 2.解决办法: 将 att1['Content-Disposit ...

  3. linux自己的软件在安装的时候如何创建快捷方式,在Deepin Linux系统下给AppImage格式软件创建快捷方式的方法...

    如果你想在深度Deepin Linux操作系统下给AppImage格式软件创建快捷方式,那就按以下说明处理,附脚本的方法,同样适用于其他的Linux发行版. 前言 最近下载了一个FreeCAD的软件, ...

  4. SpringBoot中整合Mail实现发送带附件的邮件

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/35688 实现最简单的带标题以及文本内容的邮件发送: https:/ ...

  5. python自动发邮件附件_python自动发送带附件的邮件(163邮箱,亲测可用)

    1.设置发送邮件邮箱的SMTP服务 https://www.360kuai.com/pc/927b9f8da3555bb70?cota=4&kuai_so=1&tj_url=xz&am ...

  6. 利用Jmail发送带附件的邮件时乱码的解决方案

    今天在利用Jmail发送带附件的邮件时,一直收不到附件,而是得到一些"乱码"如下:This is a multipart message in MIME format. ----N ...

  7. 用simple mapi 发送一个带附件的邮件

    使用 MAPI 实现邮件发送 原 作:deltacat,修改中 最后更新:2004.09.16 版权声明:随意转载,敬请保持文档及说明完整性 关键字: VC 邮件发送 MAPI 一.简述 实际上,本文 ...

  8. 用javamail发送带附件的邮件

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  9. php邮箱文件发送源码,php简单实现发送带附件的邮件

    本文实例讲述了php简单实现发送带附件的邮件.分享给大家供大家参考.具体如下: 下面是静态html代码: 带附件的邮件发送 发送人: 收件人: 邮件主题: 邮件内容: 附件上传: sendmail.p ...

最新文章

  1. 剑指offer:面试题33. 二叉搜索树的后序遍历序列
  2. linux下打印机共享及监控
  3. 阶段-关口系统-stage2立项分析阶段---学习记录
  4. 【网络安全员】需要了解的一项攻击技术-高隐匿、高持久化威胁
  5. linux 安装软件的几种方法
  6. 一致性hash算法_(图文案例)一致性哈希算法详解 一点课堂(多岸教育)
  7. 最新自然指数出炉,哪些高校表现突出?
  8. 3倍根号x加1分之一c语言,用C语言将一个数开根号后再取倒数的方法
  9. fastjson android 版本,fastjson 1.1.58.android 发布,Bug 修复版本
  10. 刚刚,百度宣布王海峰升任 CTO
  11. Java Graphics2D 在图片上画(微信昵称)含有特殊符号(Emoji)的文字
  12. 测试电池耗电快的软件,笔记本耗电过快?Win10自带电池检测了解下
  13. SI4463模块技术研究(结束)
  14. 如何在WORD中插入图片自动编号,并引用图号【每天一个小技巧】
  15. matlab来解决城市设计,Matlab的实际应用设计(经典).doc
  16. 2022中山大学计算机考研专硕初试经验分享
  17. c++primer plus 第六版 第六章重点内容总结 以及编程题答案
  18. 从大厂离职后,AI 大神们选择加入 AI 初创公司
  19. ubi 详解 以及jffs2 squash fs ubifs
  20. [u(x)v(x)]的n阶导数,莱布尼兹公式,利用python简化

热门文章

  1. yolov5 调用 usb 摄像头
  2. html模式是什么意思,html-什么是怪癖模式?
  3. 且行且走(8月18,19日)
  4. C语言——教务管理系统
  5. 我在b站过考试周:计算机类期末救急网课汇总
  6. 实训项目 数字迷宫小游戏
  7. CryEngine CGF模型文件格式解析
  8. 大数据风控---机器学习在个人征信判别上的应用
  9. 新版本Wireshark导出视频流
  10. 分时问候(Java实现)