使用 smtplib 发送 HTML 电子邮件的消息长度限制

问题描述 投票:0回答:1

这是一个简单的测试,演示了我所遇到的问题:

import smtplib
from email.message import EmailMessage

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.add_alternative(str, subtype='html')
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 中每 1000 个字节就会“中断”一次。此长度包括 HTML 字符串中的所有标签。收到的电子邮件看起来像这样:

我尝试过具有不同消息长度限制的不同 SMTP 服务器,但全部都设置为 10M 或更高,所以我怀疑这是否有任何效果。此外,我没有收到任何错误代码或异常。一切都干净地发送。 smtplib 似乎只是以某种方式分解了消息。

知道问题是什么或如何解决这个问题吗?

python smtp smtplib
1个回答
0
投票

这是 SMTP 服务器施加的线路长度限制的结果。
它会导致断线太长。

解决方案:在 html 字符串中插入换行符。

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

SMTP 标头字段是否有可接受的最大行长度?

© www.soinside.com 2019 - 2024. All rights reserved.