2017-12-30 47 views
0
verwendet wird

Ich habe zwei Versionen von Codes für E-MailsFlask-Mail kann nicht Konfigurationen lesen, wenn config.from_object()

Version 1 (W/O externen Konfigurationsdatei) Senden

# app.py 
from flask import Flask 
from flask_mail import Mail, Message 

mail = Mail() 

app =Flask(__name__) 

app.config['MAIL_SERVER']='smtp.gmail.com' 
app.config['MAIL_PORT'] = 465 
app.config['MAIL_USERNAME'] = '[email protected]' 
app.config['MAIL_PASSWORD'] = 'test' 
app.config['MAIL_USE_TLS'] = False 
app.config['MAIL_USE_SSL'] = True 
print(app.config) 
mail.init_app(app) 

@app.route("/") 
def index(): 
    msg = Message('Hi', sender = '[email protected]', recipients = ['[email protected]']) 
    msg.body = "Hello" 
    mail.send(msg) 
    return "Sent" 

if __name__ == '__main__': 
    app.run(debug = True) 

Diese Version sendet E-Mails keine Probleme

Version 2 (Config from_object())

# app.py 
from flask import Flask 
from flask_mail import Mail, Message 

mail = Mail() 

app = Flask(__name__) 

app.config.from_object('config.DevelopmentConfig') 

# mail = Mail(app) 
print(app.config) 
mail.init_app(app) 

@app.route("/") 
def index(): 
    print('Sending email') 
    msg = Message('Tutorial point3', sender = '[email protected]', recipients = ['[email protected]']) 
    msg.body = "Hello Flask message sent from Flask-Mail " 
    mail.send(msg) 
    return "Sent" 

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

Im Folgenden finden Sie con Figuration Datei

# config.py 

class BaseConfig: 
    """Base configuration""" 
    DEBUG = False 
    TESTING = False 
    SQLALCHEMY_TRACK_MODIFICATIONS = False 
    SECRET_KEY = 'my_precious' 
    MAIL_SERVER = 'smtp.gmail.com' 
    MAIL_PORT = 465 
    MAIL_USE_SSL = True 
    MAIL_USE_TLS = False 
    MAIL_USERNAME = '[email protected]' 
    MAIL_PASSWORD = 'test' 


class DevelopmentConfig(BaseConfig): 
    """Development configuration""" 
    DEBUG = True 

Irgendwie Version 2 funktioniert nicht und geben Sie mir diesen Fehler

smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials x4sm75923481pfk.51 - gsmtp') 

Die Fehlermeldung lautet mein Credential falsch ist, aber ich denke, dass es nicht wahr, weil in der Version 1 I genau das gleiche verwenden Benutzername und Passwort und es hat gut funktioniert.

Um herauszufinden, ob meine Konfiguration von config.py geladen ist, habe ich print(app.config) (obwohl ich nicht sicher bin, ob es ein guter Weg war) und es sieht so aus, als wäre meine Konfiguration korrekt in meine Kolben App geladen.

<Config {'DEBUG': True, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': 'my_precious', 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'USE_X_SENDFILE': False, 'LOGGER_NAME': '__main__', 'LOGGER_HANDLER_POLICY': 'always', 'SERVER_NAME': None, 'APPLICATION_ROOT': None, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200), 'TRAP_BAD_REQUEST_ERRORS': False, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': True, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAIL_PASSWORD': 'test', 'MAIL_PORT': 465, 'MAIL_SERVER': 'smtp.gmail.com', 'MAIL_USERNAME': '[email protected]', 'MAIL_USE_SSL': True, 'MAIL_USE_TLS': False, 'SQLALCHEMY_TRACK_MODIFICATIONS': False}> 

Vielen Dank für Ihre Hilfe im Voraus!

Update1: Ändern Sie den Titel für das bessere Verständnis. Auch wenn ich beiden Versionen getestet, habe ich tatsächlich gmail-Adresse und das Passwort, sondern im Code-Schnipsel ersetzt ich alle Anmeldeinformationen „test“ mein Konto zu schützen

+0

Wie haben Sie bestätigt, dass Version 1 funktioniert? Haben Sie tatsächlich eine echte E-Mail-Adresse eingegeben und eine E-Mail erhalten? – kshikama

+0

@kshikama Ja, ich habe zwei Google Mail-Konten erstellt und kann sie mit meinem Code der Version 1 senden und auf meinem anderen Google Mail-Konto erhalten. Ich ersetze meine Zugangsdaten zu "Test", um mein Passwort und meine E-Mail-Adresse zu schützen. – ksn

+1

Hallo @ksn. Die Domain für Ihre E-Mail in Version 2 ist nicht richtig. Du meinst "gmail.com" und nicht "google.com" zu verwenden. –

Antwort

0

Es war ein Tippfehler in der Version 2. ich kopierte die Code von this flask official snippets, also hoffe ich, dass diese Antwort Leuten hilft, in die gleiche Falle zu fallen.

class BaseConfig: 
    """Base configuration""" 
    DEBUG = False 
    TESTING = False 
    SQLALCHEMY_TRACK_MODIFICATIONS = False 
    SECRET_KEY = 'my_precious' 
    MAIL_SERVER = 'smtp.gmail.com' # <-- Here 
    MAIL_PORT = 465 
    MAIL_USE_SSL = True 
    MAIL_USE_TLS = False 
    MAIL_USERNAME = '[email protected]' 
    MAIL_PASSWORD = 'test' 


class DevelopmentConfig(BaseConfig): 
    """Development configuration""" 
    DEBUG = True 
Verwandte Themen