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

使用NewsAPI发送带主题邮件时遇SMTPDataError问题求助

解决SMTP邮件主题重复拦截或不显示的问题

问题根源分析

  1. 第一个错误(多个Subject头):循环代码中每遍历一篇文章就会重新拼接一次Subject: Today's news,最终生成的邮件内容包含20个重复的Subject头,违反RFC 5322邮件格式规范,被Gmail判定为违规内容拦截。
  2. 第二个问题(主题不显示):修改后的代码里,From和Subject之间未换行,且邮件头与正文之间缺少必填的空行,导致邮件客户端无法正确识别主题头。

正确实现方式

要符合RFC 5322规范,需满足以下要求:

  • 邮件头(From、Subject等)仅定义一次,放在内容最顶部
  • 每个邮件头单独占一行
  • 邮件头与正文之间必须用一个空行分隔

修改后的完整代码:

import requests
from send_email import send_email

topic = "tesla"

api_key = "-"
url = ("https://newsapi.org/v2/everything?"
       f"q={topic}&"
       "from=2023-09-05&"
       "sortBy=publishedAt&"
       "apiKey=-&"
       "language=en")

request = requests.get(url)
content = request.json()

# 初始化邮件头(仅定义一次,末尾空行分隔头与正文)
email_headers = """From: email@email.com
Subject: Today's news

"""

# 拼接正文内容
body_content = ""
for article in content["articles"][:20]:
    if article["title"] is not None:
        body_content += f"{article['title']}\n{article['description']}\n{article['url']}\n\n"

# 组合邮件头与正文
full_message = email_headers + body_content
# 编码后发送
send_email(message=full_message.encode("utf-8"))

额外说明

  • 如果你的send_email函数内部已自动添加From等邮件头,无需手动在email_headers中重复添加,避免出现新的重复头合规问题。
  • 所有邮件头字段必须单独成行,头与正文的空行不可省略,这是邮件客户端正确解析内容的核心要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:26:01