🌲[flask-mailman] 支持使用 non-ascii 邮箱地址

项目: waynerv/flask-mailman
相关 issue:Please support Non-ASCII mailbox names (RFC 6530) · Issue #38 · waynerv/flask-mailman · GitHub
难度:中等

支持在邮箱地址中使用非 non-ascii 字符,比如类似「hi@亚马逊.中国」这样的邮箱。

PR 需要包含:

  • 功能代码
  • 测试
  • 更新 Changelog

我要认领(jingfelix

smtplib 在 3.5 版本后为 sendmail 方法的 mail_options 变量添加了 SMTPUTF8 选项。flask-mailmanbackends/smtp.py#141 调用这一方法发送邮件时,并未设置 mail_options,也没有提供设置项,因此在使用非 ASCII 邮箱时,会出现被服务器拒绝的情况。

这里有两种解决方案:

  1. 默认采用 SMTPUTF8flask-mailman 要求 Python 版本 >= 3.7,因此不存在兼容性问题。

    • 这种方案可能出现的问题:当服务器不支持 SMTPUTF8 时,发送请求将被拒绝,抛出 SMTPNotSupportedError 异常。

      • 一种解决方案:捕获 SMTPNotSupportedError ,尝试不使用 SMTPUTF8 再次发送。若仍被拒绝则抛出异常。
  2. 为所有发送邮件的方法/函数添加 mail_options 选项。

参考:

1 Like

我个人觉得第二种方式影响小一些,把是否使用交给用户来决定。不过具体实现方式的话,创建一个配置变量是不是更好一些?这样不用改动所有方法/函数。

1 Like

麻烦更新一下文档和 changelog。文档里介绍这个新增加的配置时,可以用设置 SMTPUTF8 作为示例,介绍可以用这个来开启对 non-ASCII 地址的支持。

PR 已合并,感谢!