共计 2101 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点
传统的邮件发送方案(如直接调用 SMTP)在动态内容生成和个性化处理方面存在明显不足。开发者通常需要手动拼接邮件内容,缺乏智能化和灵活性。而 ChatGPT 的引入虽然解决了内容生成的问题,但也带来了新的挑战:

- API 响应延迟:ChatGPT 的 API 调用可能存在不可预测的延迟,影响邮件发送的时效性。
- 内容格式兼容性:生成的邮件内容需要适配不同的邮件客户端,避免格式错乱。
- 敏感词过滤:自动化生成的内容可能存在合规风险,需要额外过滤机制。
技术方案对比
在对比纯 SMTP 方案和 ChatGPT+SMTP 混合方案时,我们主要考虑以下因素:
- QPS(每秒查询率):纯 SMTP 方案在高并发下表现更好,但缺乏内容生成的灵活性。
- 成本:ChatGPT 的 API 调用成本较高,但可以显著减少人工编写内容的时间。
- 维护复杂度:混合方案需要更多的技术栈集成,但提供了更高的自动化程度。
最终,我们选择了 Python+aiosmtplib 异步方案,主要基于以下决策依据:
- 异步处理:能够高效处理 API 调用和邮件发送的并发需求。
- 灵活性:Python 生态提供了丰富的库支持,如 Jinja2 模板渲染。
- 可扩展性:易于集成监控和熔断机制。
核心实现
1. ChatGPT prompt 工程设计
为了生成结构化的邮件内容,我们设计了以下 prompt 模板:
prompt = """
Generate a professional email with the following details:
- Subject: {subject}
- Body: {body}
- Signature: {signature}
"""
2. 异步 API 调用与响应解析
使用 async/await 实现并发控制,并处理 streaming response:
import aiohttp
async def fetch_email_content(prompt: str) -> str:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.openai.com/v1/chat/completions",
json={"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": prompt}]},
headers={"Authorization": f"Bearer {API_KEY}"}
) as response:
data = await response.json()
return data["choices"][0]["message"]["content"]
3. 敏感内容的多级过滤机制
结合正则表达式和关键词库进行内容过滤:
import re
SENSITIVE_KEYWORDS = ["敏感词 1", "敏感词 2"]
def filter_content(content: str) -> str:
for keyword in SENSITIVE_KEYWORDS:
content = content.replace(keyword, "***")
content = re.sub(r"<script.*?>.*?</script>", "", content, flags=re.DOTALL)
return content
生产环境考量
监控指标设计
- API 成功率:监控 ChatGPT API 的调用成功率和响应时间。
- 内容违规率:记录被过滤的敏感内容比例。
- 端到端延迟:从生成内容到邮件发送完成的总耗时。
速率限制与熔断机制
针对 ChatGPT API 和 SMTP 服务器设置速率限制,并在超过阈值时触发熔断:
from circuitbreaker import circuit
@circuit(failure_threshold=5, recovery_timeout=60)
async def send_email(email_content: str):
# SMTP 发送逻辑
GDPR 合规性建议
对用户数据进行脱敏处理,避免存储敏感信息:
def anonymize_email(email: str) -> str:
local, domain = email.split("@")
return f"{local[0]}***@{domain}"
避坑指南
- 避免 prompt 注入:对用户输入进行严格的验证和转义。
- 处理 SMTP 550 错误码:实现指数退避重试机制。
- ChatGPT 内容缓存:设置合理的 TTL,避免重复生成相同内容。
架构流程图
使用 Mermaid 语法描述系统架构:
flowchart TB
A[用户请求] --> B[生成邮件内容]
B --> C[过滤敏感内容]
C --> D[发送邮件]
D --> E[监控与报警]
开放性问题
如何平衡生成式内容的创意性与合规性?这是一个需要持续探索的问题。一方面,我们需要确保内容的合规性,避免法律风险;另一方面,又要保留 ChatGPT 的创意性和个性化优势。或许可以通过更精细的 prompt 设计和多级内容审核机制来实现这一平衡。
希望这篇文章能帮助你在实际项目中更好地集成 ChatGPT 和 SMTP,构建高可靠的邮件自动化系统。如果你有任何问题或建议,欢迎在评论区交流!
正文完
