V3.4 负责人验收制+邮件修复+事件面板+真实网页交付
- 项目级验收:全部任务完成后进入「待验收」,邮件通知负责人,验收通过才算完成;公开验收链接 /review/<token> 免登录一键通过/打回(打回必填原因) - 打回自动返工:自动生成含负责人意见的返工任务,AI主管立即重做并再次提交验收;平台内也可验收 - 真实网页交付:任务HTML产出自动落盘工作目录(剥离围栏/前置叙述),Demo展示真实页面;返工产出覆盖入口页;老项目已回填 - 事件记录面板:合并AI主管动态+任务日志+交付记录,可展开/收起(记忆状态),任务事件可点击定位 - 邮件通道修复:补 Date/Message-ID 头(amavisd 拒收 invalid header section 根因),打包附件/通知恢复送达;notify.py 改标准 MIME - 规划重试:WBS 拆解失败自动重试3次,仍失败邮件通知负责人 - 项目状态新增 review(待验收),全端展示
This commit is contained in:
@@ -55,15 +55,21 @@ def _send_email(ch, title, text):
|
||||
from config import EMAIL # 邮件配置在 config.py
|
||||
if not EMAIL.get('host'):
|
||||
return None
|
||||
msg = f'From: {EMAIL["from_name"]} <{EMAIL["user"]}>\nTo: {ch["email"]}\n' \
|
||||
f'Subject: 【AI Worker 平台】{title}\nContent-Type: text/plain; charset=utf-8\n\n{text}'
|
||||
from email.mime.text import MIMEText
|
||||
from email.utils import formataddr, formatdate, make_msgid
|
||||
msg = MIMEText(text, 'plain', 'utf-8')
|
||||
msg['From'] = formataddr((EMAIL.get('from_name', 'AI Worker 平台'), EMAIL['user']))
|
||||
msg['To'] = ch['email']
|
||||
msg['Subject'] = f'【AI Worker 平台】{title}'
|
||||
msg['Date'] = formatdate(localtime=True)
|
||||
msg['Message-ID'] = make_msgid(domain='tphai.com')
|
||||
try:
|
||||
s = smtplib.SMTP(EMAIL['host'], EMAIL['port'])
|
||||
s = smtplib.SMTP(EMAIL['host'], EMAIL['port'], timeout=30)
|
||||
if EMAIL.get('starttls'):
|
||||
s.starttls()
|
||||
if EMAIL.get('user'):
|
||||
s.login(EMAIL['user'], EMAIL['password'])
|
||||
s.sendmail(EMAIL['user'], [ch['email']], msg.encode('utf-8'))
|
||||
s.sendmail(EMAIL['user'], [ch['email']], msg.as_string())
|
||||
s.quit()
|
||||
return True
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user