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

SMTP邮件行长度限制问题:使用smtplib发送HTML邮件异常

问题原因

这是Python的email模块默认使用quoted-printable编码处理MIME内容导致的。这种编码为了兼容SMTP协议的行长度规范(RFC 5322要求每行不超过998字符),会自动将超过76字符的长行拆分成多行,每行末尾加=作为软换行标记。如果你的HTML内容没有自然换行(所有标签连在一起),拆分可能直接打断HTML标签或文本,部分邮件客户端无法正确识别这些软换行,就会显示内容断裂的异常。

解决办法

有两种可行方案:

方案1:给HTML内容添加自然换行

构建HTML字符串时,在合适位置(比如<br>后或标签之间)添加换行符,让编码拆分发生在非关键位置,避免打断标签:

str = ''
for i in range(500):
    str += f'{i}: <a href="https://google.com">https://google.com</a><br>\n'

方案2:改用base64编码替代quoted-printable

修改HTML内容的传输编码为base64,这种编码不会拆分长行,能完整保留原始HTML结构:

方式一:手动构建MIME部分

import smtplib
from email.message import EmailMessage
from email import encoders
from email.mime.base import MIMEBase

my_addr = 'my_email@my_domain.com'

str = ''
for i in range(500):
    str += f'{i}: <a href="https://google.com">https://google.com</a><br>'

msg = EmailMessage()
msg.set_content('')
msg['Subject'] = 'html test'
msg['From'] = my_addr
msg.add_header('reply-to', my_addr)
msg['To'] = my_addr

# 创建base64编码的HTML部分
html_part = MIMEBase('text', 'html')
html_part.set_payload(str)
encoders.encode_base64(html_part)
msg.attach(html_part)

with smtplib.SMTP('localhost', timeout=30) as smtp_server:
    smtp_server.send_message(msg)

方式二:直接在add_alternative中指定编码器

import smtplib
from email.message import EmailMessage
from email import encoders

my_addr = 'my_email@my_domain.com'

str = ''
for i in range(500):
    str += f'{i}: <a href="https://google.com">https://google.com</a><br>'

msg = EmailMessage()
msg.set_content('')
# 指定base64编码器
msg.add_alternative(str, subtype='html', encoder=encoders.encode_base64)
msg['Subject'] = 'html test'
msg['From'] = my_addr
msg.add_header('reply-to', my_addr)
msg['To'] = my_addr

with smtplib.SMTP('localhost', timeout=30) as smtp_server:
    smtp_server.send_message(msg)

这样发送的HTML内容会以base64编码传输,不会被拆分,邮件客户端解码后即可正常显示完整内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:02:40