shell - 将 sendmail 用于 HTML 正文和二进制附件

标签 shell unix sendmail ksh uuencode

目标:发送带有 HTML 正文和二进制附件的邮件(使用 sendmail)。

遵循以下链接中指定的准则

http://www.unix.com/shell-programming-scripting/159522-sendmail-html-body-attachment-2.html

http://www.unix.com/shell-programming-scripting/58448-sendmail-attachment.html

它的工作范围是 HTML 正文或带有 uuencode 的二进制附件,但不能同时工作。

下面给出了发送邮件的 shell 脚本片段。有了这个,HTML 正文就可以了,但是附件被错误地编码/解码并且无法查看。

请指教。

#!/usr/bin/ksh

export MAILFROM="noreply@site.dom"
export MAILTO="somebody@somesite.com"
export SUBJECT="Test PDF for Email"
export BODY="email_body.htm"
export ATTACH="file.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
(
 echo "From: $MAILFROM"
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"-$MAILPART\""
 echo "---$MAILPART"
 echo "Content-Type: text/html"
 echo "Content-Disposition: inline"
 cat $BODY
 echo "---$MAILPART"
 echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: base64"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 uuencode -m $ATTACH $(basename $ATTACH)
 echo "---$MAILPART--"
) | /usr/sbin/sendmail $MAILTO

我正在使用 HP-UX ia64。
通过论坛和网络进行搜索,发现主要是对 PHP、Python 等的引用。

最佳答案

将电子邮件中的内容传输编码类型从 base64 更改为 uuencode 解决了该问题。
感谢您到目前为止的投入。

下面给出了有效的修订脚本。

#!/usr/bin/ksh

export MAILFROM="noreply@domain.com"
export MAILTO="mail.to@gmail.com"
export SUBJECT="Test PDF for Email"
export BODY="email_body.htm"
export ATTACH="file.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
export MAILPART_BODY=`uuidgen` ## Generates Unique ID

(
 echo "From: $MAILFROM"
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
 echo ""
 echo "--$MAILPART"
 echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
 echo ""
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/plain; charset=ISO-8859-1"
 echo "You need to enable HTML option for email"
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/html; charset=ISO-8859-1"
 echo "Content-Disposition: inline"
 cat $BODY
 echo "--$MAILPART_BODY--"

 echo "--$MAILPART"
 echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: uuencode"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 echo ""
 #uuencode -m $ATTACH $(basename $ATTACH)
 uuencode $ATTACH $(basename $ATTACH)
 echo "--$MAILPART--"
) > email_`date '+%Y%m%d_%H%M%S'`.out
| /usr/sbin/sendmail $MAILTO

关于shell - 将 sendmail 用于 HTML 正文和二进制附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134857/

相关文章:

bash - 如何将存储在变量上的参数传递给 WGET

javascript - SpiderMonkey js shell 不会碰撞字节码?

objective-c - 在 Objective-C 中更改桌面图片

C# Unix 时间戳

gmail - 强制不将电子邮件分组到对话中

php - 发送电子邮件时更改 HELO 主机名

linux - 文件内容到 Blob 字符串转换

linux - '2>&1' 和 '&>filename' 之间的区别

java - 将 args 传递到可执行 Unix 文件 (MacOS)

php - 使用 Codeigniter 发送电子邮件时出现问题 - 邮件正文中发送的 header