Jinnrry/PMail

小米自带手机邮箱无法收件,数据库查询错误

Closed this issue · 5 comments

请说明问题 / Describe the bug
web端正常收发件,小米自带手机邮箱正常登录但是无法收件,可以正常发送邮件

日志信息 / Log

Apr 06 12:31:49 mail. pmail[15563]: [error][2024-04-06 12:31:49][1799e82d6610d034f9bd3ccbe62b09b0][/home/runner/work/PMail/PMail/server/pop3_server/action.go:171]sql: Scan error on column index 1, name "size": converting NULL to int64 is unsupported
Apr 06 12:33:18 mail. pmail[15563]: [error][2024-04-06 12:33:18][1799e82d6610d08db6f93ccb12b2e2b0][/home/runner/work/PMail/PMail/server/pop3_server/action.go:171]sql: Scan error on column index 1, name "size": converting NULL to int64 is unsupported

后续直接崩了,然后重启,这里是部分日志
Apr 06 12:48:18 mail. pmail[15563]: [error][2024-04-06 12:48:18][1799e82d6610d41192513ccb805ca8b0][/home/runner/work/PMail/PMail/server/pop3_server/action.go:171]sql: Scan error on column index 1, name "size": converting NULL to int64 is unsupported
Apr 06 12:51:41 mail. pmail[15563]: fatal error: concurrent map writes
Apr 06 12:51:41 mail. pmail[15563]: goroutine 590 [running]:
Apr 06 12:51:41 mail. pmail[15563]: reflect.mapassign_faststr0(0xa0e200, 0xa05ca0?, {0xc0004760c0?, 0xd37ce8?}, 0x9f59c0?)
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/runtime/map.go:1376 +0x25
Apr 06 12:51:41 mail. pmail[15563]: reflect.mapassign_faststr(0xa05ca0?, 0xc0003b0d70?, {0xc0004760c0, 0x5}, 0x19?)
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/reflect/value.go:3837 +0xa9
Apr 06 12:51:41 mail. pmail[15563]: reflect.Value.SetMapIndex({0xa0e200?, 0xc0000744e8?, 0x315?}, {0x9f59c0, 0xc0003b0dd0, 0x98}, {0xa05ca0, 0xc0003b0d70, 0x194})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/reflect/value.go:2402 +0x225
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.(*decodeState).object(0xc0003663f0, {0xa0e200?, 0xc0000744e8?, 0x328?})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:797 +0x13c5
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.(*decodeState).value(0xc0003663f0, {0xa0e200?, 0xc0000744e8?, 0x6?})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:374 +0x3e
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.(*decodeState).object(0xc0003663f0, {0xa44e20?, 0xc000213150?, 0x36f?})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:755 +0xd08
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.(*decodeState).value(0xc0003663f0, {0xa44e20?, 0xc000213150?, 0x3?})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:374 +0x3e
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.(*decodeState).object(0xc0003663f0, {0x9ea900?, 0xc000213140?, 0x1198a20?})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:755 +0xd08
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.(*decodeState).value(0xc0003663f0, {0x9ea900?, 0xc000213140?, 0x7f26c8ba0108?})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:374 +0x3e
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.(*decodeState).unmarshal(0xc0003663f0, {0x9ea900?, 0xc000213140?})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:181 +0x133
Apr 06 12:51:41 mail. pmail[15563]: encoding/json.Unmarshal({0xc000430700, 0x293, 0x380}, {0x9ea900, 0xc000213140})
Apr 06 12:51:41 mail. pmail[15563]: /opt/hostedtoolcache/go/1.21.7/x64/src/encoding/json/decode.go:108 +0x111
Apr 06 12:51:41 mail. pmail[15563]: pmail/hooks.(*HookSender).ReceiveParseBefore(0xc000074a00, 0xc0000744b0, 0xc0002220c0)

你用的是什么数据库?什么版本的? SQL执行出问题了,导致后续panic了。

我拿MySQL8.3.0和SQLite都没复现出来,你是改过表结构?或者是很老的数据库?
或者你直接在你数据库里面执行一下
select count(1) as `num`, sum(length(text)+length(html)) as `size` from email where type = 0
看看什么结果

我拿MySQL8.3.0和SQLite都没复现出来,你是改过表结构?或者是很老的数据库? 或者你直接在你数据库里面执行一下 select count(1) as `num`, sum(length(text)+length(html)) as `size` from email where type = 0 看看什么结果

我用的就是自带的SQLite,应该就是小米邮箱的问题

小米邮箱应该是执行了STAT命令,查询邮件总数和全部的邮件大小。小米邮箱逻辑是没问题的。

应该是数据库里面表结构或者是某条数据有问题,导致这条统计SQL执行出问题了。但是我始终复现不出来。
select count(1) as num, sum(length(text)+length(html)) as size from email where type = 0