发送带烧瓶和外部环境/ cronjobs的电子邮件

时间:2016-03-15 17:02:37

标签: python flask

我的项目结构类似于overholtfbone示例。我可以很好地发送所有蓝图的电子邮件,但很难发送到外面。例如。来自cron脚本或芹菜任务。 我一直收到错误working outside of application context

应用程序/ factory.py

from flask import Flask
from .extensions import mail

def create_app(package_name, package_path, settings_override=None,
           register_security_blueprint=True):

    app = Flask(package_name, instance_relative_config=True)

    mail.init_app(app)
    register_blueprints(app, package_name, package_path)
    app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app)

    return app

应用程序/ extensions.py

from flask_mail import Mail
mail = Mail()

应用程序/前端/ admin.py

bp = Blueprint('admin', __name__, url_prefix='/admin', static_folder='static')

@bp.route('/')
def admin():
    msg = Message(......)
    mail.send(msg)

直到这里的一切都很好。现在我在app中有一个单独的模块,它有一些现在失败的cron脚本。

应用程序/ cron的/ alerts.py

from ..extensions import mail
from flask.ext.mail import Message

def alert():
    msg = Message('asdfasdf', sender='hello@example.com', recipients=['hello@example.com'])
    msg.body = 'hello'
    mail.send(msg)

产生错误。我怎么能绕过这个?

raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context

2 个答案:

答案 0 :(得分:1)

您需要使用http://dev.mysql.com/doc/refman/5.1/en/pluggable-storage-overview.html

from flask_mail import Mail
mail = Mail(app)

答案 1 :(得分:-1)

我建议去芹菜。对于上下文问题,我在下面找到了我的解决方案。

看看这个:

Miguel Grinberg's Blogpost on celery

或者如果您在应用程序中使用工厂模式:

Celery with Factory Pattern

第二个是某种进一步/扩展阅读。 他们俩都帮助了我很多。 (第二个也解决了我的背景问题)