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

如何用Python MIME Multipart拆分邮件?Socket发送邮件格式异常求助

问题分析与修正方案

你的代码核心问题是MIME多部分格式的换行规则、分隔符使用不符合邮件协议标准,导致邮件解析器无法正确识别纯文本和附件的边界,具体修正如下:

核心错误点

  • 邮件协议要求使用**CRLF(\r\n)**作为换行符,单纯的\n无法被标准解析器正确识别
  • 每个MIME部分的头信息和内容之间必须有一个空行(\r\n\r\n),用于分隔头字段和实际内容
  • 分隔符(boundary)的格式必须严格遵循:--boundary + CRLF 开启新部分,结束时用--boundary-- + CRLF

修正后的代码

# 发送MIME版本与内容类型头,严格用CRLF换行
cSockSSL.send("MIME-Version: 1.0\r\n".encode())
cSockSSL.send("Content-Type: multipart/mixed; boundary=gg4g5gg\r\n\r\n".encode())

# 第一个分隔符,加CRLF开启纯文本部分
cSockSSL.send("--gg4g5gg\r\n".encode('ascii'))
# 纯文本头信息,结尾用CRLF+CRLF分隔头与内容
cSockSSL.send("Content-Type: text/plain\r\n\r\n".encode())
# 发送纯文本内容,结尾加CRLF
cSockSSL.send("Some text\r\n".encode())

# 分隔符开启附件部分
cSockSSL.send("--gg4g5gg\r\n".encode())
# 附件头信息,结尾用CRLF+CRLF分隔头与附件内容
cSockSSL.send("Content-Type: text/plain\r\n".encode())
cSockSSL.send("Content-Disposition: attachment; filename=gg.txt\r\n\r\n".encode())
# 发送附件内容,结尾加CRLF
cSockSSL.send(txt_file + b"\r\n")

# 结束分隔符,加CRLF
cSockSSL.send("--gg4g5gg--\r\n".encode())
# 邮件结束标记(单独一行的.)
cSockSSL.send("\r\n.\r\n".encode())

关键细节说明

  • 所有头信息行必须以\r\n结尾,包括Content-Type等字段
  • 每个MIME部分的头信息结束后,必须用\r\n\r\n明确标记头结束、内容开始
  • 分隔符--boundary必须单独占据一行,因此前后都要添加\r\n
  • 附件的filename参数不要加空格,写成filename=gg.txt更符合标准规范
  • 邮件结束标记.必须单独成一行,前面加\r\n确保它是独立行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:35:21