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

使用Curl发送带附件邮件报错:非法格式的content-type字段

Curl发送带附件邮件报错的排查与解决

错误信息

Warning: Illegally formatted content-type field!
curl: option --form: is badly used here
curl: try 'curl --help' or 'curl --manual' for more information

问题根源

curl的SMTP传输模式不支持--form选项,该选项仅用于HTTP协议的表单提交操作。你试图用它构造MIME多部分邮件内容,这完全不符合curl SMTP模式的使用逻辑,因此触发错误。

另外,你的MIME类型获取代码存在变量展开问题:file --mime-type '$ATTACHMENT_FILE'中的单引号会阻止变量$ATTACHMENT_FILE被解析,导致无法正确获取附件的MIME类型。

修复方案

改用手动构造完整的MIME多部分邮件内容,并通过标准输入传递给curl。以下是修正后的完整脚本:

SERVER='smtp.abc.com'
PORT='587'
USER='sender@gmail.com'
PASS='12134'
SENDER_ADDRESS="$USER"
SENDER_NAME='SENDER'
RECIPIENT_NAME='testname'
RECIPIENT_ADDRESS='n@gmail.com'
SUBJECT='status'
MESSAGE='Hi all,
'
ATTACHMENT_FILE='/home/ubuntu/aa/aa.log'
# 修复变量展开问题,正确获取MIME类型
ATTACHMENT_TYPE="$(file --mime-type "$ATTACHMENT_FILE" | sed 's/.*: //')"
# 生成随机MIME边界
BOUNDARY="----$(date +%s%N)"

# 构造完整的MIME邮件内容并通过stdin传递给curl
curl --ssl-reqd --url "smtp://$SERVER:$PORT" \
    --user "$USER:$PASS" \
    --mail-from "$SENDER_ADDRESS" \
    --mail-rcpt "$RECIPIENT_ADDRESS" \
    --upload-file - <<EOF
Subject: $SUBJECT
From: $SENDER_NAME <$SENDER_ADDRESS>
To: $RECIPIENT_NAME <$RECIPIENT_ADDRESS>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="$BOUNDARY"

--$BOUNDARY
Content-Type: text/plain; charset=utf-8

$MESSAGE

--$BOUNDARY
Content-Type: $ATTACHMENT_TYPE
Content-Disposition: attachment; filename="$(basename "$ATTACHMENT_FILE")"
Content-Transfer-Encoding: base64

$(base64 "$ATTACHMENT_FILE")

--$BOUNDARY--
EOF

关键修正点说明

  • 移除所有--form选项,改用--upload-file -读取标准输入的完整MIME邮件内容
  • 修复ATTACHMENT_TYPE的变量引用问题,确保正确获取附件MIME类型
  • 生成随机BOUNDARY用于分隔MIME多部分内容
  • 手动构造符合RFC规范的MIME邮件头和内容,包括文本部分和base64编码的附件部分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:33:30