发送消息时禁用登录 Flask-Mail

Posted

技术标签:

【中文标题】发送消息时禁用登录 Flask-Mail【英文标题】:Disable logging in Flask-Mail when sending message 【发布时间】:2019-10-09 17:46:51 【问题描述】:

当通过 Flask-Mail 发送任何消息时,如下所示,带有mail.send(msg) 的最后一行也会导致邮件标题和内容被记录。

Message("Hello", sender="from@example.com", recipients=["to@example.com"])
msg.body = 'anything'
mail.send(msg)

由于我的邮件可能包含敏感信息,我想完全禁用此日志记录。然而,在使用日志模块时,我找不到为 Flask-Mail 配置的记录器。

如何在 Flask-Mail 中禁用登录?

【问题讨论】:

我知道这个问题已经接受了答案,但是我刚才遇到了同样的问题,我注意到只有当我的 bash 设置环境变量 FLASK_ENV=development 时,app.extensions['mail'].debug 才是True,当删除这个环境变量FLASK_ENV 并保留它在生产中的状态时,app.extensions['mail'].debugFalse。考虑到这一点,我不需要在启动 Mail 类时覆盖默认功能,并且在 development 环境中打开它时我可以更轻松地调试它:) 【参考方案1】:

想出了这个:

Flask-Mail 使用 Python 的 smtplib 发送邮件。 smtplib 不使用 logging 模块,但它会将调试信息打印到 stderr。

smtplib 包括以下方法:

def set_debuglevel(self, debuglevel):
    """Set the debug output level.

    A non-false value results in debug messages for connection and for all
    messages sent to and received from the server.

    """
    self.debuglevel = debuglevel

如果我们使用 Flask-Mail,我们可以像这样在初始化我们的应用程序时设置这个变量:

app = Flask(__name__)
mail = Mail(app)
app.extensions['mail'].debug = 0

任何输出现在都被抑制了。

【讨论】:

这会导致打印错误吗?

以上是关于发送消息时禁用登录 Flask-Mail的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Flask-Mail 在测试期间实际上会发送消息

Azure SB 队列将消息发送到禁用的死信队列

用Flask-mail发送电子邮件

发送 Firebase 消息时出现 SSL 问题

Linux系统使用SSH登录之前如何显示横幅消息

在 XMPP 中返回的已发送消息