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
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
@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
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. –