--- name: "weekly-report-dingtalk-draft" description: "生成项目周报草稿存入钉邮草稿箱(仅草稿禁发)。固化杨轩周报标准格式/签名/收件抄送。" status: proposal version: "v1" date: "2026-07-31T02:07:55.496Z" --- # 周报草稿生成技能(钉邮草稿箱) ## 用途 为杨轩生成项目周报并保存到钉钉企业邮箱(钉邮)**草稿箱**,**禁止直接发送**(红线)。 ## 发送渠道 - **himalaya IMAP 存草稿不可用**(`feature not available`)——不要用它存草稿/send。 - 使用 **Python imaplib + 钉邮 IMAP**:`imap.mxhichina.com:993`(SSL),账号密码从 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"`。 用正则匹配键名取值;脚本里用变量引用,**不要把密码打印到日志/聊天**。 ## 固定配置(每次执行仍须向用户确认) - 收件人:刘强 `` - 抄送:陈明 ``、曾莉 ``(**不含吴睿东 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 用 `` 加粗标题、` ` 空格、`
` 换行、条目 `  - `。 - **签名含图片**(外链):`https://mail-online.nosdn.127.net/wzpmmc/65e8a1396c5c0dbb66cecd9792d4504b.jpg`,签名文字灰色(#bfbfbf, Microsoft Yahei 13px)。 ## Header 编码(关键,易踩坑) RFC2047,**姓名单独编码成带引号 `"=?UTF-8?B?...?="`,邮箱明文**;不要把姓名+邮箱一起编码(会导致收件人重叠乱码)。 ``` From: "=?UTF-8?B?5p2o6L2p?=" To: "=?UTF-8?B?5YiY5by6?=" Cc: "=?UTF-8?B?6ZmI5piO?=" , "=?UTF-8?B?5pu+6I6J?=" Subject: =?UTF-8?B??= ``` 人名 base64 速查: - 杨轩 `5p2o6L2p`、刘强 `5YiY5by6`、陈明 `6ZmI5piO`、曾莉 `5pu+6I6J`、吴睿东 `5ZC0552/5Lic`(勿用其抄送) ## 存草稿命令(Python) ```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. 回报草稿信息(主题/收件/抄送/有无签名)给杨轩,等放行。