使用smtplib与NewsAPI发送邮件时换行失效问题求助
解决邮件内容挤在一行的问题
邮件内容不分段的核心原因是纯文本的换行符未被邮件客户端正确解析,或者你在拼接新闻内容时没添加有效的换行/分段符。以下是两种直接可行的解决方法:
方法1:修复纯文本邮件的换行问题
步骤1:正确拼接新闻内容
在生成新闻文本时,每条新闻之间添加两次换行(\n\n)实现分段,单条新闻内的换行用\n:
# 假设news_list是从NewsAPI获取的新闻数据列表 news_content = "" for news in news_list: news_content += f"标题:{news['title']}\n" news_content += f"摘要:{news['description']}\n" news_content += f"原文链接:{news['url']}\n\n" # 两次换行分隔不同新闻
步骤2:正确配置MIMEText
创建邮件内容时,必须指定_subtype='plain'和编码,确保邮件客户端识别为纯文本格式:
from email.mime.text import MIMEText # 替换原来的MIMEText创建代码 msg = MIMEText(news_content, 'plain', 'utf-8')
如果还是有问题,把代码里的\n换成\r\n(SMTP协议标准换行符),部分严格的邮件客户端只识别CRLF格式的换行。
方法2:改用HTML格式邮件(更可控)
如果需要更美观的排版(比如标题加粗、分段清晰),直接用HTML格式发送:
步骤1:生成HTML格式的新闻内容
news_content = "" for news in news_list: news_content += f"<h3>{news['title']}</h3>" news_content += f"<p>{news['description']}</p>" news_content += f"<p><a href='{news['url']}'>点击查看原文</a></p>" news_content += "<hr>" # 用分割线区分不同新闻
步骤2:创建HTML类型的邮件
msg = MIMEText(news_content, 'html', 'utf-8')
HTML格式的邮件几乎所有客户端都能正确解析排版,适合需要展示结构化内容的场景。
内容的提问来源于stack exchange,提问作者5P33DC0R3
相关产品推荐
相关产品推荐

