2015-12-14 64 views
3

如果應用程序中出現404或500錯誤,我如何能讓Flask發送電子郵件給我?我在我的config.py中插入了以下內容,我遇到了here,但我沒有收到任何電子郵件。我是Flask的新手,請原諒任何錯誤。如何從Flask發郵件給我自己的錯誤日誌?

from app import app 

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

我也是受了一點這條線從文檔困惑:

If your mail server requires credentials, these can also be provided.

我的服務器不作爲「郵件服務器」。我應該提供什麼憑據?我的電子郵件託管在GoDaddy。

回答

6

你需要這樣的添加憑據您的電子郵件(用戶名和密碼):

mail_handler = SMTPHandler(mailhost=('smtpout.secureserver.net',25), 
          fromaddr='[email protected]', 
          toaddrs=ADMINS, subject='YourApplication Failed', 
          credentials=('mail_username','mail_password')) 

在本質上,你需要登錄到(從GoDaddy的)您的郵件帳戶,以便能夠發送電子郵件。使用的IP需要是由godaddy提供的用於STMP服務的IP(我相信它是smtpout.secureserver.net),沒有SSL的端口是25,80,3535中的一個,如果您使用SSL,端口是465.

希望它有幫助!

編輯: 由於它仍然無法正常工作,所以我應該添加一個完整的最小源代碼來測試它,這是quickstart最簡單的hello單詞示例,它修改爲在發生錯誤時發送電子郵件並始終失敗

from flask import Flask 
app = Flask(__name__) 

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

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

這是你需要檢查你需要使用實際的SMTP服務器重要壽:上GoDaddy的完全測試(美國)(它會在您每次訪問頁面時發送電子郵件)。當你登錄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 
+0

這很有道理,謝謝。我有修改,但不幸的是,仍然沒有看到我的收件箱中的任何電子郵件發生錯誤。我用你的建議編輯了我的答案。我在'credentials'後添加了'port'。我安裝了日誌記錄模塊。 – mapr

+0

設置您需要使用的端口mailhost =('smtpout.secureserver.net',25)我正在編輯答案來澄清這一點。也許你需要嘗試先使用另一個客戶端來設置smtp服務器來檢查它是否正常工作,然後配置它。另外請記住,要使用godaddy提供的信息仔細檢查地址和端口,如果您不知道在哪裏可以找到它,請聯繫客戶支持部門,只需調用它即可。 –

+0

好的,謝謝。我會仔細看看的。但在第二行「info @ mydomain.com」之後,它會導致語法錯誤。它說'關鍵字arg'後面的非關鍵字arg。剛剛看到你的編輯後碰到這個:http://stackoverflow.com/questions/8191721/smtphandler-in-pythons-logging-module-sending-emails-one-at-a-time-how-can-is – mapr

0

有一件事你應該做的是考慮使用燒瓶郵件(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的答案)

然後將[email protected]發送到[email protected]。然後,您可以通過gmail或其他服務(例如mailgun)從[email protected]發送郵件。

+0

謝謝,檢查出這些資源。 – mapr