Repository navigation
Releases
Releases · otscup/otsmail-android
OTSMail Android 0.3.4
新增功能
本版没有新增面向用户的功能,以第三方邮箱连接安全加固、协议健壮性与详情页操作一致性调整为主。
变更
- 第三方邮箱详情页底栏与主账号统一:改用与主账号详情相同的图标底栏(回复 / 回复全部 / 转发 / 删除 / 更多),五项对齐;星标、标记已读/未读收进「更多」浮层。
- 第三方链路上不支持的服务端能力明确置灰:「移动到分类」「翻译 / AI 摘要 / 智能回复」「标记为垃圾邮件」在「更多」中置灰,点击会说明这些能力依赖 otsmail 服务端、第三方邮件不在服务端库中,需在邮箱网页版操作。
修复
- 补上 TLS 主机名校验:探测、IMAP、SMTP、STARTTLS 共七个调用点统一走
ExtTls.wrap,握手前显式设置endpointIdentificationAlgorithm = "HTTPS"。此前裸SSLSocket只验证书链、不验主机名,而这条通道传输的是明文 IMAPLOGIN与 SMTPAUTH PLAIN。 - 无 UIDPLUS 的服务器上删除不再误删:此前在没有 UIDPLUS 时会退化成无条件
EXPUNGE,清掉信箱里所有带\Deleted的邮件(可能包括其他客户端标记待删的信)。现在只 COPY 到 Trash 并标记\Deleted,不再执行EXPUNGE。 - IMAP 协议响应增加大小上限:单行协议响应上限 64KB,单封邮件 literal 上限 32MiB;超限明确报错并中止读取,不再无界分配内存,也不会把超长的邮件正文当成协议行继续读。
data:附件改为解码前估算大小:先按 Base64 文本长度估算解码后字节数,超过 10MB 直接拒绝,避免整份解码后才发现超限导致峰值内存不受控。
已知问题
- 没有 UIDPLUS 的 IMAP 服务器上,删除只把邮件复制到 Trash 并标记
\Deleted,不会立即从当前信箱的服务器存储中物理清除;多数服务器会在自身清理周期处理,表现为「稍后才消失」。这是为避免误删其他邮件的有意选择,不是遗漏。 - TLS 主机名校验开启后,证书主机名与连接域名不匹配的服务器会直接失败,不再降级放行;个别配置不规范的企业邮箱可能因此无法连接。
安装提示
- 同签名可直接覆盖安装,登录态与本地邮件缓存保留。
- 覆盖安装会重置通知权限(
POST_NOTIFICATION回到 ignore),装完需到系统设置里手动重新开启一次,否则新邮件提醒不会弹出。 - 回退旧版需要先卸载,本地邮件缓存会清空。
本版仍未经真机验证的项
- TLS 主机名校验:只在本地编译与单元测试中通过,尚未连接真实 IMAP/SMTP 服务器(QQ / 163 / Gmail 都未实测)。
- 无 UIDPLUS 的删除路径:未在缺少 UIDPLUS 的真实服务器上验证「复制到 Trash + 标记
\Deleted、不 EXPUNGE」的实际表现与后续服务器清理时机。 - IMAP 响应上限:未构造超限响应做端到端验证,只确认正常路径与既有单测不受影响。
- 第三方邮箱详情页新底栏与「更多」浮层:未做真机交互验证,包括窄屏排布、深色主题、浮层位置与置灰项提示文案。
data:附件估算拒绝:未用接近 10MB 的真实data:附件做真机验证。
正式签名包,可直接覆盖升级。SHA-256:837ef54b4cfd50adaa0d61c588e09b47ef80628cb7449410fb8dff2b091373e1
该版本的 R8 混淆映射不随 Release 公开,仅归档在本次 Actions artifact(保留 90 天,文件名 mapping-v0.3.4.txt)。
OTSMail Android 0.3.3
新增功能
本版以扫码修复为主,没有新增功能。
变更
- 扫码入口位置:从「个人设置」挪到侧边栏(抽屉)头像行右侧的扫码按钮;设置页不再保留第二个入口。长按桌面图标的「扫一扫」快捷方式与
otsmail://qr深链保持不变。
修复
- 二维码完全无法识别:此前用 ZXing 的
PlanarYUVLuminanceSource.rotateCounterClockwise()旋转 90/270 度的相机帧,而该类型不支持旋转,每帧都会抛异常又被静默吞掉,界面表现为「相机有画面但扫什么都没反应」。现改为按rowStride(含行尾 padding)自行取出 Y 平面并做 90/180/270 度旋转,再交给 ZXing 解码。 - 分析分辨率过大:分析流此前会被选到 3024×3024,每帧旋转与二值化开销很大;现固定目标 1280×720(实测落到 960×720),明显降低每帧耗时。
- 没有自动对焦:预览流与分析流都设置
CONTROL_AF_MODE_CONTINUOUS_PICTURE,进入扫码页后每 2.5 秒对画面中心补一次对焦,并支持点击屏幕对焦到点击位置。 - 没有成功反馈:首次识别到 OTSMail 登录二维码时播放一声短提示音并短震动一次,命中后立即停止分析,不会重复触发。
- 无效二维码静默无提示:识别到二维码但不是 OTSMail 格式时,明确提示「这不是 OTSMail 登录二维码」;连续扫到同一张无效码不会反复提示。
已知问题
- 扫码端到端(网页出码 → App 扫码确认 → 网页登录)仍需真机完整走通验证。服务端
/login/qr已确认线上可用(返回 200 与真实票据),不再存在「未部署」问题。
安装提示
- 同签名可直接覆盖安装,登录态与本地邮件缓存保留。
- 覆盖安装会重置通知权限(
POST_NOTIFICATION的 app-op 回到 ignore),装完需要到系统设置里手动再开启一次,否则新邮件提醒不会弹出。
本版仍未经真机验证的项
- 有效二维码的完整链路:本版只通过 adb 日志确认了「帧能到达、90° 旋转不再抛异常、解码返回 null(画面里没有码)」,尚未在真机扫到真实网页二维码并走完确认登录。
- 提示音与震动:实际音量、时长与听感未验证。
- 对焦效果:自动对焦与点屏对焦后的实际识别距离、暗光成功率未验证。
- 无效二维码提示:只在代码层确认提示文案与去重逻辑,未在真机对照测试。
- 入口位置:抽屉头像行右侧的扫码按钮在窄屏/长邮箱地址下的排布未在真机确认。
正式签名包,可直接覆盖升级。SHA-256:fbba03f5c60bea2fdc942db3a5e7f1e1a9b25a03976168a011f791475b44e2bf
该版本的 R8 混淆映射不随 Release 公开,仅归档在本次 Actions artifact(保留 90 天,文件名 mapping-v0.3.3.txt)。
OTSMail Android 0.3.2
新增功能
- 扫码登录:网页端生成二维码 → App 内扫码并确认 → 网页端完成登录。入口在「个人设置 → 扫一扫」,也可长按桌面图标选择「扫一扫」;未登录时会先引导登录再继续扫码。
- 验证码一键识别与复制:邮件正文里识别到验证码时,详情页顶部出现「复制验证码」;通知栏与弹窗提醒(heads-up)上提供「复制验证码」按钮,不用先打开 App。识别只认验证码类关键词附近的短数字,订单号、快递单号、金额、日期、手机号等不会误判。
变更
- 第三方邮件提醒改为「保持长连接(第三方邮件提醒)」开关(外部邮箱设置页):
- 开:第三方邮箱走 IMAP IDLE,收到新邮件立即提醒(即原来「自动 / 始终用长连接」的行为);
- 关:停掉 IDLE 服务,不连长连接、不启动 15 分钟轮询兜底、不弹第三方通知;收件箱手动同步与下拉刷新照旧。
- 原「自动 / 始终用长连接 / 只用设备推送(调试)」三选一已删除,不再保留并存的调试项。
- 存量值兼容:
auto/idle读作开;fcm(旧的「只用设备推送(调试)」,实际收不到提醒)读作关;未设置或未知值读作开。
- otsmail 自身邮件的 FCM 推送在任何开关状态下都不受影响:不注销 token、不改登记、不干扰站内通知。
修复
本版以新增功能与设置语义修正为主,没有单独的缺陷修复项。
已知问题
- 扫码端到端未验证:依赖服务端先部署
/login/qr与/my/qr/confirm(当前线上可能 404);服务端未部署时网页取码与 App 确认都会失败。 - 服务端 confirm 不返回发起方 IP/UA,App 的确认框只能显示通用文案,用户无法核对来源设备与位置。
安装提示
- 同签名可直接覆盖安装,登录态与本地邮件缓存保留。
- 覆盖安装会重置通知权限(
POST_NOTIFICATION的 app-op 回到 ignore),装完需要到系统设置里手动再开启一次,否则新邮件提醒不会弹出。 - 回退旧版需要先卸载,本地邮件缓存会清空。
本版仍未经真机验证的项
- 扫码登录端到端:未在服务端部署完成后跑通「网页出码 → App 扫码确认 → 网页登录」全链路。
- 相机表现:真机相机预览方向、对焦、暗光下的识别成功率未验证。
- 桌面快捷方式:「长按图标 → 扫一扫」未在真实启动器上确认。
- 通知栏复制:复制 action 在锁屏与通知折叠态下的可见性、可点击性未验证。
- 关闭提醒后的服务停止:开关拨到关后
ExtIdleService停止、轮询兜底不再启动,目前只做了代码层确认,未在真机上观察功耗与通知残留。
正式签名包,可直接覆盖升级。SHA-256:a146a8d9d2ca19baac04be162fd34bb184593ea29c028fdf7b948d22cf96e7bf
该版本的混淆映射见附件 mapping-v0.3.2.txt(SHA-256:31c5d1d68660a4aaa102ed72d25d650e321aebb7baa0b97b2906e16a93882a95),用于还原 R8 混淆后的崩溃堆栈。