使用uuencode与mailx发送Gmail时附件显示noname的问题求助
问题分析与解决方案
脚本中的问题
- 存在无效的
Command行,会直接导致脚本执行失败。 - 使用
(uuencode $TEMP_FILE2 $TEMP_FILE2 ; cat "$TEMP_FILE3")的方式拼接输出给mailx时,mailx会将所有内容视为纯文本邮件体。邮件客户端解析时,除了识别出uuencode编码的附件外,还会把正文部分或格式异常的内容误判为额外附件,从而生成noname文件。
解决方案一:使用mailx的-a选项直接添加附件(推荐)
大部分现代mailx版本支持-a选项直接添加附件,这种方式更简洁且不会产生多余附件:
#!/bin/sh TEMP_FILE1=my_file.csv TEMP_FILE2=my_file.csv.zip TEMP_FILE3=text_body.txt # 切换目标目录,失败则直接退出脚本 cd /part_file || exit 1 # 加密压缩文件 zip -P passw0rd "$TEMP_FILE2" "$TEMP_FILE1" to="myemail@gmail.com" # -a 指定附件,< 导入正文文件内容作为邮件正文 mailx -s 'Subject' -r "myemail@gmail.com" -a "$TEMP_FILE2" "$to" < "$TEMP_FILE3"
解决方案二:兼容老版本mailx的uuencode正确用法
如果你的mailx不支持-a选项,可调整输出顺序并添加分隔符,确保客户端正确识别正文和附件:
#!/bin/sh TEMP_FILE1=my_file.csv TEMP_FILE2=my_file.csv.zip TEMP_FILE3=text_body.txt # 删除无效的Command行 cd /part_file || exit 1 zip -P passw0rd "$TEMP_FILE2" "$TEMP_FILE1" to="myemail@gmail.com" # 先输出正文,加空行分隔后再输出uuencode附件内容 ( cat "$TEMP_FILE3"; echo; echo; uuencode "$TEMP_FILE2" "$TEMP_FILE2" ) | mailx -s 'Subject' -r "myemail@gmail.com" "$to"
额外注意事项
- 所有变量用双引号包裹(如
"$TEMP_FILE2"),避免文件名包含空格时出现错误。 - 添加
|| exit 1到cd命令后,防止目录切换失败后继续执行后续命令导致无效操作。
内容的提问来源于stack exchange,提问作者Blake
相关产品推荐
相关产品推荐

