2016-06-17 36 views
1

Miguel GrinbergのFlaskyに基づいて小さなWebアプリケーションを作成しています。私はユーザー確認メールに全く同じコードを使用します。 DEBUG = True(Flaskの場合)は、すべてが魅力のように機能します。 DEBUGは=、しかし、私は次のようなエラーがFalseを取得する場合:DEBUG = Falseの場合Flaskメールはメールを送信しません

Traceback (most recent call last): 
File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner 
    self.run() 
File "/usr/lib/python3.4/threading.py", line 868, in run 
self._target(*self._args, **self._kwargs) 
File "/home/fabee/code/rowbot/app/email.py", line 9, in send_async_email 
    mail.send(msg) 
    File "/usr/local/lib/python3.4/dist-packages/flask_mail.py", line 491, in send 
    with self.connect() as connection: 
    File "/usr/local/lib/python3.4/dist-packages/flask_mail.py", line 144, in __enter__ 
self.host = self.configure_host() 
    File "/usr/local/lib/python3.4/dist-packages/flask_mail.py", line 163, in configure_host 
host.starttls() 
    File "/usr/lib/python3.4/smtplib.py", line 671, in starttls 
self.ehlo_or_helo_if_needed() 
    File "/usr/lib/python3.4/smtplib.py", line 569, in ehlo_or_helo_if_needed 
if not (200 <= self.ehlo()[0] <= 299): 
    File "/usr/lib/python3.4/smtplib.py", line 423, in ehlo 
self.putcmd(self.ehlo_msg, name or self.local_hostname) 
    File "/usr/lib/python3.4/smtplib.py", line 349, in putcmd 
self.send(str) 
    File "/usr/lib/python3.4/smtplib.py", line 341, in send 
raise SMTPServerDisconnected('please run connect() first') 
smtplib.SMTPServerDisconnected: please run connect() first 

私は本当に真のDEBUG =が本当に意味を理解していないので、私はデバッグするこれは本当に難しい見つけます。それについてのヒントや助けは大変ありがたいです。

編集:

bootstrap = Bootstrap() 
mail = Mail() 
moment = Moment() 
db = SQLAlchemy() 
pagedown = PageDown() 

login_manager = LoginManager() 
login_manager.session_protection = 'strong' 
login_manager.login_view = 'auth.login' 


def create_app(config_name): 
    app = Flask(__name__) 
    QRcode(app) 
    app.config.from_object(config[config_name]) 
    config[config_name].init_app(app) 

    bootstrap.init_app(app) 
    mail.init_app(app) 
    moment.init_app(app) 
    db.init_app(app) 
    login_manager.init_app(app) 
    pagedown.init_app(app) 

    if not app.debug and not app.testing and not app.config['SSL_DISABLE']: 
     from flask.ext.sslify import SSLify 
     sslify = SSLify(app) 

    from .main import main as main_blueprint 
    app.register_blueprint(main_blueprint) 

    from .auth import auth as auth_blueprint 
    app.register_blueprint(auth_blueprint, url_prefix='/auth') 


    ... 

    return app 

メールこれは、次のとおりです。これはmailが作成されるコードである

from threading import Thread 
from flask import current_app, render_template 
from flask.ext.mail import Message 
from . import mail 


def send_async_email(app, msg): 
    with app.app_context(): 
     mail.send(msg) 

def send_email(to, subject, template, **kwargs): 
    app = current_app._get_current_object() 
    msg = Message(app.config['MAIL_SUBJECT_PREFIX'] + ' ' + subject, 
        sender=app.config['MAIL_SENDER'], recipients=[to]) 
    msg.body = render_template(template + '.txt', **kwargs) 
    msg.html = render_template(template + '.html', **kwargs) 

    thr = Thread(target=send_async_email, args=[app, msg]) 
    thr.start() 
    return thr 

:コード

これは電子メールの方法でファイルです送信されます:

あなたは間違っていたところ
+0

使用しているコードを記述してください。コードなしであなたが間違っている場所を推測するのは難しいです。 – formatkaka

+0

あります。それを見ていただきありがとうございます。 – fabee

+0

設定はどうですか?サーバー、ポートなど – formatkaka

答えて

1

は把握できませんでしたが、あなたはこの

from flask import Flask, current_app 

from flask_mail import Mail, Message 

import threading 
#mail = Mail() 
app = Flask(__name__) 

#DEBUG = True 


app.config['MAIL_SERVER']='smtp.gmail.com' 
app.config['MAIL_PORT']= 587 
app.config['MAIL_USE_TLS'] = True 
app.config['MAIL_USE_SSL']= False 
app.config['MAIL_USERNAME'] = 'EMAIL_ID' 
app.config['MAIL_PASSWORD'] = 'PASSWORD' 

mail = Mail(app) 

@app.route('/') 
def send_mail(): 
    send_email('EMAIL_TO') 
    return "Sent" 


def send_async_email(app, msg): 
    with app.app_context(): 
     mail.send(msg) 
     print "sent" 

def send_email(to): 
    app = current_app._get_current_object() 
    msg = Message(subject='hello', 
        sender='SENDER', recipients=[to]) 
    thr = threading.Thread(target=send_async_email, args=[app, msg]) 
    thr.start() 
    return thr 

#def send_email() 

if __name__ == "__main__": 
    app.run() 

に一致するように試みることができる問題がまだある場合は、以下のコメントをしてください。

DEBUG = Trueは、アプリがデバッグモードで実行されていることを意味し、エラーがある場合は完全なスタックトレースが印刷されます。デバッグモードで実行しないと、Internal Server errorなどのエラーが表示されます。

関連する問題