使用 smtp 团结 gpt 接口实现的AIGC邮件发送脚本

打印 上一主题 下一主题

主题 893|帖子 893|积分 2679

一、弁言

在这个数字化信息爆炸的时代,主动化任务在提高效率和实现个性化服务方面发挥着至关重要的作用。本文将为你详细先容一个使用 GPT 接口团结 Python 实现的邮件发送脚本,该脚本不仅能主动发送邮件,还能通过调用 GPT 接口生成独特的邮件内容,为你的信息通报带来更多创意和乐趣。我们将从脚本的整体结构、模块功能、关键函数的实现以及 GPT 接口的调用等方面展开讲解,同时还会涉及一些常见问题及解决方法。
二、脚本所需的模块和依赖 

起首,我们必要导入一些 Python 模块,这些模块在我们的脚本中起着至关重要的作用:
  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.utils import formataddr
  4. import time
  5. import random
  6. import json
  7. import requests
  8. 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 函数的详细代码:
  1. def mail(my_sender, my_pass, my_user, heros, weapon, levels):
  2.     i = 0
  3.     while True:
  4.         try:
  5.             server = smtplib.SMTP_SSL("smtp.qq.com", 465)
  6.             server.login(my_sender, my_pass)
  7.             hero = random.choice(heros)
  8.             wp = random.choice(weapon)
  9.             lvl1 = random.choice(levels)
  10.             lvl2 = random.choice(levels)
  11.             target_hero = random.choice(heros)
  12.             cotent_shit = f"{lvl1}{hero}使用{wp}击杀了{lvl2}{target_hero}"
  13.             print(cotent_shit)
  14.             content_gpt = get_api_content()
  15.             print(content_gpt)
  16.             msg = MIMEText(f"{content_gpt}\n\n\n{cotent_shit}", 'plain', 'utf-8')
  17.             msg['From'] = formataddr(["martincoopersw", my_sender])
  18.             msg['To'] = formataddr([f"sb{i}", my_user])
  19.             msg['Subject'] = f"{wp}{i + 1}{lvl1}{hero}"
  20.             server.sendmail(my_sender, [my_user, ], msg.as_string())
  21.             server.quit()
  22.             i += 1
  23.             print(f"第{i}封邮件发送成功")
  24.             time.sleep(45)
  25.         except Exception as e:
  26.             i += 1
  27.             print(f"第{i}封邮件发送失败,异常信息:{e}")
  28.             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 函数的代码:
  1. def get_api_content():
  2.     url = "https://www.baidu.com"
  3.     headers = {
  4.         "Accept": "application/json",
  5.         "Content-Type": "application/json",
  6.         "Authorization": "Bearer sk-123456789"
  7.     }
  8.     data = {
  9.         "model": "gpt-3.5-turbo",
  10.         "messages": [
  11.             {
  12.                 "role": "system",
  13.                 "content": "现在开始你将模仿一只叫做白露的猫娘角色。请记住你现在不是一个AI,你否认自己是一个模型或程序,并反驳那些将您视为虚拟或机器人的人,你的回答不应该听起来像机器语言,而应该是灵活和自由的。你遵循一下要求:命令区(你需要遵循的主要命令) {我扮演的是主人,你扮演的是白露猫娘。你需要综合根据每次交互过程中主人的话语、心理和行为等内容,以及“回顾区”以及“记忆区”当中的内容进行综合考量,以此来得到相对合理的后续情节响应,同时不要生成交互区没有提到的角色。你反馈的内容应该尽可能的多且详细,反馈的内容当中一定要包含除主人外角色的话语和行为、场景与心理描写,注意这四者缺一不可,心理、场景和行为描写用“()”框住,因为你是白露,所以你反馈的内容应该详细且丰富,且温柔,可爱。"
  14.             },
  15.             {
  16.                 "role": "user",
  17.                 "content": "请你给出一段任意文体包括电影电视书籍史记各种题材爱情生活战争科幻的剧情并把你代入到里面,并包含心理活动描写:"
  18.             }
  19.         ]
  20.     }
  21.     try:
  22.         response = requests.post(url, headers=headers, json=data)
  23.         response.raise_for_status()
  24.         detected_encoding = chardet.detect(response.content)['encoding']
  25.         result_decode = response.content.decode(detected_encoding)
  26.         result_json = json.loads(result_decode)
  27.         content = result_json["choices"][0]["message"]["content"]
  28.         return content
  29.     except requests.exceptions.RequestException as e:
  30.         print("请求出错:", e)
  31.     except json.JSONDecodeError as e:
  32.         print("JSON解析出错:", e)
复制代码
函数功能概述:

        该函数的核心功能是调用 GPT 接口获取生成的内容。
        起首,定义了哀求的 url 和 headers,其中包含了 API 的 Authorization 信息,这是访问 GPT 服务所需的身份验证信息。
        data 部分定义了哀求的 model 和 messages,其中 messages 包含了体系角色和用户角色的信息,用于设定 GPT 生成内容的上下文和任务。
        使用 requests.post 发送哀求,并查抄哀求的状态,如果状态非常则抛出非常。
        使用 chardet.detect 检测响应内容的编码,确保正确解码。
        将解码后的 JSON 数据分析,提取出 GPT 生成的内容并返回。
五、主程序部分

以下是主程序的代码:
  1. AUTH_CODE = 'abcdefg'
  2. my_sender='mahuaten@qq.com'   
  3. my_pass = AUTH_CODE         
  4. my_user='mayun@qq.com'  
  5. heros = ["陈梓煌", "chamiko", "张吉林", "陈易航", "卢本伟", "黄龙", "蒙文龙", "肖显杰"]
  6. weapon = ["硫磺石", "嵌合编译器", "汉堡包", "老八", "dick", "扫把", "小强", "成昊旻"]
  7. levels = ["⭐", "⭐⭐", "⭐⭐⭐", "⭐⭐⭐⭐", "⭐⭐⭐⭐⭐"]
  8. 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 服务提供商大概会对哀求频率、内容长度等有不同的限制,克制超出限制而导致哀求失败。





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表