错误:[Errno 111] 连接被拒绝在 flask-mail 中
我有两个示例,第一个不工作,但第二个可以。我想弄明白为什么。
错误信息:
raise err
error: [Errno 111] Connection refused
__init__.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')
那么,问题出在哪里呢?
1 个回答
3
这里的问题在于你比较的东西不一样。
在那个不工作的例子中,你是用一个叫
config
的字典样的对象里的值来配置你的应用程序,使用的是环境变量FLASK_CONFIG
中的键(如果FLASK_CONFIG
没有定义,就用“default”作为备选)。app.config.from_object(config[config_name])
而在那个工作的例子中,你是用当前模块中定义的大写名称来配置你的应用程序:
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 }