我有两个演示,第一个不起作用,但第二个起作用。我想了解原因。
错误:
raise err
error: [Errno 111] Connection refused
__初始化__。PY
mail = Mail()
MAIL_SERVER = 'smtp.gmail.com'
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL= True
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
mail.init_app(app)
app.debug = True
return app
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
views.py
from ..mymail import mmail
mmail();
mymail.py
from flask.ext.mail import Message
from . import mail
def mmail():
msg = Message(
'Hello',
sender='user@gmail.com',
recipients=
['xxxxxxxxxx@hotmail.com'])
msg.body = "This is the email body"
mail.send(msg)
return "Sent"
奇怪的是,这个例子可以正常工作:
from flask.ext.mail import Mail, Message
import os
DEBUG = True
MAIL_SERVER='smtp.gmail.com'
MAIL_PORT=465
MAIL_USE_TLS = False
MAIL_USE_SSL= True
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(__name__)
mail = Mail(app)
msg = Message(
'Hello',
sender='user@gmail.com',
recipients=
['xxxxxxxxxx@hotmail.com'])
msg.body = "This is the email body"
mail.send(msg)
return "Sent"
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
那么,问题是什么?
答案 0 :(得分:3)
这里的问题是你不是在比较苹果和苹果。
在非工作示例中,您使用来自名为config
的未指定类字典对象的值来配置应用程序,该对象传入在名为FLASK_CONFIG
的环境变量中找到的键(回退到如果未定义FLASK_CONFIG
,则为“默认”。
app.config.from_object(config[config_name])
在 working 示例中,您可以使用当前模块中定义的大写名称配置应用程序:
app.config.from_object(__name__)
# config_name is ignored
无论将什么密钥传递到非工作示例,都提供了一个没有您要用于Mail
的凭据的对象。
你可以:
首先使用默认值配置应用程序,然后从config
字典加载覆盖:
app.config.from_object(__name__)
app.config.from_object(config[config_name])
或确保您的配置具有正确的值:
config = {
"development": SomeDevConfig,
"staging": SomeStagingConfig,
"production": SomeProductionConfig,
"default": SomeDefaultConfig
}