事情的起因是我总是没法收到我站点上的评论,我一直以为是 waline 超时了导致发送邮件失败,直到我打开了发邮件的那个邮箱,不看不知道,一看吓一跳!好家伙,根本就不是 waline 的锅,是163邮箱把我的邮件当作垃圾邮件拒收了!好吧好吧,我去设置白名单总行了吧。然而我设置了白名单之后仍然是收不到邮件......163我:RNM退钱!

RNM!退钱!
RNM!退钱!

我实在是没有搞懂163白名单的逻辑,它上面明明白白的写着 将发件人添加到白名单中,可避开反垃圾误判 然而实际上...

送信失败
送信失败

然后我去反馈,石沉大海...好吧网易,你了不起,你清高,你1080p!我不用你不就是了!

于是我来到 waline 的后台设置,结果发现没有能够改管理员邮箱的地方,又去翻看官方文档,欸!也没有...没办法,只能用笨方法——改数据库了。

我的waline数据库是使用的Leancloud,所以我登陆,选中数据,更改邮箱一气呵成,就大功告成了。然而我想着,既然这里的邮箱已经改了,那原来的评论我也改一下邮箱吧!欸,是不是很合理,十分合理对不对。

然后?你问我然后呀?然后就bug了......

waline后台是支持导出导入数据的,就直接导出了 json数据,然后直接 Ctrl + H 替换了所有邮箱,按理来说改个邮箱应该是没有问题的。但是!当我把改好的文件导入waline后台的时候,每次快成功就报500错误。

去站点查看发现我回复的消息全部消失了,其他人的评论倒是都在。我都不知道哪里出了问题,看了看leancloud数据库,发现Comment(评论)都有显示,然而Users(用户)导入失败,全是空白,重新操作了几遍无果,只得去翻issue。欸嘿,上帝关一扇门,打开一扇窗,还真给我找着了

不过有个问题是......这个issue说问题已经解决了,但是我重新部署了几遍waline也是无果 我收回前言,上帝把窗也关上了...

然后我又盯上了leancloud的导入导出,因为leancloud每次导入只能导入一个 Class ,只得将原 json 拆成两部分CommentUsers 然后导入。然后欸嘿,成功了!他导进去了!而且网站的评论也完全显示了。

我长呼一口气,瘫坐在椅子上,正当我瘫软的手指按下发送键想庆祝一下的时候,咣当的一下,那令人不悦的提示音又响起了

Invalid value type for field 'insertedAt',value '{"__type":"Date","iso":"2022-06-26T04:42:22.223Z"}',expect type is {:type "String"},but it is '{:type "Date"}'. [400 POST https://lixp20cb.api.lncldglobal.com/1.1/classes/Comment]

采访一下当事人:你现在什么感受?

我:现在呢,就是后悔,非常后悔。

你当时为什么想着要去改其他地方的邮箱呢?

我:我当时大抵是脑子进水了...

幸运的是,我在issue中找到了答案

LeanCloud 那边没有办法提供工单,Waline 后台提供的导入方法也是一样会报相同的错误,估计是 API 的问题,另外发现导出的数据会把 objectId, CreateAt 等字段的数据也包括在内,但这些都是保留字段,不能使用的。

你可以在国内版导出的json文件中尝试把insertedAt的字段修改为如下格式,再试着导入一下试试:

"insertedAt":{"__type":"Date","iso":"2014-03-25T17:28:00.000Z"}

我一看,这得了,我300多条评论数据,每条数据改一下 insertedAt ,我一条条改得到明年去了。一条条改是不可能的,这辈子都不可能的,只能勉勉强强写写正则这样子(临时抱佛脚)

expression
"insertedAt": "([^)]*),
查找替换为
"insertedAt":{"__type":"Date","iso":"$1},

然后重新导入,成功!站点显示成功!激动的心颤抖的手按下发送键......评论成功!

搞了快一个下午,本来只是想换个邮箱,未曾想会出现这么多问题,不过至少现在邮件是不会拦截的啦