如何在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多格式邮件。步骤如下:
- 先创建一个临时的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
- 用mailx发送这个临时文件:
mailx -r "$from" -s "$subject" "$to" < temp_mail_content.txt
- 发送完成后记得删除临时文件:
rm temp_mail_content.txt
注意事项:
- 边界字符串要足够独特,比如加上时间戳,避免和邮件正文里的内容重复,否则邮件会解析出错
- 附件的
Content-Type要对应实际文件类型:比如JPG图片是image/jpeg,Excel文件是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,不确定的话可以查一下对应文件的MIME类型 - 如果要加多个附件,就在两个边界之间多复制一段附件的编码内容,每个附件对应一个
--$BOUNDARY开头的部分
内容的提问来源于stack exchange,提问作者user3786549
相关产品推荐
相关产品推荐

