diff --git a/.github/release-notes/v1.2.20.md b/.github/release-notes/v1.2.20.md new file mode 100644 index 0000000..06c532d --- /dev/null +++ b/.github/release-notes/v1.2.20.md @@ -0,0 +1,3 @@ +- 调整邮件转发规则:账号级转发固定作用于所有邮箱,并与单个邮箱追加的转发目标同时生效。 +- 优化单个邮箱转发设置:账号级目标默认勾选、置顶并锁定,邮箱及转发地址按数字和字母排序,目标较多时可查看完整列表。 +- 优化 Telegram 版本频道通知排版:使用精简标题、分层说明和完整更新链接,提升手机端阅读体验。 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index ec522ca..cbde6f0 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -289,18 +289,20 @@ jobs: sections = [] for index, entry in enumerate(entries, 1): - parts = re.split(r"[,;。]", entry, maxsplit=1) + parts = re.split(r"[::]", entry, maxsplit=1) + if len(parts) == 1: + parts = re.split(r"[,;。]", entry, maxsplit=1) title = parts[0].strip() description = parts[1].strip() if len(parts) > 1 else "" - section = f"{index:02d} {html.escape(title)}" + section = f"{index:02d} · {html.escape(title)}" if description: - section += "\n" + html.escape(description.rstrip("。") + "。") + section += "\n
" + html.escape(description.rstrip("。") + "。") + "" sections.append(section) tag = os.environ["RELEASE_TAG"] - prefix = f"NewSzxcn Email {html.escape(tag)}\n新版本现已发布\n\n本次更新\n\n" + prefix = f"NewSzxcn Email {html.escape(tag)}\n新版本现已发布\n\n更新内容 · {len(sections)} 项\n\n" release_url = html.escape(os.environ["RELEASE_URL"], quote=True) - footer = f'\n\n🔗 查看本次更新' + footer = f'\n\n查看完整更新说明 ↗' available = max(0, 3600 - len(prefix) - len(footer)) visible_sections = [] used = 0 diff --git a/apps/api/internal/app/app_test.go b/apps/api/internal/app/app_test.go index 52202b8..a2a3a1f 100644 --- a/apps/api/internal/app/app_test.go +++ b/apps/api/internal/app/app_test.go @@ -2756,8 +2756,20 @@ func TestInboundForwardingSettingsAndDelivery(t *testing.T) { if err := a.db.QueryRow(`SELECT recipients_json FROM send_queue WHERE source=? AND sent_message_id=?`, sendSourceForwarding, secondID).Scan(&recipientsJSON); err != nil { t.Fatal(err) } - if !strings.Contains(recipientsJSON, "mailbox-forward@example.test") || !strings.Contains(recipientsJSON, "mailbox-forward-two@example.test") || strings.Contains(recipientsJSON, "account-forward@example.test") || strings.Contains(recipientsJSON, "account-forward-two@example.test") { - t.Fatalf("mailbox forwarding should override account target, recipients=%s", recipientsJSON) + if !strings.Contains(recipientsJSON, "account-forward@example.test") || !strings.Contains(recipientsJSON, "account-forward-two@example.test") || !strings.Contains(recipientsJSON, "mailbox-forward@example.test") || !strings.Contains(recipientsJSON, "mailbox-forward-two@example.test") { + t.Fatalf("mailbox forwarding should include account and mailbox targets, recipients=%s", recipientsJSON) + } + + if code := admin.do("POST", "/api/me/forwarding/account", map[string]any{"targetEmails": []string{"account-forward-two@example.test"}}, &settings); code != http.StatusOK { + t.Fatalf("update account forwarding after mailbox forwarding code=%d settings=%+v", code, settings) + } + raw = []byte("From: sender@example.test\r\nTo: admin@lanqin.local\r\nSubject: account changed\r\nMessage-ID:
暂未添加验证邮箱,请先点击「管理验证邮箱」添加。
} -提示:每个邮箱可单独设置多个转发目标(点击邮箱列表中的「转发」按钮),单独设置会覆盖账号级配置。
+提示:点击邮箱列表中的「转发」按钮,可在账号级目标之外追加该邮箱自己的转发目标。
{externalImapEnabled && ( @@ -1390,16 +1402,42 @@ function MailboxManagement({账号级目标已置顶锁定,不能在单个邮箱里取消;下方可追加邮箱单独目标。
}暂未添加验证邮箱,请先点击「管理验证邮箱」添加。
}