| Files | Last commit | Last update |
|---|---|---|
feat: 新增邮箱自动配置(Autoconfig)与站点图标 新增 Thunderbird 风格的多级邮箱自动配置,建账号时只需填写显示名、 邮箱地址和密码,无需手工填写 IMAP/SMTP 主机、端口、加密方式: 1. autoconfig.<域名>/mail/config-v1.1.xml 2. <域名>/.well-known/autoconfig/mail/config-v1.1.xml 3. Thunderbird 中央数据库 ISPDB 4. 查 MX 记录反推真实服务商后再查 ISPDB(自有域名托管场景) 5. 上述均失败时,按 imap./smtp./mail./mx. 等常见主机名与端口逐个实测 每级拿到的配置都会用真实连接 + 真实密码验证,验证不通过则继续下一级。 识别到 Gmail / Outlook 等已禁用明文密码的服务商时,返回 OAuth2 提示 引导用户改用授权登录,而不是给出无意义的失败。 新增文件: - Services/Autoconfig/{AutoconfigService,AutoconfigModels,ConfigXmlParser, MxResolver,OAuth2Registry,ServerProber}.cs - 依赖 DnsClient(MX 解析) - 前端自动建账号流程与站点图标 icon-256.png / app-icon-m.ico | 1 month ago | |
feat: 实现 OAuth2 授权登录,支持 Outlook / Gmail 等禁用密码的服务商 微软与 Google 已对个人账号关闭 IMAP/POP 的基本认证(应用专用密码同样 不可用),此前这类邮箱根本无法添加。本次补上完整的授权码流程。 凭据分工: - refresh token:长效,Data Protection 加密后存 Account.EncryptedSecret - access token:短效(约 1 小时),只缓存于内存,重启后用 refresh token 现换 新增: - Services/OAuth2Service.cs:授权 URL 构造、授权码换令牌、令牌续期、 access token 内存缓存。微软每次刷新都会轮换 refresh token,拿到新的 必须写回数据库,否则续期一次后旧 token 就作废。 - Endpoints/OAuth2Endpoints.cs: POST /api/oauth2/start 生成授权页地址 GET /oauth2/callback 服务商回调,建账号后跳回首页 回调刻意不放 /api/ 前缀下——AccessTokenMiddleware 只校验 /api/, 否则配置了访问令牌时会把服务商的回调拦在门外。 - OAuth2Registry 增加完整端点表与 AuthExtraParams。Google 必须带 access_type=offline&prompt=consent 才会下发 refresh token, 否则只能拿到一小时失效的 access token,服务端重启后无法续期。 改动: - Account 增加 OAuth2Issuer,用于找回对应的令牌端点与客户端凭据。 - IMAP 同步与 SMTP 发送在 OAuth2 模式下改用现换的 access token (MailKit SaslMechanismOAuth2),密码模式不变。 - 自动建账号允许留空密码:只接受 OAuth2 的服务商用不上密码, 留空时只做识别不做登录验证,并提示改用 OAuth2 授权。 - 前端:失败且返回了 OAuth2 端点时显示「用 OAuth2 授权登录」按钮; 回调跳回首页后读取 ?oauth2= 参数给出结果提示。 客户端凭据通过 appsettings.json 的 OAuth2:Microsoft / OAuth2:Google 配置,未配置时接口明确报错而不是静默失败。 已验证:空密码 + @hotmail.com 正确返回 RequiresOAuth2 与微软端点; /api/oauth2/start 在未配置 ClientId 时返回明确错误;既有 QQ 账号在 迁移后完好(6 个文件夹)。 | 1 month ago | |
feat: 新增邮箱自动配置(Autoconfig)与站点图标 新增 Thunderbird 风格的多级邮箱自动配置,建账号时只需填写显示名、 邮箱地址和密码,无需手工填写 IMAP/SMTP 主机、端口、加密方式: 1. autoconfig.<域名>/mail/config-v1.1.xml 2. <域名>/.well-known/autoconfig/mail/config-v1.1.xml 3. Thunderbird 中央数据库 ISPDB 4. 查 MX 记录反推真实服务商后再查 ISPDB(自有域名托管场景) 5. 上述均失败时,按 imap./smtp./mail./mx. 等常见主机名与端口逐个实测 每级拿到的配置都会用真实连接 + 真实密码验证,验证不通过则继续下一级。 识别到 Gmail / Outlook 等已禁用明文密码的服务商时,返回 OAuth2 提示 引导用户改用授权登录,而不是给出无意义的失败。 新增文件: - Services/Autoconfig/{AutoconfigService,AutoconfigModels,ConfigXmlParser, MxResolver,OAuth2Registry,ServerProber}.cs - 依赖 DnsClient(MX 解析) - 前端自动建账号流程与站点图标 icon-256.png / app-icon-m.ico | 1 month ago | |
feat: 新增邮箱自动配置(Autoconfig)与站点图标 新增 Thunderbird 风格的多级邮箱自动配置,建账号时只需填写显示名、 邮箱地址和密码,无需手工填写 IMAP/SMTP 主机、端口、加密方式: 1. autoconfig.<域名>/mail/config-v1.1.xml 2. <域名>/.well-known/autoconfig/mail/config-v1.1.xml 3. Thunderbird 中央数据库 ISPDB 4. 查 MX 记录反推真实服务商后再查 ISPDB(自有域名托管场景) 5. 上述均失败时,按 imap./smtp./mail./mx. 等常见主机名与端口逐个实测 每级拿到的配置都会用真实连接 + 真实密码验证,验证不通过则继续下一级。 识别到 Gmail / Outlook 等已禁用明文密码的服务商时,返回 OAuth2 提示 引导用户改用授权登录,而不是给出无意义的失败。 新增文件: - Services/Autoconfig/{AutoconfigService,AutoconfigModels,ConfigXmlParser, MxResolver,OAuth2Registry,ServerProber}.cs - 依赖 DnsClient(MX 解析) - 前端自动建账号流程与站点图标 icon-256.png / app-icon-m.ico | 1 month ago | |
fix(oauth2): 注册步骤补上缺失的「添加 API 权限」,并把 access_denied 翻成人话 在 Azure 登记应用后授权被拒: access_denied:The user has denied access to the scope requested by the client application. 这是微软回的原话,原样抛给用户等于什么都没说——既没讲是哪一步配错了, 也没讲该去哪儿改。根因有两处,而它们都不体现在 Client ID 上, 只能在我们给出的登记步骤里明说: 1. 应用注册完默认只带 User.Read,没有 IMAP/SMTP 那两个委托权限。 Azure 不会因为你在授权 URL 里请求了它们就自动配上——必须到 「API 权限 → 添加权限」显式添加。漏了这步,服务商就只回一句拒绝。 2. Azure 新建应用默认选「仅此组织目录」,而 Outlook.com / Hotmail / Live 属于个人 Microsoft 账户,那种配置下个人邮箱必然在同意页被拒。 于是: - RegistrationHint 补上这两步;并写明「一个注册应用可供任意多个邮箱账号 使用,换邮箱不需要重新注册」——这正是「换了邮箱要不要重新登记」的答案 - CompleteAsync 出错时按邮箱域名反查服务商,把 access_denied 翻译成各自 该查的项目。两家成因完全不同:微软几乎总是应用没配好,Google 通常是 没加入测试用户、或用户在同意页取消了某项权限 - 出错分支顺带消费掉待授权 Cookie:这次会话已不可能走完,留着会干扰 下一次 state 校验(原先错误路径直接返回,Cookie 一直挂着) 验证:起实例调 /api/settings/oauth2,确认新步骤已下发且无未渲染的 markdown 星号(这段文案经 escapeHtml 输出,不支持加粗语法);模拟回调 error=access_denied,结果 Cookie 里拿到了带指引的消息。 跳转到微软的真实授权流程未验证。 | 26 days ago | |
fix(mail): 账号验证改用协议握手预筛,OAuth2 发送失败时重试一次 两处都是邮件服务端连接上的可靠性改进。 ServerProber:候选主机原先靠 DNS 解析过滤,现在改用协议握手筛选。密码填错时差别 最大——原先每个候选都要等一次完整的认证超时(8 秒 × 候选数),现在是「N 次握手 + 极少数几次认证」,用户感知到的等待时间降一个量级。 SmtpSendService:OAuth2 最多投两次,第一次用缓存 token,被判废则丢掉缓存重换一次 再投;与 IMAP 同步侧的处理对称。用户点「发送」时等待的是一个明确的结果,不应因为 一次 token 错位就整封失败。 同时将 tmp/ 加入 .gitignore——本轮的项目体检报告与开发计划是临时分析产物, 不属于源码。 | 1 month ago |
| Files | Last commit | Last update |
|---|---|---|
| 1 month ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 26 days ago | ||
| 1 month ago |