【问题标题】:error: [Errno 111] Connection refused in flask -mail错误:[Errno 111] 烧瓶中的连接被拒绝-邮件
【发布时间】:2014-07-03 00:41:55
【问题描述】:

我有两个演示,第一个不工作,但第二个工作。我想知道为什么。

错误:

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')

那么,问题出在哪里?

【问题讨论】:

  • 第一个例子中config来自哪里?

标签: python flask flask-mail


【解决方案1】:

这里的问题是您没有将苹果与苹果进行比较。

  • 在非工作示例中,您使用来自名为config 的未指定类字典对象的值配置应用程序,并传入名为FLASK_CONFIG 的环境变量中找到的键(如果FLASK_CONFIG,则回退到“默认”未定义)。

    app.config.from_object(config[config_name])
    
  • working 示例中,您从当前模块中定义的大写名称配置应用程序:

    app.config.from_object(__name__)
    # config_name is ignored
    

传递到 non-working 示例的任何密钥都提供了一个对象,该对象没有您要用于Mail 的凭据。

您可以:

  • 首先通过您的默认值配置您的应用程序,然后从您的 config 字典中加载覆盖:

    app.config.from_object(__name__)
    app.config.from_object(config[config_name])
    
  • 或者确保您的配置具有正确的值:

    config = {
        "development": SomeDevConfig,
        "staging": SomeStagingConfig,
        "production": SomeProductionConfig,
        "default": SomeDefaultConfig
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2016-01-31
    • 2013-12-19
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多