grok需部署为后台服务,通过imap监听邮箱、解析邮件、调用llm分类并生成回复草稿,再经smtp自动发送;要求python 3.10+、2gb内存、稳定api访问,配置应用专用密码及环境变量,使用imaplib2/aiofiles等依赖,严格校验敏感词并确保发件人一致。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Grok持续监听收件箱、自动识别邮件类型并生成可发送的回复草稿,而不是每次手动复制粘贴再点发送。这要求它运行在后台服务中,能稳定连接IMAP服务器、解析原始邮件结构、调用模型API,并安全触发SMTP发信动作。
配置Grok后台服务运行环境
先确认你的部署机器满足最低运行条件:Python 3.10+、至少2GB空闲内存、能访问Google Cloud和OpenAI(或你选用的LLM)API端点。
安装核心依赖包,其中imaplib2比标准imaplib更稳定支持长连接,aiofiles用于异步读写缓存文件:
pip install imaplib2 aiofiles python-dotenv openai requests
创建.env文件,填入以下四行——【IMAP密码必须是应用专用密码,不是邮箱登录密码】,否则Gmail会拒绝连接:
GMAIL_USER=yourname@gmail.com
GMAIL_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SMTP_PASSWORD=$GMAIL_APP_PASSWORD
编写邮件拉取与解析模块
新建mail_fetcher.py,定义一个能按UID精准抓取未处理邮件的函数:
使用imaplib2建立TLS加密连接,登录后切换到[Gmail]/All Mail文件夹——这里包含所有已归档邮件,避免遗漏被自动归档的客户来信。
执行SEARCH UNSEEN指令获取最新5封未读邮件UID,再用FETCH一次性拉取RFC822.PEEK完整源码,不标记为已读。
对每封邮件调用email.parser.BytesParser(policy=policy.default).parse()解析,提取subject、from、纯文本正文(跳过HTML和附件),截断超过3000字符的部分防止模型超长输入报错。
定义Grok分类与回复逻辑
方法一:硬编码业务规则(适合规则明确、变更少的场景)
若邮件主题含“发票”“PO#”“付款”且发件人域名在白名单(如supplier.com、accounting.net),直接打上finance标签;若正文中出现“投诉”“不满”“退款”,且未包含“已解决”字样,则归为complaint类。
方法二:调用Grok API动态判断(需已申请Grok访问权限)
构造请求体:{"model":"grok-beta","messages":[{"role":"system","content":"你是一个邮件分类器,请从以下6类中选一个:咨询、投诉、订单查询、退换货、合作意向、会议邀约。只返回类别名,不要解释。"},{"role":"user","content":f"邮件主题:{subject}\n发件人:{sender}\n正文:{body[:2000]}"}]}
【必须设置timeout=15,否则Grok响应慢会导致IMAP连接超时中断】
收到返回后,用response.json()["choices"][0]["message"]["content"].strip()提取结果,过滤掉非预期字符(如冒号、引号、换行)。
生成并发送AI回复草稿
第一步:根据分类结果加载对应模板。例如complaint类匹配templates/complaint_reply.txt,其中含占位符[客户姓名]、[问题简述]。
第二步:调用Grok补全占位符。发送请求时在system prompt中强调:“仅替换方括号内的变量,保持原文结构、标点、语气不变,不增删句子。”
第三步:校验输出是否含敏感词(如“赔偿”“起诉”“律师”)。若检测到,跳过自动发送,改写日志并推送企业微信告警。
第四步:通过SMTP发送。连接smtp.gmail.com:587,用starttls()升级加密,登录后调用send_message()发送——【发件人地址必须与GMAIL_USER完全一致,否则Gmail会拒发】。











