app.config.update()无法用于更新邮箱配置么?


#1

您好,

我的程序,我想让它根据要发邮件的不同,使用不同的发件箱,我发现在flask shell中,可以使用app.config.update()的方式,更新邮箱配置,如图所示。但是把它放到邮件处理函数中,根据不同的邮件类型去从数据库抓取不同的邮箱配置,但是怎么做,最后发出的邮件用得都是.env里面的配置,我想问,是否这个方法,不能用于更新邮箱配置,或者说,flask_mail只能从.env里面读取?


#2

纯代码文本或命令行输出建议使用代码块格式化,请不要使用图片上传。

插入代码块的方式:除了将所有代码缩进四格,更方便的插入代码块方式是使用三个连续的反引号作为开始和结束标记,比如:

```
def hello():
    return ‘Hello World’
```

会被渲染为:

 def hello():
     return 'Hello World'

具体请看置顶帖子 技术提问帖发帖规则(创建提问帖前必读)


#3

然后你这个问题。

app.config['MAIL_SERVER'] = 'smtp.163.com'

这样写不是更方便吗?

app.config是dict类型,一般来说dict.update()的传参是一个dict,也就是

app.config.update({'MAIL_SERVER':'smtp.163.com'})

这样,应该就可以了。


#4

谢谢,我尝试一下


#5

我觉得问题出在 Flask-Mail 的实现上,它内部使用一个类实例存储发信配置信息,而不是每次都从 Flask 的配置去读取,所以更新 Flask 配置不会影响发信配置信息。

有没有可能发信的时候(在发信函数里)重新创建扩展类实例(更新 Flask 配置后)?可以试试。


#6

前面说错了。

flask的扩展一般会缓存app.config相关配置,动态改current_app.config不一定会同步过去——同李辉老师说的是一个意思。


#7

谢谢老师给予的思路,我回去尝试一下。