来自bash脚本的邮件命令在使用uuencode时不发送附件,邮件正文是html文件

时间:2015-03-10 01:24:19

标签: bash email

我编写了一个脚本,在邮件正文中创建一个html表,我想使用mail命令和uuencode发送文件/ zip作为附件,但不知何故它在bash脚本中不起作用,但是从控制台工作。

mailbody="<html><table><th><tr><td>Name</td><td>Age</td></tr></th><tr><td>\
           ABC</td><td>25</td></tr></table></html>"
echo $mailbody>>mailer.txt
#assume i have test.txt or test.zip which i need as attachment in mail
#i tried below with html part as body
uuencode test.txt test.txt|mail -s "Test mail\nContent-Type: text/html" "xyz.com" <mailer.txt

这会发送邮件正文显示html表但附件丢失。

uuencode test.txt test.txt|mail -s "Test mail" "xyz.com"  properly send mail with test.txt as attachment but a plain mail , no html

提前致谢

2 个答案:

答案 0 :(得分:1)

这是一个相当常见的问题,但一般很难回答,因为没有一个标准mail命令。有些人支持你正在尝试的东西;大部分都没有。

看到您遇到麻烦,可能属于不支持MIME的群组,但请查看其手册页以了解有前途的选项。

传统上,电子邮件只是文本,7位US-ASCII,并且没有“附件”这样的东西。早在20世纪80年代和90年代的某个时候,如果你想向某人发送一个文件,你就会在电子邮件的文本中嵌入一块uuencode gobbledygook,并希望收件人知道如何处理它。

输入MIME。现代电子邮件是一种结构化的存在,其中每条消息都有一个或多个MIME部分,每个部分都有内容类型和编码。 “附件”没有很好地定义,但通常情况下,无法以内嵌方式显示的MIME部分会被电子邮件客户端显示为可点击链接。

为了在现代世界中发送带附件的HTML邮件,您需要一个支持MIME的邮件客户端来发送邮件。您的mail看起来不合格。一个常见的解决方法(几乎是常见的事实标准)是安装和使用mutt,但如果你在一个相当现代的平台上,可能会有更轻松的选择。

答案 1 :(得分:1)

USE this :

#!/usr/bin/ksh

export MAILTO="spam@ebay.com"
export SUBJECT="Mail Subject"
export BODY="/tmp/email_body.html"
export ATTACH="/tmp/attachment.txt"
(
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo 'Content-Type: multipart/mixed; boundary="-q1w2e3r4t5"'
 echo
 echo '---q1w2e3r4t5'
 echo "Content-Type: text/html"
 echo "Content-Disposition: inline"
 cat $BODY
 echo '---q1w2e3r4t5'
 echo 'Content-Type: application; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: base64"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 uuencode -m $ATTACH $(basename $ATTACH)
 echo '---q1w2e3r4t5--'
) | /usr/sbin/sendmail $MAILTO