You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HP UX Shell脚本中发送带HTML内容及附件的邮件?

在mailx HTML邮件中添加附件的方法

嘿,我来帮你搞定给现有的mailx HTML邮件加附件的问题!其实mailx处理附件分两种情况,取决于你用的mailx版本,我都给你列出来:

方法一:如果你的mailx支持-a参数(推荐)

很多现代Linux发行版里的mailx(比如Heirloom mailx)已经内置了附件支持,直接用-a参数就能搞定,不用复杂的MIME构造。把你原来的命令改成这样就行:

mailx -m -r "$from" -s "$subject" -a "/path/to/your/attachment.pdf" -- "$to" < "$message"

参数说明:

  • -a "/path/to/your/attachment.pdf":指定要添加的附件路径,多个附件的话就加多个-a参数,比如-a file1.pdf -a file2.jpg
  • --:用来分隔收件人列表和附件参数,防止收件人邮箱里的特殊字符干扰命令解析
  • -m:保持你原来的HTML邮件设置,这个参数会自动把邮件内容标记为text/html类型,所以原来命令里的Content-type: text/html其实可以去掉啦

方法二:旧版mailx(不支持-a)的手动MIME构造

如果你的mailx版本比较老(比如BSD mailx),不支持-a参数,那就要手动构造MIME多格式邮件。步骤如下:

  1. 先创建一个临时的MIME邮件内容文件,把HTML正文和附件都封装进去:
# 自定义一个唯一的边界字符串,别和邮件内容里的内容重复就行
BOUNDARY="MY-MAIL-BOUNDARY-$(date +%s)"

cat << EOF > temp_mail_content.txt
From: $from
To: $to
Subject: $subject
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="$BOUNDARY"

--$BOUNDARY
Content-Type: text/html; charset="UTF-8"

# 这里插入你的HTML邮件内容
$(cat "$message")

--$BOUNDARY
Content-Type: application/pdf; name="attachment.pdf"  # 替换成你附件的实际MIME类型
Content-Disposition: attachment; filename="attachment.pdf"  # 收件人看到的附件文件名
Content-Transfer-Encoding: base64

# 用base64编码附件内容(二进制文件必须编码)
$(base64 "/path/to/your/attachment.pdf")

--$BOUNDARY--
EOF
  1. 用mailx发送这个临时文件:
mailx -r "$from" -s "$subject" "$to" < temp_mail_content.txt
  1. 发送完成后记得删除临时文件:
rm temp_mail_content.txt

注意事项:

  • 边界字符串要足够独特,比如加上时间戳,避免和邮件正文里的内容重复,否则邮件会解析出错
  • 附件的Content-Type要对应实际文件类型:比如JPG图片是image/jpeg,Excel文件是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,不确定的话可以查一下对应文件的MIME类型
  • 如果要加多个附件,就在两个边界之间多复制一段附件的编码内容,每个附件对应一个--$BOUNDARY开头的部分

内容的提问来源于stack exchange,提问作者user3786549

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:36:59