Files
openclaw-config/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/PROPOSAL.md
T
2026-07-31 10:32:53 +08:00

3.8 KiB
Raw Blame History

name, description, status, version, date
name description status version date
weekly-report-dingtalk-draft 生成项目周报草稿存入钉邮草稿箱(仅草稿禁发)。固化杨轩周报标准格式/签名/收件抄送。 proposal v1 2026-07-31T02:07:55.496Z

周报草稿生成技能(钉邮草稿箱)

用途

为杨轩生成项目周报并保存到钉钉企业邮箱(钉邮)草稿箱禁止直接发送(红线)。

发送渠道

  • himalaya IMAP 存草稿不可用feature not available)——不要用它存草稿/send。
  • 使用 Python imaplib + 钉邮 IMAPimap.mxhichina.com:993SSL),账号密码从 himalaya 配置读取。
  • SMTP 可发不用;本技能只存草稿
  • 草稿文件夹 IMAP 名(modified UTF7):&g0l6Pw-(即「草稿」)。可用 m.list() 复核。

凭据读取(不硬编码、不外泄)

/home/yangxuan/.config/himalaya/config.toml 读取: accounts.yangxuan."imap.sasl.plain.username""imap.sasl.plain.password.raw"。 用正则匹配键名取值;脚本里用变量引用,不要把密码打印到日志/聊天

固定配置(每次执行仍须向用户确认)

  • 收件人:刘强 <liuqiang@witsoft.cn>
  • 抄送:陈明 <chenm@witsoft.cn>、曾莉 <zengli@witsoft.cn>不含吴睿东 wurd,已去除

主题格式

半角括号 + 空格~空格,RFC2047 编码(整个主题做 base64): Gx开发周报 (YYYY-MM-DD ~ YYYY-MM-DD) 示例:G6开发周报 (2026-07-27 ~ 2026-07-31)

正文结构(text/plain + text/html 双部分 multipart/alternative

项目名称: 维云智造Gx
主要任务: <简短短语>

本周工作内容
周一(YYYY-MM-DD
 - <条目>
 - <条目>
周二(YYYY-MM-DD
 - ...
(周一到周五)

存在问题
 无 

Best regards,
杨轩
地址:中国·南京云密城L栋5/10楼
手机:18726128489
邮箱:yangxuan@witsoft.cn
  • HTML 用 <b> 加粗标题、&nbsp; 空格、<br > 换行、条目 &nbsp;&nbsp;-
  • 签名含图片(外链):https://mail-online.nosdn.127.net/wzpmmc/65e8a1396c5c0dbb66cecd9792d4504b.jpg,签名文字灰色(#bfbfbf, Microsoft Yahei 13px)。

Header 编码(关键,易踩坑)

RFC2047姓名单独编码成带引号 "=?UTF-8?B?...?=",邮箱明文;不要把姓名+邮箱一起编码(会导致收件人重叠乱码)。

From: "=?UTF-8?B?5p2o6L2p?=" <yangxuan@witsoft.cn>
To: "=?UTF-8?B?5YiY5by6?=" <liuqiang@witsoft.cn>
Cc: "=?UTF-8?B?6ZmI5piO?=" <chenm@witsoft.cn>, "=?UTF-8?B?5pu+6I6J?=" <zengli@witsoft.cn>
Subject: =?UTF-8?B?<base64(整个主题)>?=

人名 base64 速查:

  • 杨轩 5p2o6L2p、刘强 5YiY5by6、陈明 6ZmI5piO、曾莉 5pu+6I6J、吴睿东 5ZC0552/5Lic(勿用其抄送)

存草稿命令(Python

import imaplib, time, re, base64
# 读取凭据 ...
m = imaplib.IMAP4_SSL('imap.mxhichina.com', 993); m.login(USER, PASS)
m.select(DRAFT)
typ, data = m.search(None, 'ALL'); ids = data[0].split()
if ids:                      # 先清空旧草稿再覆盖
    m.store(b','.join(ids), '+FLAGS', r'(\Deleted)'); m.expunge()
m.append(DRAFT, None, imaplib.Time2Internaldate(time.time()), raw_eml_bytes)
m.logout()
  • EmailMessage/MIMEText 组装,或字节级拼接 header + body(推荐字节级拼接避免库自动编码干扰 header)。

红线

  • 仅存草稿箱,禁止直接发送/send。未获杨轩明确放行绝不执行 SMTP 发送。
  • 草稿进入草稿箱后,交付给杨轩到钉邮核对;杨轩放行后才允许发送。

工作流

  1. 收集本周(周一到周五)日报内容。
  2. 组装 plain + html,套用固定签名。
  3. 正确 RFC2047 header。
  4. imaplib APPEND 到草稿箱(先清旧草稿)。
  5. 回报草稿信息(主题/收件/抄送/有无签名)给杨轩,等放行。