繁体   English   中英

我如何通过电子邮件向Flask发送错误日志?

[英]How can I email myself an error log from Flask?

如果应用程序中出现404或500错误,如何让Flask向我发送电子邮件? 我在我在这里遇到的config.py插入了以下内容,但是我没有收到任何电子邮件。 我是Flask的新手所以请原谅任何错误。

from app import app

ADMINS = ['myemail@domain.com']
if not app.debug:
    import logging
    from logging.handlers import SMTPHandler
    mail_handler = SMTPHandler('smtpout.secureserver.net',
                               'info@mydomain.com',
                               ADMINS, 'YourApplication Failed',
                               credentials=('info@mydomain.com','***'),
                               port=25)
    mail_handler.setLevel(logging.ERROR)
    app.logger.addHandler(mail_handler)

我也对文档中的这一行感到困惑:

如果您的邮件服务器需要凭据,也可以提供这些凭据。

我的服务器不是“邮件服务器”。 我应该提供什么证书? 我的电子邮件是在GoDaddy上托管的。

您需要添加电子邮件的凭据(用户名和密码),如下所示:

mail_handler = SMTPHandler(mailhost=('smtpout.secureserver.net',25),
                           fromaddr='info@mydomain.com',
                           toaddrs=ADMINS, subject='YourApplication Failed',
                           credentials=('mail_username','mail_password'))

实质上,您需要登录您的邮件帐户(来自godaddy)才能发送电子邮件。 所使用的IP需要是godaddy为STMP服务提供的IP(我相信它是smtpout.secureserver.net),没有SSL的端口是25,80,3535之一,如果你使用SSL端口是465。

希望能帮助到你!

编辑:因为它仍然无法正常工作,我应该添加一个完整的最小源代码来测试它,这是快速启动最小的hello word示例修改为发生错误时发送电子邮件并始终失败(它将发送一个每次访问该页面时都会收到电子邮件),在godaddy(我们)上进行全面测试:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    raise Exception
    #return 'Hello World!'

if __name__ == '__main__':
    ADMINS = ['admin@mydomain.com']
    if not app.debug:
        import logging
        from logging.handlers import SMTPHandler
        mail_handler = SMTPHandler(mailhost=('smtpout.secureserver.net',25),
                           fromaddr='admin@mydomain.com',
                           toaddrs=ADMINS, subject='YourApplication Failed',
                           credentials=('admin@mydomain.com','mypassword'))
        mail_handler.setLevel(logging.ERROR)
        app.logger.addHandler(mail_handler)
    app.run()

重要的是你需要检查你需要使用的实际smtp服务器。 当您登录godaddy时,单击电子邮件管理员按钮(电子邮件工作区上的按钮),转到顶部菜单工具 - >服务器功能。 在那之后选择你的域并在最后一行(SMTP)中你应该看到一个类似我为smtp传出访问提供的域,在我的情况下我对不同的域有不同的域:

smtpout.asia.secureserver.net
smtpout.secureserver.net

找到您需要使用的那个并修改我的示例代码,您应该立即在godaddy电子邮件的Web界面上收到电子邮件。

获得正确的服务器并使用您的凭据后,您应该在运行应用程序时收到类似这样的电子邮件:

Exception on / [GET]
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Python27\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Python27\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "hello.py", line 6, in hello_world
raise Exception
Exception

你应该做的一件事是考虑使用Flask-Mail( https://pythonhosted.org/flask-mail/#configuring-flask-mail )。 它有助于组织电子邮件过程。 阅读本文:( http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xi-email-support

假设您的域名没有smtp服务:

回覆。 证书。 在您的域名注册商处设置电子邮件转发。 然后设置一个Gmail帐户或其他服务来发送电子邮件。 https://webapps.stackexchange.com/questions/66228/add-new-alias-to-gmail-without-smtp-forwarding-only-address )。 (见@John的回答)

然后custom@yoursite.com被发送到u@gmail.com。 然后,您可以通过您的Gmail或其他服务(例如mailgun)从custom@yoursite.com发送邮件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM