Flask-Mail 发出去的邮件到底长什么样?密送在哪里?测试里怎么不真发?在请求里同步发会不会卡住?这篇自己起一个 SMTP 服务接收邮件,把这些逐个量出来。
信封:MAIL FROM=noreply@lab.test RCPT TO=['u@x.test']
From: noreply@lab.test
To: u@x.test
Subject: 订单 #42 已发货
Content-Type: multipart/mixed; boundary="===============7694008138832197402=="
MIME-Version: 1.0
原始 Subject 头(未解码): =?utf-8?b?6K6i5Y2VICM0MiDlt7Llj5HotKc=?=
MIME 结构: [('multipart/mixed', None), ('multipart/alternative', None), ('text/plain', 'utf-8'), ('text/html', 'utf-8')]上一篇:Flask-Limiter;下一篇:Flask-SocketIO 长连接。
信封 RCPT TO: ['hidden@x.test', 'c@x.test', 'a@x.test', 'b@x.test']
头 To: a@x.test, b@x.test | Cc: c@x.test | Bcc 头是否存在: False | Reply-To: support@lab.test
MIME 结构: [('multipart/mixed', None), ('text/plain', None), ('text/csv', 'r.csv')]TESTING=True 发 1 封:outbox 里 1 封,SMTP 服务端新增 0 封;扩展里的 suppress = True(配置里并没有写入 MAIL_SUPPRESS_SEND 这个键:False) outbox[0].subject / recipients: t ['u@x.test'] TESTING=True 但显式 MAIL_SUPPRESS_SEND=False:服务端新增 1 封
主题带换行 → BadHeaderError: 收件人带换行 → BadHeaderError:
在应用上下文之外构造 Message(没有显式 sender)→ RuntimeError: Working outside of application context. 同步 send:515 ms;线程里 send:启动线程 0.51 ms 就返回(邮件在后台继续,总共 520 ms)
生产里更常见的是任务队列(Celery 等),本篇没有验证。
ConnectionRefusedError: [Errno 61] Connection refused(耗时 5 ms) 视图里不处理这个异常 → HTTP 500
每封各 mail.send:131 ms,服务端看到 10 个 SMTP 会话;一个 mail.connect():60 ms,1 个会话