2016-12-12 79 views
0

我試圖在我的Flask管理面板中實現電子郵件功能。 我已經成功將它集成到我的管理面板中,但問題是當我嘗試發送任何郵件時,它會給我帶回溯的以下錯誤。瓶子安全性,瓶子Mail AttributeError:'NoneType'對象沒有屬性'發送'

builtins.AttributeError 
AttributeError: 'NoneType' object has no attribute 'send' 

File 

"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 2000, in __call__ 
return self.wsgi_app(environ, start_response) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1991, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1567, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
raise value 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1988, in wsgi_app 
response = self.full_dispatch_request() 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1641, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1544, in handle_user_exception 
reraise(exc_type, exc_value, tb) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
raise value 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1639, in full_dispatch_request 
rv = self.dispatch_request() 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1625, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_admin/base.py", line 69, in inner 
return self._run_view(f, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_admin/base.py", line 368, in _run_view 
return fn(self, *args, **kwargs) 
File "/Users/genomics/PycharmProjects/side_project_one/app/security_layer.py", line 44, in index 
send_email(admin_form.subject.data, admin_form.sender.data, [i], admin_form.content.data, None) 
File "/Users/genomics/PycharmProjects/side_project_one/app/views/send_email.py", line 41, in send_email 
mail.send(msg) 
AttributeError: 'NoneType' object has no attribute 'send' 

send_email.py

mail = None 
def configure_mail(app): 
    # EMAIL SETTINGS 
    global mail 
    app.config.update(
     MAIL_SERVER='smtp.gmail.com', 
     MAIL_PORT=587, 
     MAIL_USE_SSL=False, 
     MAIL_USERNAME='xxxx', 
     MAIL_PASSWORD='xxxx', 
     MAIL_USE_TLS=True, 
     DEFAULT_MAIL_SENDER='Danny from DPC' 
     #SECRET_KEY='abcdefd_thats_a_charming_secret_key', 

    ) 
    mail = Mail(app) 


def send_email(subject, sender, recipients, text_body, html_body): 

    msg = Message(subject, sender=sender, recipients=recipients) 

    msg.body = text_body 
    msg.html = html_body 
    mail.send(msg) 

flask_security.py

from app.views.login_forms import AdminForm 
from app.views.send_email import send_email 

class EmailRegisterView(BaseView): 

    def is_accessible(self): 
    if not current_user.is_active or not current_user.is_authenticated: 
     return False 

    if current_user.has_role('admin_danny'): 
     return True 
    return False 

@expose('/', methods=['GET', 'POST']) 
def index(self): 
    admin_form = AdminForm() 
    if request.method == 'POST': 
     if admin_form.validate_on_submit(): 
      recipients = [admin_form.recipient.data] 
      divided_recipients = recipients[0].split(',') 
      for i in divided_recipients: 
       send_email(admin_form.subject.data, admin_form.sender.data, [i], admin_form.content.data, None) 
    return self.render('admin.html', form=admin_form) 

回答

0

好的,我發現了一個解決方案。

所以我的進口結構是錯誤的

內DEF configure_mail,我必須設置爲全局變量郵件=郵件(應用程序)。

並且該郵件變量沒有做任何事情。 所以我做的是,在我的應用程序內。 初始化

app.config.update(
MAIL_SERVER='smtp.gmail.com', 
MAIL_PORT=587, 
MAIL_USE_SSL=False, 
MAIL_USERNAME='gopokes5326', 
MAIL_PASSWORD='rkswldi86', 
MAIL_USE_TLS=True, 
DEFAULT_MAIL_SENDER='Danny from DPC' 
# SECRET_KEY='abcdefd_thats_a_charming_secret_key', 

mail = Mail(app) 

,我稱這上面郵件到send_email.py和一切工作正常。我仍然無法弄清楚確切的錯誤是什麼,但是這個伎倆。

相關問題