【问题标题】:mail command from bash script not sending attachment when using uuencode , mail body is html file使用 uuencode 时来自 bash 脚本的邮件命令不发送附件,邮件正文是 html 文件
【发布时间】:2015-05-11 08:35:37
【问题描述】:

我编写了一个在邮件正文中创建 html 表的脚本,我想使用邮件命令和 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

提前致谢

【问题讨论】:

标签: bash email


【解决方案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

【讨论】:

    【解决方案2】:

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

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

    传统上,电子邮件只是文本,7 位 US-ASCII,并且没有“附件”之类的东西。早在 1980 年代和 1990 年代的某个时候,如果您想向某人发送文件,您会将uuencode gobbledygook 嵌入到电子邮件的文本中,并希望收件人知道如何处理它。

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

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

    【讨论】:

    • 我将行改为 (cat mailer.txt;uuencode test.gz test.gz) | mail -s "$subject""$(echo -e "\nContent-Type: text/html\n Content-Encoding: gzip")" ${myToAddr} 所以它在正文和附件中发送 html 表,但附件已损坏 i有我可以使用的 mutt,我尝试了 mutt -s "subject Content-Type: text/html" -a test.gz xyz.com 但似乎需要修复 mime 类型以迎合 html 和 gz
    • 使用一个根本不知道 MIME 的邮件客户端来尝试发送 MIME 消息(并且对某些部分猜错)根本行不通。看看当你确实让它工作时你设法完成了什么会很有趣,但可持续的解决方案是切换到正确的 MIME 感知工具。 uuencode 不是 MIME 并且声称它是(通过放入 MIME 标头来声称它是有效的 MIME gzip 数据)根本行不通。
    • (嗯,事实上,Content-Encoding: 实际上也不是一个有效的 MIME 标头名称。)
    • 如果您真的想完全手工完成,stackoverflow.com/a/902628/874188 基本上会告诉您如何操作。您将第一个内联部分的内容类型更改为 text/html 而不是 text/plain 并将您的 HTML 放在正文部分,其中链接的示例有“此电子邮件已附加文件”。
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2017-11-01
    • 2015-03-27
    • 2018-11-07
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多