在MUD中发电子邮件的简易实现

最近在优化mudGPT项目时需要把和chatGPT的聊天记录通过邮件存下来,问题来了,怎么在MUD中发邮件?

最简单的方式是调用Python,调用方式就是用external_start这个efun,这个efun在论文其它贴中有讲。

python脚本如下:

import smtplib
import sys
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# pip install python-dotenv
from dotenv import dotenv_values

# 新建.env文件,内容示例如下
'''
MAIL_HOST=smtpdm.aliyun.com
MAIL_PORT=80
MAIL_USERNAME=mudGPT@mud.ren
MAIL_PASSWORD=12345
MAIL_FROM_ADDRESS=mudGPT@mud.ren
'''
# 加载环境变量
env = dotenv_values('.env')
# print(env)

# 获取脚本参数
recipient_email = sys.argv[1]
attachment_filename = sys.argv[2]

# 邮件内容
msg = MIMEMultipart()
msg['Subject'] = '您在mudGPT上的chatGPT会话记录'
msg['From'] = env['MAIL_FROM_ADDRESS']
msg['To'] = recipient_email
# 添加邮件正文
body = MIMEText("""
亲爱的用户:

邮件附件文件 chatGPT.txt 是您在 MudGPT 上和 ChatGPT 的所有聊天记录,您可以通过查看这些记录来回顾过去的交流并从中获取所需的信息。

如果您有任何问题或需要进一步的帮助,请随时在bbs.mud.ren与雪风联系,祝您使用愉快!😋

""")
msg.attach(body)
# 添加附件
with open('log/history/' + attachment_filename + '.txt', 'rb') as f:
    attachment = MIMEApplication(f.read())
    attachment.add_header('Content-Disposition',
                          'attachment',
                          filename='chatGPT.txt')
    msg.attach(attachment)
# 发送邮件
smtp_server = env['MAIL_HOST']
smtp_port = env['MAIL_PORT']
smtp_username = env['MAIL_USERNAME']
smtp_password = env['MAIL_PASSWORD']
smtp = smtplib.SMTP(smtp_server, smtp_port)
smtp.login(smtp_username, smtp_password)
smtp.sendmail(smtp_username, [msg['To']], msg.as_string())
smtp.quit()

把这个文件mail.py放在LIB根目前下,同时新建.env配置文件,配置自己的邮件服务器,这里推荐使用阿里云的邮件服务,免费。

然后因为mudGPT中是要玩家调用才发邮件,所以做成了指令,示例如下:

#include <ansi.h>
inherit _EXTERNAL_CMD;

protected void response(string result)
{
    shout(result);
}

int main(object me, string arg)
{
    int PYTHON_CMD = 3;
    string mobile = fetch_variable("Mobile", me);

    if (!arg)
    {
        return notify_fail(HIC "指令格式:mailto 邮箱地址,如:mailto mail@gmail.com\n" NOR);
    }

    if (!pcre_match(arg, "^[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$"))
    {
        return notify_fail(YEL "请输入正确的邮箱地址! 😅\n" NOR);
    }

    if (!mobile)
    {
        return notify_fail(RED "你还没有认证身份,无法发送会话记录到你的邮箱,请输入" HIY " verify " NOR RED "认证。\n" NOR);
    }

    if (file_size("/log/history/" + mobile + ".txt") < 1)
    {
        return notify_fail(YEL "当前认证号码下还没有会话存档,请先和chatGPT聊聊呗 😅\n" NOR);
    }

    if (__ARCH__ == "Microsoft Windows")
        PYTHON_CMD = 4;

    external_cmd(PYTHON_CMD, "mail.py " + arg + " " + mobile);
    write(MAG "邮件已发送,请注意查收 💌\n" NOR);

    return 1;
}

int help(object me)
{
    write(@HELP
指令格式 : mailto <邮箱>

发送你和chatGPT的聊天记录到指定邮箱。

HELP );
    return 1;
}

这里把external_start指令做了封装,具体代码在论文其它贴中有讲。

至此,当玩家需要自己的聊天记录时,运行指令 mailto 发邮件到指定邮箱。效果如下:

file

file

如有问题,可以直接下载mudGPT项目源码自己测试~

相关内容:

京ICP备13031296号-4