Linux自动发送HTML格式并带附件的邮件(转)
2011-07-29 19:59
1151 查看
Linux自动下发送HTML格式并带附件的邮件
遇到问题:
统计报表实现基本思想,按处理流程顺序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_FILE echo "To: $2" >> $MSG_FILE echo "Subject: $3" >> $MSG_FILE echo "Mime-Version: 1.0" >> $MSG_FILE echo 'Content-Type: multipart/mixed; boundary="GvXjxJ+pjyke8COw"' >> $MSG_FILE echo "Content-Disposition: inline" >> $MSG_FILE echo "" >> $MSG_FILE echo "--GvXjxJ+pjyke8COw" >> $MSG_FILE echo "Content-Type: $4" >> $MSG_FILE echo "Content-Disposition: inline" >> $MSG_FILE echo "" >> $MSG_FILE echo "$5" >> $MSG_FILE echo "" >> $MSG_FILE echo "" >> $MSG_FILE echo "--GvXjxJ+pjyke8COw" >> $MSG_FILE echo "Content-Type: $6" >> $MSG_FILE echo "Content-Transfer-Encoding: base64" >> $MSG_FILE echo "Content-Disposition: attachement; filename=$7" >> $MSG_FILE echo "" >> $MSG_FILE echo "" >> $MSG_FILE ${BIN_PATH}/base64 -e $8 >> $MSG_FILE cat $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下并下载。
相关文章推荐
- Linux自动下发送HTML格式并带附件的邮件
- 用Python实现在Linux环境发送带附件的邮件,支持文本/html格式
- Linux环境下sendmail发送html格式正文及csv格式附件邮件
- 在Linux命令行下发送html格式的邮件
- [linux & python] linux下基于python自动定时发送邮件附件
- 用Java Mail发送带有图片附件的html格式邮件
- php发送邮件 可发html格式邮件 附件
- 使用linux的mail命令发送html格式的邮件
- C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)
- 使用linux的mail命令发送html格式的邮件
- 在Linux命令行下发送html格式的邮件
- [Java] JavaMail 发送 html 格式、带附件的邮件
- C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)
- 介绍使用php发送邮件类(html格式及附件)
- JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件
- python练习--发送html格式邮件且发送附件;
- 如何通过 ASP 来发送带附件、格式为 HTML 的邮件?下面提供了一个例程.
- JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件
- shell sendmail发送带附件的html格式邮件
- Python使用SMTP发送邮件[HTML格式、送带附件]