Python批量发送HTML邮件无法正常渲染问题求助
解决批量发送HTML邮件无法渲染的问题
你的问题出在使用set_content()方法上——这个方法用于设置纯文本格式的邮件内容,导致HTML代码被当作普通文本直接显示,无法被收件端渲染。要发送可正常渲染的HTML邮件,需要用EmailMessage.add_alternative()方法指定HTML内容,同时建议保留纯文本版本作为降级方案(兼容不支持HTML的邮箱客户端)。
修改后的代码如下:
emails = [c for c in view_contactos] if add.validate_on_submit(): #validamos datos subject = add.title.data body_message = add.body.data #conexion al server context = ssl.create_default_context() server = smtplib.SMTP_SSL('smtp.gmail.com', DevConfig.MAIL_PORT, context=context) server.login(DevConfig.MAIL_USERNAME, DevConfig.MAIL_PASSWORD) #envio del correo for row in emails: em = EmailMessage() em['From'] = DevConfig.MAIL_USERNAME em['To'] = row em['Subject'] = subject # 设置纯文本降级内容(供不支持HTML的客户端使用) em.set_content("请使用支持HTML的邮箱客户端查看此邮件内容") # 添加HTML格式的邮件内容 em.add_alternative(body_message, subtype='html') server.send_message(em) server.close() print('done')
关键注意点:
- 确保
body_message变量中的内容是合法的HTML代码(比如标签闭合、语法正确),否则可能出现渲染异常 add_alternative(subtype='html')会明确标记内容为HTML格式,触发收件端的渲染逻辑- 保留
set_content()的纯文本版本,能避免不支持HTML的邮箱客户端显示杂乱的HTML代码
内容的提问来源于stack exchange,提问作者Ricardo Araujo
相关产品推荐
相关产品推荐

