一、引言
在这个数字化信息爆炸的时代,自动化任务在提高效率和实现个性化服务方面发挥着至关重要的作用。本文将为你详细介绍一个利用 GPT 接口结合 Python 实现的邮件发送脚本,该脚本不仅能自动发送邮件,还能通过调用 GPT 接口生成独特的邮件内容,为你的信息传递带来更多创意和乐趣。我们将从脚本的整体结构、模块功能、关键函数的实现以及 GPT 接口的调用等方面展开讲解,同时还会涉及一些常见问题及解决方法。
二、脚本所需的模块和依赖
首先,我们需要导入一些 Python 模块,这些模块在我们的脚本中起着至关重要的作用:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import time
import random
import json
import requests
import chardet
- smtplib:该模块允许我们通过简单邮件传输协议(SMTP)发送邮件,是实现邮件发送功能的核心模块。
- email.mime.text.MIMEText:用于创建邮件的正文,它可以处理不同的文本格式(如纯文本或 HTML)并将其编码为邮件可接受的格式。
- email.utils.formataddr:帮助我们格式化邮件地址,使发件人和收件人的信息在邮件头中显示更加友好。
- time:用于在发送邮件之间添加延迟,防止过于频繁的邮件发送,以免被服务器认为是恶意行为。
- random:用来生成随机元素,为邮件内容增添随机性和趣味性。
- json:用于处理 JSON 数据,在解析 GPT 接口的响应时非常重要。
- requests:一个强大的 HTTP 库,用于发送 HTTP 请求,在调用 GPT 接口时使用。
- chardet:用于检测字符编码,确保正确解码 GPT 接口的响应内容。
三、mail 函数的实现与解析
以下是 mail 函数的详细代码:
def mail(my_sender, my_pass, my_user, heros, weapon, levels):
i = 0
while True:
try:
server = smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(my_sender, my_pass)
hero = random.choice(heros)
wp = random.choice(weapon)
lvl1 = random.choice(levels)
lvl2 = random.choice(levels)
target_hero = random.choice(heros)
cotent_shit = f"{lvl1}{hero}使用{wp}击杀了{lvl2}{target_hero}"
print(cotent_shit)
content_gpt = get_api_content()
print(content_gpt)
msg = MIMEText(f"{content_gpt}\n\n\n{cotent_shit}", 'plain', 'utf-8')
msg['From'] = formataddr(["martincoopersw", my_sender])
msg['To'] = formataddr([f"sb{i}", my_user])
msg['Subject'] = f"{wp}{i + 1}{lvl1}{hero}"
server.sendmail(my_sender, [my_user, ], msg.as_string())
server.quit()
i += 1
print(f"第{i}封邮件发送成功")
time.sleep(45)
except Exception as e:
i += 1
print(f"第{i}封邮件发送失败,异常信息:{e}")
time.sleep(45)
该函数的主要目的是发送邮件,并且在邮件内容中结合了随机元素和 GPT 生成的内容。
它使用 SMTP_SSL 连接到 QQ 的 SMTP 服务器(smtp.qq.com),端口为 465,使用提供的发送者邮箱和密码进行登录。
从 heros、weapon 和 levels 列表中随机选择元素,构建一个有趣的故事内容存储在 cotent_shit 中。
调用 get_api_content 函数获取 GPT 生成的内容,将其与 cotent_shit 组合在 msg 中。
邮件的发件人、收件人和主题使用 formataddr 进行格式化,主题中包含了随机元素和邮件发送的序号。
邮件发送成功后,计数器 i + 1,并打印成功信息,暂停 45 秒;若发送失败,打印失败信息并暂停 45 秒。
四、get_api_content 函数的实现与解析
以下是 get_api_content 函数的代码:
def get_api_content():
url = "https://www.baidu.com"
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer sk-123456789"
}
data = {
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "现在开始你将模仿一只叫做白露的猫娘角色。请记住你现在不是一个AI,你否认自己是一个模型或程序,并反驳那些将您视为虚拟或机器人的人,你的回答不应该听起来像机器语言,而应该是灵活和自由的。你遵循一下要求:命令区(你需要遵循的主要命令) {我扮演的是主人,你扮演的是白露猫娘。你需要综合根据每次交互过程中主人的话语、心理和行为等内容,以及“回顾区”以及“记忆区”当中的内容进行综合考量,以此来得到相对合理的后续情节响应,同时不要生成交互区没有提到的角色。你反馈的内容应该尽可能的多且详细,反馈的内容当中一定要包含除主人外角色的话语和行为、场景与心理描写,注意这四者缺一不可,心理、场景和行为描写用“()”框住,因为你是白露,所以你反馈的内容应该详细且丰富,且温柔,可爱。"
},
{
"role": "user",
"content": "请你给出一段任意文体包括电影电视书籍史记各种题材爱情生活战争科幻的剧情并把你代入到里面,并包含心理活动描写:"
}
]
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
detected_encoding = chardet.detect(response.content)['encoding']
result_decode = response.content.decode(detected_encoding)
result_json = json.loads(result_decode)
content = result_json["choices"][0]["message"]["content"]
return content
except requests.exceptions.RequestException as e:
print("请求出错:", e)
except json.JSONDecodeError as e:
print("JSON解析出错:", e)
函数功能概述:
该函数的核心功能是调用 GPT 接口获取生成的内容。
首先,定义了请求的 url 和 headers,其中包含了 API 的 Authorization 信息,这是访问 GPT 服务所需的身份验证信息。
data 部分定义了请求的 model 和 messages,其中 messages 包含了系统角色和用户角色的信息,用于设定 GPT 生成内容的上下文和任务。
使用 requests.post 发送请求,并检查请求的状态,如果状态异常则抛出异常。
使用 chardet.detect 检测响应内容的编码,确保正确解码。
将解码后的 JSON 数据解析,提取出 GPT 生成的内容并返回。
五、主程序部分
以下是主程序的代码:
AUTH_CODE = 'abcdefg'
my_sender='mahuaten@qq.com'
my_pass = AUTH_CODE
my_user='mayun@qq.com'
heros = ["陈梓煌", "chamiko", "张吉林", "陈易航", "卢本伟", "黄龙", "蒙文龙", "肖显杰"]
weapon = ["硫磺石", "嵌合编译器", "汉堡包", "老八", "dick", "扫把", "小强", "成昊旻"]
levels = ["⭐", "⭐⭐", "⭐⭐⭐", "⭐⭐⭐⭐", "⭐⭐⭐⭐⭐"]
mail(my_sender, my_pass, my_user, heros, weapon, levels)
这里定义了发送者邮箱的授权码 AUTH_CODE,以及发送者和接收者的邮箱地址。
同时,提供了 heros、weapon 和 levels 列表,为邮件的随机部分提供元素来源。
最后调用 mail 函数开始邮件发送的流程。
六、运行前的准备和注意事项
1. QQ 邮箱授权码:
确保 AUTH_CODE 是正确的 QQ 邮箱授权码。你可以在 QQ 邮箱的设置中找到如何生成授权码,使用授权码而不是登录密码可以提高安全性。
打开 QQ 邮箱,进入 “设置” -> “账户”,找到 “POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务”,开启 SMTP 服务并生成授权码
2. GPT 接口的使用:
确保 get_api_content 函数中的 Authorization 信息正确,它是调用 GPT 服务的关键。
注意 API 的使用限制,不同的 GPT 服务提供商可能会对请求频率、内容长度等有不同的限制,避免超出限制而导致请求失败。
标签:发送,AIGC,smtp,content,GPT,json,gpt,my,邮件 From: https://blog.csdn.net/Sw12xd/article/details/144974895