邮件里「查看物流」点开只带到了订单号前半段,运单号那个参数丢了,链接在源码里写成 a=1&b=2。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

from html import escape
href = escape('https://example.com/o?no=%s&bill=%s' % (no, bill), quote=True)

href 里的 & 没有写成 &,HTML 解析时被当成实体开头,后面的参数被截断。邮件客户端对不规范 HTML 的容错比浏览器差,问题更容易暴露。这一点先确认清楚,后面就不用反复试。

「邮件链接参数转义」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

具体做法是,href 里的 & 一律写成 &,或者整条链接做 HTML 转义;生成链接后解析一次 query,确认参数个数对得上;点开邮件里的链接,看落地页拿到几个参数。

改完照着核一遍,点开链接后落地页能拿到订单号和运单号两个参数。

作者 9823189